org.deeplearning4j.datasets.iterator.parallel.MultiBoolean Maven / Gradle / Ivy
package org.deeplearning4j.datasets.iterator.parallel;
import lombok.extern.slf4j.Slf4j;
import org.nd4j.linalg.exception.ND4JIllegalStateException;
/**
* This is utility class, that allows easy handling of multiple joint boolean states.
*
* PLEASE NOTE: It's suited for tracking up to 32 states in total.
* PLEASE NOTE: This class is NOT thread safe
*
* @author [email protected]
*/
@Slf4j
public class MultiBoolean {
private final int numEntries;
private int holder = 0;
private int max = 0;
private boolean oneTime;
private MultiBoolean timeTracker;
public MultiBoolean(int numEntries) {
this(numEntries, false);
}
public MultiBoolean(int numEntries, boolean initialValue) {
this(numEntries, initialValue, false);
}
public MultiBoolean(int numEntries, boolean initialValue, boolean oneTime) {
if (numEntries > 32)
throw new UnsupportedOperationException("Up to 32 entries can be tracked at once.");
this.oneTime = oneTime;
this.numEntries = numEntries;
for (int i = 1; i <= numEntries; i++) {
this.max |= 1 << i;
}
if (initialValue)
this.holder = this.max;
if (oneTime)
this.timeTracker = new MultiBoolean(numEntries, false, false);
}
/**
* Sets specified entry to specified state
*
* @param value
* @param entry
*/
public void set(boolean value, int entry) {
if (entry > numEntries || entry < 0)
throw new ND4JIllegalStateException(
"Entry index given (" + entry + ")in is higher then configured one (" + numEntries + ")");
if (oneTime && this.timeTracker.get(entry))
return;
if (value)
this.holder |= 1 << (entry + 1);
else
this.holder &= ~(1 << (entry + 1));
if (oneTime)
this.timeTracker.set(true, entry);
}
/**
* Gets current state for specified entry
*
* @param entry
* @return
*/
public boolean get(int entry) {
if (entry > numEntries || entry < 0)
throw new ND4JIllegalStateException(
"Entry index given (" + entry + ")in is higher then configured one (" + numEntries + ")");
return (this.holder & 1 << (entry + 1)) != 0;
}
/**
* This method returns true if ALL states are true. False otherwise.
*
* @return
*/
public boolean allTrue() {
//log.info("Holder: {}; Max: {}", holder, max);
return holder == max;
}
/**
* This method returns true if ALL states are false. False otherwise
* @return
*/
public boolean allFalse() {
return holder == 0;
}
}
© 2015 - 2024 Weber Informatics LLC | Privacy Policy