IDGenerators
IDGenerators provides several classes that generate unique identifyers
which are designed to fullfill specific requirements. The classes may also be
used as a Functor, but be aware that parallelism is generally not supported.
GUIDGenerator
The GUIDGenerator class generates
Globally Unique IDentifyers,
it is not thread-safe.
value_type |
The type of the generated GUIDs. |
GUIDGenerator() |
Constructor. |
value_type generate() |
Generates one GUID. |
value_type operator()() |
Generates one GUID. |
unsigned count() const |
Returns the number of generated values. |
KeyGenerator
The class template <typename T = unsigned> KeyGenerator generates
keys for binary-tree-based structures such as STL's
map. It is not
thread-safe.
Generally, binary trees have logarithmic time for certain operations, based on
the assumption that the tree is balanced. Inserting items in sorted order in a
tree results in a maximally un-balanced tree, i.e. a structure resembling a
linked list rather than a tree. As a result, operations that usually run in
logarithmic time require linear time. The KeyGenerator is designed to generate
values that should result in a balanced tree when inserted sequentially.
Note that a KeyGenerator will typically always produce the same sequence, a
reset() function allows a reset to the initial state.
value_type |
The generated key-types, alias for template parameter "T". |
template <typename T = unsigned>
KeyGenerator() |
Constructor. |
value_type generate() |
Generates one key. |
value_type operator()() |
Generates one key. |
void reset() |
Reset to initial state. |
unsigned count() const |
Returns the number of generated values. |
IncGenerator
The class template <typename T = unsigned> IncGenerator generates
incremental values: 0, 1, 2, .... It is not thread-safe.
Note that an IncGenerator will typically always produce the same sequence, a
reset() function allows a reset to the initial state.
value_type |
The generated index-types, alias for template parameter "T". |
template <typename T = unsigned>
IncGenerator() |
Constructor. |
value_type generate() |
Generates one index. |
value_type operator()() |
Generates one index. |
void reset() |
Reset to initial state. |
unsigned count() const |
Returns the number of generated values. |
Example
To explain the purpose of the KeyGenerator consider the following piece
of code:
#include <map>
#include <cvmlcpp/math/Euclid>
#include <cvmlcpp/base/IDGenerators>
std::map<unsigned, dPoint3D> doubleMap;
KeyGenerator<unsigned> kGen;
for (unsigned i = 0; i < N; ++i)
{
dPoint3D d;
// Option A
doubleMap.insert(std::pair<unsigned, double>(i, d));
// Option B
doubleMap.insert(std::pair<unsigned, double>(kGen(), d));
}
In this code, using kGen() requires a bit more processing, but will
result in a better balanced tree.
|