Class RefSoft<T extends ACell>

Type Parameters:
T - Type of referenced Cell
All Implemented Interfaces:
IValidated, IWriteable, Comparable<Ref<T>>

public class RefSoft<T extends ACell> extends Ref<T>
Reference class implemented via a soft reference and store lookup. Ref makes use of a soft reference to values, allowing memory to be reclaimed by the garbage collector when not required. A MissingDataException will occur with any attempt to deference this Ref when the value is not present and not stored in the current store. Instances of this class should usually be be STORED, otherwise data loss may occur due to garbage collection. However UNKNOWN RefSoft may exist temporarily (e.g. reading Refs from external messages) SoftRef must always have a non-null hash, to ensure lookup capability in store.
  • Field Details

    • softRef

      protected SoftReference<T extends ACell> softRef
      SoftReference to value. Might get updated to a fresh instance.
    • store

      protected AStore store
      SoftReference to value. Might get updated to a fresh instance.
  • Constructor Details

    • RefSoft

      protected RefSoft(AStore store, SoftReference<T> ref, Hash hash, int flags)
    • RefSoft

      protected RefSoft(AStore store, T value, Hash hash, int flags)
    • RefSoft

      protected RefSoft(AStore store, Hash hash)
  • Method Details

    • withFlags

      public RefSoft<T> withFlags(int newFlags)
      Description copied from class: Ref
      Create a new Ref of the same type with updated flags
      Specified by:
      withFlags in class Ref<T extends ACell>
      Parameters:
      newFlags - New flags to set
      Returns:
      Updated Ref
    • create

      public static <T extends ACell> RefSoft<T> create(AStore store, T value, int flags)
    • createForHash

      public static <T extends ACell> RefSoft<T> createForHash(Hash hash)
      Create a RefSoft with a Hash reference. Attempts to get the value will trigger a store lookup, which may in turn cause a MissingDataException if not found.
      Type Parameters:
      T - Type of value
      Parameters:
      hash - Hash ID of value.
      Returns:
      New RefSoft instance
    • getValue

      public T getValue()
      Description copied from class: Ref
      Gets the value from this Ref. Important notes: - May throw a MissingDataException if the data does not exist in available storage - Will return null if and only if the Ref refers to the null value
      Specified by:
      getValue in class Ref<T extends ACell>
      Returns:
      The value contained in this Ref
    • isMissing

      public boolean isMissing()
      Description copied from class: Ref
      Checks if this Ref refers to missing data, i.e. a Cell that does not exist in the currect store.
      Specified by:
      isMissing in class Ref<T extends ACell>
      Returns:
      true if this specific Ref has missing data, false otherwise.
    • equalsValue

      public boolean equalsValue(Ref<T> a)
      Description copied from class: Ref
      Checks if two Ref Values are equal. Equality is defined as referring to the same data, i.e. have an identical hash.
      Specified by:
      equalsValue in class Ref<T extends ACell>
      Parameters:
      a - The Ref to compare with
      Returns:
      true if Refs have the same value, false otherwise
    • isDirect

      public boolean isDirect()
      Description copied from class: Ref
      Return true if this Ref is a direct reference, i.e. the value is pinned in memory and cannot be garbage collected
      Specified by:
      isDirect in class Ref<T extends ACell>
      Returns:
      true if this Ref is direct, false otherwise
    • getHash

      public Hash getHash()
      Description copied from class: Ref
      Gets the Hash of this ref's value.
      Specified by:
      getHash in class Ref<T extends ACell>
      Returns:
      Hash of the value
    • validate

      public void validate() throws InvalidDataException
      Description copied from interface: IValidated
      Validates the complete structure of this object. It is necessary to ensure all child Refs are validated, so the general contract for validate is:
      1. Call super.validate() - which will indirectly call validateCell()
      2. Call validate() on any contained cells in this class
      Specified by:
      validate in interface IValidated
      Overrides:
      validate in class Ref<T extends ACell>
      Throws:
      InvalidDataException - If the data Valie is invalid in any way
    • withValue

      public Ref<T> withValue(T newValue)
      Description copied from class: Ref
      Updates the value stored within this Ref. New value must be equal in value to the old value (identical hash), but may have updated internal refs etc.
      Specified by:
      withValue in class Ref<T extends ACell>
      Parameters:
      newValue - New value
      Returns:
      Updated Ref
    • estimatedEncodingSize

      public int estimatedEncodingSize()
      Description copied from interface: IWriteable
      Estimate the encoded data size for this Cell. Used for quickly sizing buffers. Implementations should try to return a size that is likely to contain the entire object when represented in binary format, including the tag byte.
      Returns:
      The estimated size for the binary representation of this object.