// This file is part of PleoCommand:
// Interactively control Pleo with psychobiological parameters
//
// Copyright (C) 2010 Oliver Hoffmann - Hoffmann_Oliver@gmx.de
//
// This program is free software; you can redistribute it and/or
// modify it under the terms of the GNU General Public License
// as published by the Free Software Foundation; either version 2
// of the License, or (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program; if not, write to the Free Software
// Foundation, Inc., 51 Franklin Street, Boston, USA.
package pleocmd.pipe.data;
import pleocmd.pipe.val.IntValue;
import pleocmd.pipe.val.Value;
import pleocmd.pipe.val.ValueType;
public final class SingleBoolData extends SingleValueData {
public static final String IDENT = "bool";
public SingleBoolData(final boolean value, final long user,
final Data parent, final byte priority, final long time) {
super(IDENT, asValue(value), user, parent, priority, time);
}
public SingleBoolData(final boolean value, final long user,
final Data parent) {
super(IDENT, asValue(value), user, parent);
}
private static Value asValue(final boolean value) {
final Value val = Value.createForType(ValueType.Int8);
((IntValue) val).set(value ? 1 : 0);
return val;
}
public static boolean isSingleBoolData(final Data data) {
return IDENT.equals(data.getSafe(0).asString());
}
public static boolean getValue(final Data data) {
return SingleValueData.getValueRaw(data).asLong() != 0;
}
public static long getUser(final Data data) {
return SingleValueData.getUser(data);
}
/**
* Creates a new {@link SingleBoolData} with a new value - the user data
* will just be copied.
*
* @param val
* value for the new {@link SingleBoolData}
* @param parent
* the original {@link Data} which should be compatible to
* {@link SingleBoolData}, i.e. {@link #isSingleBoolData(Data)}
* should return true.
* @return new {@link SingleBoolData}
*/
public static Data create(final boolean val, final Data parent) {
return new SingleBoolData(val, getUser(parent), parent);
}
}