org.hypergraphdb.type.javaprimitive
Class PrimitiveTypeBase<JavaType>

java.lang.Object
  extended by org.hypergraphdb.type.javaprimitive.PrimitiveTypeBase<JavaType>
All Implemented Interfaces:
java.util.Comparator<byte[]>, HGGraphHolder, HGOrderedSearchable<JavaType,HGPersistentHandle>, HGSearchable<JavaType,HGPersistentHandle>, ByteArrayConverter<JavaType>, HGAtomType, HGPrimitiveType<JavaType>
Direct Known Subclasses:
BooleanType, DoubleType, FloatType, HGHandleType, NumericTypeBase, StringType

public abstract class PrimitiveTypeBase<JavaType>
extends java.lang.Object
implements HGPrimitiveType<JavaType>, HGOrderedSearchable<JavaType,HGPersistentHandle>, java.util.Comparator<byte[]>

A generic, base implementation of the primitive Java types. It maintains an index of all primitive values added for faster lookup. It also shares primitive values for more compact storage - that is, the store method will always return the same handle for an already added primitive value.

Concrete classes for concrete primitive types must provide a name for the managed index as well as a comparator class for their instance values.

A primitively typed object is translated to a byte [] as follows:

Author:
Borislav Iordanov

Constructor Summary
PrimitiveTypeBase()
           
 
Method Summary
 int compare(byte[] left, byte[] right)
           
 HGSearchResult<HGPersistentHandle> find(JavaType key)
           Returns a HGSearchResult over all values matching a key in the searched entity.
 HGSearchResult<HGPersistentHandle> findGT(JavaType key)
          Return a range of all values strictly greater than the specified key.
 HGSearchResult<HGPersistentHandle> findGTE(JavaType key)
          Return a range of all values greater than or equal to the specified key.
 HGSearchResult<HGPersistentHandle> findLT(JavaType key)
          Return a range of all values strictly less than the specified key.
 HGSearchResult<HGPersistentHandle> findLTE(JavaType key)
          Return a range of all values less than or equal to the specified key.
 JavaType fromByteArray(byte[] byteArray)
           
 int getRefCountFor(JavaType o)
           
 java.lang.Object make(HGPersistentHandle handle, LazyRef<HGHandle[]> targetSet, IncidenceSetRef incidenceSet)
          Construct a new run-time instance of a hypergraph atom.
 void release(HGPersistentHandle handle)
          Release a hypergraph value instance from the persistent store.
 void setHyperGraph(HyperGraph hg)
          During load time, set the HyperGraph instance to which this atom belongs.
 HGPersistentHandle store(java.lang.Object instance)
          Store a run-time instance of a hypergraph atom into the hypergraph HGStore as a new atom.
 boolean subsumes(java.lang.Object l, java.lang.Object r)
          A generic semantic predicate that returns true if the first argument is more general than the second.
 byte[] toByteArray(JavaType object)
           
 
Methods inherited from class java.lang.Object
equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 
Methods inherited from interface org.hypergraphdb.type.HGPrimitiveType
getComparator
 
Methods inherited from interface java.util.Comparator
equals
 

Constructor Detail

PrimitiveTypeBase

public PrimitiveTypeBase()
Method Detail

compare

public int compare(byte[] left,
                   byte[] right)
Specified by:
compare in interface java.util.Comparator<byte[]>

setHyperGraph

public final void setHyperGraph(HyperGraph hg)
Description copied from interface: HGGraphHolder

During load time, set the HyperGraph instance to which this atom belongs.

Specified by:
setHyperGraph in interface HGGraphHolder

release

public final void release(HGPersistentHandle handle)
Description copied from interface: HGAtomType

Release a hypergraph value instance from the persistent store.

This method should be called when a HGPersistentHandle returned from the store is no longer in use.

Specified by:
release in interface HGAtomType
Parameters:
handle - The persistent handle of the value to release.

make

public java.lang.Object make(HGPersistentHandle handle,
                             LazyRef<HGHandle[]> targetSet,
                             IncidenceSetRef incidenceSet)
Description copied from interface: HGAtomType

Construct a new run-time instance of a hypergraph atom. A plain node must be constructed whenever the targetSet parameter is null or of length 0. Otherwise, a HGLink instance must be constructed.

It is not required that all atom types be able to construct both plain (node) atoms and HGLinks. It is up to an HGAtomType implementation to support either or both. When a HGLink counterpart is not available for a particular run-time type, an implementation may choose to create an instance of the default link value holder implementation HGValuedLink, provided by HyperGraph.

Specified by:
make in interface HGAtomType
Parameters:
handle - The HGPersistentHandle of the atom value.
targetSet - When the atom is a link, this parameter holds the target set of the link. When the atom is a node, the parameter is an array of 0 length.
incidenceSet - TODO
Returns:
The run-time atom instance. The return value should never be null. In case the handle points to an invalid instance (inexisting or with a erronous layout), the method should throw a HGException.

fromByteArray

public JavaType fromByteArray(byte[] byteArray)
Specified by:
fromByteArray in interface ByteArrayConverter<JavaType>

toByteArray

public byte[] toByteArray(JavaType object)
Specified by:
toByteArray in interface ByteArrayConverter<JavaType>

store

public HGPersistentHandle store(java.lang.Object instance)
Description copied from interface: HGAtomType

Store a run-time instance of a hypergraph atom into the hypergraph HGStore as a new atom.

Specified by:
store in interface HGAtomType
Parameters:
instance - The atom instance.
Returns:
The persistent handle of the stored value.

find

public HGSearchResult<HGPersistentHandle> find(JavaType key)
Description copied from interface: HGSearchable

Returns a HGSearchResult over all values matching a key in the searched entity.

If there are no matches, the method should return HGSearchResult.EMPTY. The method will never return a null. A HGException may be thrown in exceptional situations.

Specified by:
find in interface HGSearchable<JavaType,HGPersistentHandle>

findGT

public HGSearchResult<HGPersistentHandle> findGT(JavaType key)
Description copied from interface: HGOrderedSearchable

Return a range of all values strictly greater than the specified key.

Specified by:
findGT in interface HGOrderedSearchable<JavaType,HGPersistentHandle>
Parameters:
key - The search key.
Returns:
An HGSearchResult over the resulting range of values.

findGTE

public HGSearchResult<HGPersistentHandle> findGTE(JavaType key)
Description copied from interface: HGOrderedSearchable

Return a range of all values greater than or equal to the specified key.

Specified by:
findGTE in interface HGOrderedSearchable<JavaType,HGPersistentHandle>
Parameters:
key - The search key.
Returns:
An HGSearchResult over the resulting range of values.

findLT

public HGSearchResult<HGPersistentHandle> findLT(JavaType key)
Description copied from interface: HGOrderedSearchable

Return a range of all values strictly less than the specified key.

Specified by:
findLT in interface HGOrderedSearchable<JavaType,HGPersistentHandle>
Parameters:
key - The search key.
Returns:
An HGSearchResult over the resulting range of values.

findLTE

public HGSearchResult<HGPersistentHandle> findLTE(JavaType key)
Description copied from interface: HGOrderedSearchable

Return a range of all values less than or equal to the specified key.

Specified by:
findLTE in interface HGOrderedSearchable<JavaType,HGPersistentHandle>
Parameters:
key - The search key.
Returns:
An HGSearchResult over the resulting range of values.

subsumes

public boolean subsumes(java.lang.Object l,
                        java.lang.Object r)
Description copied from interface: HGAtomType

A generic semantic predicate that returns true if the first argument is more general than the second. Atom types must implement this notion of specialization whenever meaningful in the context of the entities being constructed.

The notion of subsumption can be seen as partial equivalence, or equivalence in one direction only.

As a relation, subsumtion is transitive and reflexive. The latter implies that, at a minimum, the subsumes method must return true if general.equals(specific).

Specified by:
subsumes in interface HGAtomType
Parameters:
l - The object which might be more general. Cannot be null.
r - The object which might be more specific. Cannot be null.
Returns:
true if specific can be used whenever general is required and false otherwise.

getRefCountFor

public int getRefCountFor(JavaType o)