
io.vertx.spi.cluster.zookeeper.impl.ChoosableSet Maven / Gradle / Ivy
/*
* Copyright (c) 2011-2015 The original author or authors
* ------------------------------------------------------
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* and Apache License v2.0 which accompanies this distribution.
*
* The Eclipse Public License is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* The Apache License v2.0 is available at
* http://www.opensource.org/licenses/apache2.0.php
*
* You may elect to redistribute this code under either of these licenses.
*/
package io.vertx.spi.cluster.zookeeper.impl;
import io.vertx.core.impl.ConcurrentHashSet;
import io.vertx.core.spi.cluster.ChoosableIterable;
import java.io.Serializable;
import java.util.Iterator;
import java.util.NoSuchElementException;
import java.util.Set;
/**
* @author Tim Fox
*/
class ChoosableSet implements ChoosableIterable, Serializable {
private final Set ids;
private volatile Iterator iter;
public ChoosableSet(int initialSize) {
ids = new ConcurrentHashSet<>(initialSize);
}
public Set getIds() {
return ids;
}
public int size() {
return ids.size();
}
public void add(T elem) {
ids.add(elem);
}
public void remove(T elem) {
ids.remove(elem);
}
public void merge(ChoosableSet toMerge) {
ids.addAll(toMerge.ids);
}
public boolean isEmpty() {
return ids.isEmpty();
}
public boolean contains(T elem) {
return ids.contains(elem);
}
@Override
public Iterator iterator() {
return ids.iterator();
}
public synchronized T choose() {
if (!ids.isEmpty()) {
if (iter == null || !iter.hasNext()) {
iter = ids.iterator();
}
try {
return iter.next();
} catch (NoSuchElementException e) {
return null;
}
} else {
return null;
}
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy