Main Page | Namespace List | Class Hierarchy | Alphabetical List | Class List | File List | Namespace Members | Class Members | File Members | Related Pages

abeans::models::acs::baci::util::async::HandleDataStore Class Reference

Collaboration diagram for abeans::models::acs::baci::util::async::HandleDataStore:

Collaboration graph
[legend]
List of all members.

Public Member Functions

 HandleDataStore ()
 HandleDataStore (int initialCapacity)
 HandleDataStore (int initialCapacity, int maxCapacity)
int size ()
int capacity ()
boolean isEmpty ()
Object get (int handle)
void set (int handle, Object data)
void setCapacity (int newCapacity)
int first ()
int last ()
int next (int handle)
int previous (int handle)
boolean isAllocated (int handle)
int allocate ()
int allocate (int handle)
int preallocate ()
int allocate (int handle, boolean preallocate)
void ackAllocation (int handle)
void deallocate (int handle)
void deallocate (int handle, boolean depreallocate)
String toString ()

Static Public Attributes

final int DEFAULT_MAX_CAPACITY = Integer.MAX_VALUE

Private Attributes

int capacity
int maxCapacity = DEFAULT_MAX_CAPACITY
int size
Element[] elements
int first
int last

Detailed Description

Data structure for maintaining a collection of elements that can be referred to using handles.

Stores data elements in an array-like structure. Individual elements are addressed using handles, which can be though of as indices in the array. It fulfills these requirements:

  1. allocation - a new element can be added and is assigned a unique handle. Allocation is an O(1) operation.
  2. deallocation - an element can be removed from the registrar. The handle is freed, and can be assigned to another element during allocation at a later time. Deallocation is an O(1) operation.
  3. retrieval - a reference to the element can be retrieved for reading and writing. Retrieval is an O(1) operation.
  4. enumeration - elements stored can be traversed from first to last. Costs of acquiring first, last, next and previous element of the array are O(1).

This ADT is suitable for enumerating resources that are frequently allocated, retrieved and deallocated without losing large amounts of memory and/or time.

This is essentially a doubly-linked list of elements, which are placed in an array. Each element has assigned a handle (the index in the array), and handles of the elements that come previous and next to it. There are actually two chains of elements: the free element chain, which contains all elements that have not yet been allocated, and the allocated element chain. Free element chain is cyclic (passing the end resumes at the beginning), and contains the element with the handle 0. The allocated element chain is not cyclic: it starts with the element that was first allocated, and ends with the one that was last allocated.

Author:
Matej Sekoranja (matej.sekoranja@cosylab.com)

Klemen Zagar (klemen.zagar@cosylab.com)

Version:
@VERSION@


Constructor & Destructor Documentation

abeans::models::acs::baci::util::async::HandleDataStore::HandleDataStore  )  [inline]
 

Constructs a HandleDataStore with zero offset and initial capacity of ten.

abeans::models::acs::baci::util::async::HandleDataStore::HandleDataStore int  initialCapacity  )  [inline]
 

Constructs a HandleDataStore with zero offset.

Parameters:
initialCapacity the initial capacity of the list.
Exceptions:
IllegalArgumentException if the specified initial capacity is negative

abeans::models::acs::baci::util::async::HandleDataStore::HandleDataStore int  initialCapacity,
int  maxCapacity
[inline]
 

Constructs a HandleDataStore.

Creates a HandleDataStore and allocates enough space to hold initialCapacity elements.

Parameters:
initialCapacity the initial capacity of the list.
Exceptions:
IllegalArgumentException if the specified initial capacity is negative


Member Function Documentation

void abeans::models::acs::baci::util::async::HandleDataStore::ackAllocation int  handle  )  [inline]
 

Completes allocation of handle, to be used to completely allocate handle after preallocation.

Parameters:
handle handle to be completely allocated

int abeans::models::acs::baci::util::async::HandleDataStore::allocate int  handle,
boolean  preallocate
[inline]
 

Allocate an element with given handle in this HandleDataStore.

Assures that this ADT is capable of holding yet another element and returns a handle to it.

Parameters:
handle handle to be allocated
preallocate if true element is not really allocated (only reserved, listing through the ADT will skip preallocated elements), to completely allocate preallocated elements use ackAllocation(handle) or canceled by deallocate(handle, true) method.
Returns:
newly allocated handle if allocation was successfull, otherwise 0
See also:
deallocate

int abeans::models::acs::baci::util::async::HandleDataStore::allocate int  handle  )  [inline]
 

Allocate an element in this HandleDataStore.

Parameters:
handle hanlde be allocated
Returns:
newly allocated handle if allocation was successfull, otherwise 0
See also:
deallocate

int abeans::models::acs::baci::util::async::HandleDataStore::allocate  )  [inline]
 

Allocate an element in this HandleDataStore.

Returns:
newly allocated handle if allocation was successfull, otherwise 0
See also:
deallocate

int abeans::models::acs::baci::util::async::HandleDataStore::capacity  )  [inline]
 

