|
| HashTable (int block_size=16 *1024, int init_hash_size=32 *1024) |
|
| HashTable (const HashTable &other) |
|
| ~HashTable () |
|
T * | Get (int p1, int p2) |
| Get item whose parents are 'p1', 'p2'... Create it if it doesn't exist. More...
|
|
T * | Get (int p1, int p2, int p3, int p4=-1) |
|
int | GetId (int p1, int p2) |
| Get id of item whose parents are p1, p2... Create it if it doesn't exist. More...
|
|
int | GetId (int p1, int p2, int p3, int p4=-1) |
|
T * | Find (int p1, int p2) |
| Find item whose parents are p1, p2... Return NULL if it doesn't exist. More...
|
|
T * | Find (int p1, int p2, int p3, int p4=-1) |
|
const T * | Find (int p1, int p2) const |
|
const T * | Find (int p1, int p2, int p3, int p4=-1) const |
|
int | FindId (int p1, int p2) const |
| Find id of item whose parents are p1, p2... Return -1 if it doesn't exist. More...
|
|
int | FindId (int p1, int p2, int p3, int p4=-1) const |
|
int | Size () const |
| Return the number of elements currently stored in the HashTable. More...
|
|
int | NumIds () const |
| Return the total number of ids (used and unused) in the HashTable. More...
|
|
int | NumFreeIds () const |
| Return the number of free/unused ids in the HashTable. More...
|
|
bool | IdExists (int id) const |
| Return true if item 'id' exists in (is used by) the container. More...
|
|
void | Delete (int id) |
| Remove an item from the hash table. More...
|
|
void | DeleteAll () |
| Remove all items. More...
|
|
void | Alloc (int id, int p1, int p2) |
| Allocate an item at 'id'. Enlarge the underlying BlockArray if necessary. More...
|
|
void | UpdateUnused () |
| Reinitialize the internal list of unallocated items. More...
|
|
void | Reparent (int id, int new_p1, int new_p2) |
| Make an item hashed under different parent IDs. More...
|
|
void | Reparent (int id, int new_p1, int new_p2, int new_p3, int new_p4=-1) |
|
long | MemoryUsage () const |
| Return total size of allocated memory (tables plus items), in bytes. More...
|
|
void | PrintMemoryDetail () const |
| Write details of the memory usage to the mfem output stream. More...
|
|
iterator | begin () |
|
iterator | end () |
|
const_iterator | cbegin () const |
|
const_iterator | cend () const |
|
| BlockArray (int block_size=16 *1024) |
|
| BlockArray (const BlockArray< T > &other) |
|
| ~BlockArray () |
|
int | Append () |
| Allocate and construct a new item in the array, return its index. More...
|
|
int | Append (const T &item) |
| Allocate and copy-construct a new item in the array, return its index. More...
|
|
T & | At (int index) |
| Access item of the array. More...
|
|
const T & | At (int index) const |
|
T & | operator[] (int index) |
| Access item of the array. More...
|
|
const T & | operator[] (int index) const |
|
int | Size () const |
| Return the number of items actually stored. More...
|
|
int | Capacity () const |
| Return the current capacity of the BlockArray. More...
|
|
void | DeleteAll () |
| Destroy all items, set size to zero. More...
|
|
void | Swap (BlockArray< T > &other) |
|
long | MemoryUsage () const |
|
iterator | begin () |
|
iterator | end () |
|
const_iterator | cbegin () const |
|
const_iterator | cend () const |
|
template<typename T>
class mfem::HashTable< T >
HashTable is a container for items that require associative access through pairs (or quadruples) of indices:
(p1, p2) -> item (p1, p2, p3, p4) -> item
An example of this are edges and faces in a mesh. Each edge is uniquely identified by two parent vertices and so can be easily accessed from different elements using this class. Similarly for faces.
The order of the p1, p2, ... indices is not relevant as they are sorted each time this class is invoked.
There are two main methods this class provides. The Get(...) methods always return an item given the two or four indices. If the item didn't previously exist, the methods creates a new one. The Find(...) methods, on the other hand, just return NULL or -1 if the item doesn't exist.
Each new item is automatically assigned a unique ID - the index of the item inside the BlockArray. The IDs may (but need not) be used as p1, p2, ... of other items.
The item type (T) needs to follow either the Hashed2 or the Hashed4 concept. It is easiest to just inherit from these structs.
All items in the container can also be accessed sequentially using the provided iterator.
Definition at line 71 of file hash.hpp.