/* 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.internal.handlers;
import com.db4o.*;
import com.db4o.foundation.*;
import com.db4o.internal.*;
import com.db4o.marshall.*;
/**
* @exclude
*/
public final class BooleanHandler extends PrimitiveHandler {
static final int LENGTH = 1 + Const4.ADDED_LENGTH;
private static final byte TRUE = (byte) 'T';
private static final byte FALSE = (byte) 'F';
private static final byte NULL = (byte) 'N';
private static final Boolean DEFAULTVALUE = new Boolean(false);
public Object defaultValue(){
return DEFAULTVALUE;
}
public int linkLength(){
return LENGTH;
}
public Class primitiveJavaClass(){
return boolean.class;
}
Object read1(ByteArrayBuffer a_bytes){
if (Deploy.debug){
a_bytes.readBegin(Const4.YAPBOOLEAN);
}
byte ret = a_bytes.readByte();
if (Deploy.debug){
a_bytes.readEnd();
}
if(ret == TRUE){
return new Boolean(true);
}
if(ret == FALSE){
return new Boolean(false);
}
return null;
}
public void write(Object obj, ByteArrayBuffer buffer){
if(Deploy.debug){
buffer.writeBegin(Const4.YAPBOOLEAN);
}
buffer.writeByte(getEncodedByteValue(obj));
if(Deploy.debug){
buffer.writeEnd();
}
}
private byte getEncodedByteValue(Object obj) {
if (obj == null) {
return NULL;
}
if (((Boolean)obj).booleanValue()) {
return TRUE;
}
return FALSE;
}
public Object read(ReadContext context) {
if (Deploy.debug) {
Debug4.readBegin(context, Const4.YAPBOOLEAN);
}
byte ret = context.readByte();
if (Deploy.debug) {
Debug4.readEnd(context);
}
if(ret == TRUE){
return new Boolean(true);
}
if(ret == FALSE){
return new Boolean(false);
}
return null;
}
public void write(WriteContext context, Object obj) {
if (Deploy.debug) {
Debug4.writeBegin(context, Const4.YAPBOOLEAN);
}
context.writeByte(getEncodedByteValue(obj));
if (Deploy.debug) {
Debug4.writeEnd(context);
}
}
public Object nullRepresentationInUntypedArrays(){
return null;
}
public PreparedComparison internalPrepareComparison(Object source) {
final boolean sourceBoolean = ((Boolean)source).booleanValue();
return new PreparedComparison() {
public int compareTo(Object target) {
if(target == null){
return 1;
}
boolean targetBoolean = ((Boolean)target).booleanValue();
return sourceBoolean == targetBoolean ? 0 : (sourceBoolean ? 1 : -1);
}
};
}
}