Returns the capacity of this ADT.

Capacity is the maximum number of elements that this ADT can hold before resizing itself.

Returns:
the capacity of this ADT.

void abeans::models::acs::baci::util::async::HandleDataStore::deallocate int  handle,
boolean  depreallocate
[inline]
 

Deallocate an element with the given handle.

The element and its corresponding handle can be reused at a later call to allocate.

Parameters:
handle the handle of the element to deallocate.
depreallocate has to be true, if handle was only preallocated
See also:
allocate

void abeans::models::acs::baci::util::async::HandleDataStore::deallocate int  handle  )  [inline]
 

Deallocate an element with the given handle.

The element and its corresponding handle can be reused at a later call to allocate.

Parameters:
handle the handle of the element to deallocate.
See also:
allocate

int abeans::models::acs::baci::util::async::HandleDataStore::first  )  [inline]
 

Return the handle of the first element in this ADT.

Returns:
the handle of the element that was the first one to get allocated and has not yet been deallocated. Useful for determining the starting point when enumerating the entire ADT.
See also:
next

previous

last

Object abeans::models::acs::baci::util::async::HandleDataStore::get int  handle  )  [inline]
 

Returns the element with the specified handle.

NOTE: handle is not checked, if it is valid.

Parameters:
handle handle of the element
Exceptions:
IndexOutOfBoundsException if handle is out of bounds.

boolean abeans::models::acs::baci::util::async::HandleDataStore::isAllocated int  handle  )  [inline]
 

Determines whether a given handle is allocated.

Parameters:
handle the handle in question.
Returns:
true if an element with handle handle already exists in this ADT, false otherwise.

boolean abeans::models::acs::baci::util::async::HandleDataStore::isEmpty  )  [inline]
 

Tests if this list has no elements.

Returns:
true if this list has no elements, false otherwise.

int abeans::models::acs::baci::util::async::HandleDataStore::last  )  [inline]
 

Return the handle of the last element in this ADT.

Returns:
the handle of the element that was the last one to get allocated and has not yet been deallocated. Useful for determining the starting point when enumerating the entire ADT.
See also:
next

previous

first

int abeans::models::acs::baci::util::async::HandleDataStore::next int  handle  )  [inline]
 

Return the handle of the next element in this ADT.

Parameters:
handle handle of the element whose sucessor's handle we wish to acquire.
Returns:
the handle of the element that follows the one whose handle is handle. If handle is the last element, 0 is returned.

int abeans::models::acs::baci::util::async::HandleDataStore::preallocate  )  [inline]
 

Preallocate an element in this HandleDataStore.

Returns:
newly allocated handle if allocation was successfull, otherwise 0
See also:
allocate

deallocate

int abeans::models::acs::baci::util::async::HandleDataStore::previous int  handle  )  [inline]
 

Return the handle of the previous element in this ADT.

Parameters:
handle handle of the element whose predecessor's handle we wish to acquire.
Returns:
the handle of the element that precedes the one whose handle is handle. If handle is the first element, 0 is returned.

void abeans::models::acs::baci::util::async::HandleDataStore::set int  handle,
Object  data
[inline]
 

Sets the element with the specified handle.

NOTE: handle is not checked, if it is valid.

Parameters:
handle handle of the element
data data to be set
Exceptions:
IndexOutOfBoundsException if handle is out of bounds.

void abeans::models::acs::baci::util::async::HandleDataStore::setCapacity int  newCapacity  )  [inline]
 

Sets the capacity of this HandleDataStore instance to hold newCapacity elements;.

Parameters:
newCapacity the desired capacity.

int abeans::models::acs::baci::util::async::HandleDataStore::size  )  [inline]
 

Returns the number of elements in this ADT.

Returns:
the number of elements in this ADT.

String abeans::models::acs::baci::util::async::HandleDataStore::toString  )  [inline]
 

Returns a single-line rendition of this instance into text.

Returns:
internal state of this instance


Member Data Documentation

int abeans::models::acs::baci::util::async::HandleDataStore::capacity [private]
 

Capacity of this ADT.

final int abeans::models::acs::baci::util::async::HandleDataStore::DEFAULT_MAX_CAPACITY = Integer.MAX_VALUE [static]
 

Default maximum capacity of this ADT.

Element [] abeans::models::acs::baci::util::async::HandleDataStore::elements [private]
 

Array of elements

int abeans::models::acs::baci::util::async::HandleDataStore::first [private]
 

Handle of the first non-free element.

int abeans::models::acs::baci::util::async::HandleDataStore::last [private]
 

Handle of the last non-free element.

int abeans::models::acs::baci::util::async::HandleDataStore::maxCapacity = DEFAULT_MAX_CAPACITY [private]
 

Maximum capacity of this ADT.

int abeans::models::acs::baci::util::async::HandleDataStore::size [private]
 

Number of elements currently in the HandleDataStore.


The documentation for this class was generated from the following file:
Generated on Thu Apr 30 02:43:09 2009 for ACS Java API by doxygen 1.3.8