/* This file is part of the db4o object database http://www.db4o.com
Copyright (C) 2004 - 2011 Versant Corporation http://www.versant.com
db4o is free software; you can redistribute it and/or modify it under
the terms of version 3 of the GNU General Public License as published
by the Free Software Foundation.
db4o 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, see http://www.gnu.org/licenses/. */
package com.db4o.foundation;
import java.io.*;
/**
* yes/no/dontknow data type
*
* @exclude
*/
public final class TernaryBool implements Serializable {
private static final int NO_ID = -1;
private static final int YES_ID = 1;
private static final int UNSPECIFIED_ID = 0;
public static final TernaryBool NO = new TernaryBool(NO_ID);
public static final TernaryBool YES = new TernaryBool(YES_ID);
public static final TernaryBool UNSPECIFIED = new TernaryBool(UNSPECIFIED_ID);
private final int _value;
private TernaryBool(int value) {
_value=value;
}
public boolean booleanValue(boolean defaultValue) {
switch(_value) {
case NO_ID:
return false;
case YES_ID:
return true;
default:
return defaultValue;
}
}
public boolean isUnspecified() {
return this==UNSPECIFIED;
}
public boolean definiteYes() {
return this==YES;
}
public boolean definiteNo() {
return this==NO;
}
public static TernaryBool forBoolean(boolean value) {
return (value ? YES : NO);
}
public boolean equals(Object obj) {
if(this==obj) {
return true;
}
if(obj==null||getClass()!=obj.getClass()) {
return false;
}
TernaryBool tb=(TernaryBool)obj;
return _value==tb._value;
}
public int hashCode() {
return _value;
}
private Object readResolve() {
switch(_value) {
case NO_ID:
return NO;
case YES_ID:
return YES;
default:
return UNSPECIFIED;
}
}
public String toString() {
switch(_value) {
case NO_ID:
return "NO";
case YES_ID:
return "YES";
default:
return "UNSPECIFIED";
}
}
}