/*
* This file is part of the HyperGraphDB source distribution. This is copyrighted
* software. For permitted uses, licensing options and redistribution, please see
* the LicensingInformation file at the root level of the distribution.
*
* Copyright (c) 2005-2010 Kobrix Software, Inc. All rights reserved.
*/
package org.hypergraphdb.type.javaprimitive;
import org.hypergraphdb.HGException;
import org.hypergraphdb.HGHandle;
import org.hypergraphdb.HGPersistentHandle;
import org.hypergraphdb.IncidenceSetRef;
import org.hypergraphdb.LazyRef;
/**
* <p>
* Boolean arrays are stored using a byte for each boolean value (as usual, 0 for false and
* 1 for true). There is aways one byte in front of the actual array to indicate
* whether we have an empty array or not. If the array is empty, the first and only
* byte has a value of 0; otherwise, its value is one.
* </p>
*
* @author Borislav Iordanov
*/
public class BooleanPrimitiveArrayType extends PrimitiveArrayType
{
public Object make(HGPersistentHandle handle, LazyRef<HGHandle[]> targetSet, IncidenceSetRef incidenceSet)
{
byte [] data = hg.getStore().getData(handle);
if (data == null)
throw new HGException("Could not find value for boolean array, handle=" + handle.toString());
boolean [] result = new boolean[data.length - 1];
for (int i = 0; i < result.length; i++)
result[i] = (data[i + 1] == 1);
return result;
}
public HGPersistentHandle store(Object instance)
{
boolean [] A = (boolean[])instance;
byte [] data = new byte[A.length + 1];
data[0] = (byte)(A.length == 0 ? 0 : 1);
for (int i = 0; i < A.length; i++)
data[i + 1] = A[i] ? (byte)1 : (byte)0;
return hg.getStore().store(data);
}
}