Isis 3 Programmer Reference
|
Collector/container for arbitrary items. More...
#include <CollectorMap.h>
Public Types | |
enum | KeyPolicy { UniqueKeys, DuplicateKeys } |
Enumerated selection of key behaviour. More... | |
typedef T | CollectorType |
Data type. More... | |
typedef std::multimap< K, CollectorType, ComparePolicy< K > > | CollectorList |
A multimap attacking a key to a CollectorType and a ComparePolicy<CollectorType> More... | |
typedef CollectorList::iterator | CollectorIter |
CollectorList iterator type declaration. More... | |
typedef CollectorList::const_iterator | CollectorConstIter |
CollectorList constant iterator type declaration. More... | |
Public Member Functions | |
CollectorMap () | |
Constructor. More... | |
CollectorMap (const KeyPolicy &keyPolicy) | |
Allows the user to choose if keys can be duplicated. More... | |
virtual | ~CollectorMap () |
Destructor handles removal of the elements within the collection. More... | |
CollectorMap (const CollectorMap &cmap) | |
Copy constructor invokes the copy policy as provided by the users. More... | |
CollectorMap & | operator= (const CollectorMap &cmap) |
Assignment operator for the CollectorMap class object. More... | |
int | size () const |
Returns the size of the collection. More... | |
int | count (const K &key) const |
Returns the number of keys found in the list. More... | |
void | add (const K &key, const T &value) |
Adds the element to the list. More... | |
bool | exists (const K &key) const |
Checks the existance of a particular key in the list. More... | |
T & | get (const K &key) |
Returns the value associated with the name provided. More... | |
const T & | get (const K &key) const |
Const version returning the value associated with the given name. More... | |
int | index (const K &key) const |
Returns the index of the first occuring element in the list. More... | |
T & | getNth (int nth) |
Returns the nth value in the collection. More... | |
const T & | getNth (int nth) const |
Returns the nth value in the collection. More... | |
const K & | key (int nth) const |
Returns the nth key in the collection. More... | |
int | remove (const K &key) |
Removes and entry from the list. More... | |
CollectorConstIter | begin () const |
Const iterator into list. More... | |
CollectorConstIter | end () const |
Const iterator to end of list. More... | |
CollectorIter | begin () |
Returns the start of the list for iterating purposes. More... | |
CollectorIter | end () |
Returns the end of the list. More... | |
Private Member Functions | |
void | selfDestruct () |
Thourough destruction of list. More... | |
Private Attributes | |
KeyPolicy | _keyPolicy |
Unique or duplicate key constraint. More... | |
CollectorList | _list |
The list. More... | |
Collector/container for arbitrary items.
Used to contain types with iterators of const and non-const conditions. This is a multimap that contains arbitrary keys with arbitrary elements. It is intended to be used for pointers and copyable objects. They should be rather efficient in the copy out operation so large objects may not be suitable or classes that do not have a good copy operator. During testing it was noted that an object is copied up to four times and destroyed three times upon an add() operation.
This class is implemented using policies. The ComparePolicy is used to test key elements such as strings and double values. The NoCaseStringCompare policy is provided that expedites case insensitive string key comparisons. The RobustFloatCompare implements the comparison of double or float key types. Direct comparisons of floats can be problematic due to round off and storage manifestations of these values in conputers. The default policy, SimpleCompare, does a simple parameter to key equality test.
The RemovalPolicy is provided when a map value is removed from the list. This allows pointers and arrays to be stored in the map as well. To store pointers, use PointerRemoval and for arrays there is the ArrayRemoval policy. The default is the NoopRemoval policy which simply lets the destructor handle removals.
The CopyPolicy is necessary to properly handle the copying of elements. This is especially important for pointers and arrays. In order to minimize difficult passing strategies, map elements are passed by address and the return type is the element type. DefaultCopy simply copies the elements as is relying on the element T assigment operator to do the right thing. For pointers to objects, the PointerCopy allocates the object using the copy constructor. One could provide a similar operator assuming a clone() method existed for the type T element. The ArrayCopy policy is left to the user to provide their own as it cannot support arrays of varying length. (One should use std::vector instead!) Users can supply their own CopyPolicy that need only expose a copy(cont T *src) method.
Here are some examples that demonstrate how this policy-based template class can be used:
Using this class internal to classes is perhaps where it may be applied more frequently. The example below shows how to declare an integer key using pointers to classes:
And, finally, an example of how to use duplicate keys:
The output of the above example is:
2006-07-03 Kris Becker Added the ability to stored duplicate keys if needed (using a multimap instead of a map). Initial default behavior of unique keys is retained. See KeyPolicy.
2006-07-28 Kris Becker Fixed a bug in the NoCaseStringCompare implementation. Prior to this fix, it would not function properly at all for case-insenstive keys.
2006-08-30 Kris Becker Fixed bug in copy constructors that attempted to use a virtual method in the object being created when it must use the method from the one it is being created from. (g++ 4.1 on Suse 10.1 didn't like this bug at all!)
2008-06-18 Christopher Austin Fixed Documentation
2017-08-30 Summer Stapleton - Updated documentation. References #4807.
Definition at line 435 of file CollectorMap.h.
typedef CollectorList::const_iterator Isis::CollectorMap< K, T, ComparePolicy, RemovalPolicy, CopyPolicy >::CollectorConstIter |
CollectorList constant iterator type declaration.
Definition at line 443 of file CollectorMap.h.
typedef CollectorList::iterator Isis::CollectorMap< K, T, ComparePolicy, RemovalPolicy, CopyPolicy >::CollectorIter |
CollectorList iterator type declaration.
Definition at line 441 of file CollectorMap.h.
typedef std::multimap<K, CollectorType, ComparePolicy<K> > Isis::CollectorMap< K, T, ComparePolicy, RemovalPolicy, CopyPolicy >::CollectorList |
A multimap attacking a key to a CollectorType and a ComparePolicy<CollectorType>
Definition at line 439 of file CollectorMap.h.
typedef T Isis::CollectorMap< K, T, ComparePolicy, RemovalPolicy, CopyPolicy >::CollectorType |
Data type.
Definition at line 437 of file CollectorMap.h.
enum Isis::CollectorMap::KeyPolicy |
Enumerated selection of key behaviour.
Using this enumeration during construction allows the user of this class to specify if the keys used to identify elements are unique or can be duplicated.
Enumerator | |
---|---|
UniqueKeys | Constrain keys to be unique. |
DuplicateKeys | Allow duplication of keys. |
Definition at line 452 of file CollectorMap.h.
|
inline |
Constructor.
Definition at line 457 of file CollectorMap.h.
|
inline |
Allows the user to choose if keys can be duplicated.
This constructor is provided to the user that wants to explicity define how the keys, namely insertions are managed. The default is unique keys in the noop constructor...this one allows instantiation of either policy.
keyPolicy | Can be UniqueKeys or DuplicateKeys |
Definition at line 468 of file CollectorMap.h.
|
inlinevirtual |
Destructor handles removal of the elements within the collection.
This must take into account the removal strategy and apply to any remaining elements.
Definition at line 475 of file CollectorMap.h.
|
inline |
Copy constructor invokes the copy policy as provided by the users.
This copy constructor will transfer the map of an incoming CollectorMap to a newly created one. This process employs the user selectable CopyPolicy. It invokes the copy() method exposed in the copy policy.
cmap | The CollectorMap to be copied |
Definition at line 488 of file CollectorMap.h.
|
inline |
Adds the element to the list.
If the element exists and the key policy is restricted to uniqueness, it is replaced after the removal strategy is applied. If it doesn't exist, it is inserted into the list. For duplicate keys, it is simply inserted.
key | Key in the associative map for the value |
value | Value to be associated with the key |
Definition at line 556 of file CollectorMap.h.
Referenced by Isis::DbProfile::add(), Isis::DatabaseFactory::add(), Isis::DatabaseFactory::addAccessProfile(), Isis::DbAccess::addProfile(), Isis::DatabaseFactory::addProfile(), Isis::Kernels::categorizeByType(), Isis::DbProfile::DbProfile(), Isis::CSVReader::getColumnSummary(), Isis::DatabaseFactory::getResourceList(), Isis::Gruen::initErrorList(), Isis::DbAccess::load(), Isis::DbProfile::loadkeys(), Isis::LroWideAngleCamera::LroWideAngleCamera(), and Isis::DbProfile::replace().
|
inline |
Const iterator into list.
Definition at line 727 of file CollectorMap.h.
|
inline |
Returns the start of the list for iterating purposes.
Definition at line 745 of file CollectorMap.h.
|
inline |
Returns the number of keys found in the list.
For unique keys, this will always be 1. If duplicate keys are allowed, this will return the number of keys in the container.
key | Key to return count for |
Definition at line 542 of file CollectorMap.h.
|
inline |
Const iterator to end of list.
Definition at line 736 of file CollectorMap.h.
|
inline |
Returns the end of the list.
Definition at line 755 of file CollectorMap.h.
|
inline |
Checks the existance of a particular key in the list.
key | Key to search for in the list |
Definition at line 567 of file CollectorMap.h.
Referenced by Isis::DbProfile::add(), Isis::Kernels::categorizeByType(), Isis::DbProfile::count(), Isis::DatabaseFactory::create(), Isis::DbProfile::DbProfile(), Isis::DbProfile::exists(), Isis::CSVReader::getColumnSummary(), Isis::DbAccess::getProfile(), Isis::DatabaseFactory::getProfile(), Isis::DatabaseFactory::getResourceList(), Isis::DatabaseFactory::isAvailable(), Isis::DatabaseFactory::isDriverAvailable(), Isis::DatabaseFactory::isPersistant(), Isis::Gruen::logError(), Isis::LroWideAngleCamera::LroWideAngleCamera(), Isis::DbAccess::profileExists(), and Isis::DatabaseFactory::setDefaultProfileName().
|
inline |
Returns the value associated with the name provided.
If the specifed name and value does not exist in the list, an out_of_range exception is thrown. Use exists to predetermine of the value is in the list.
key | Key to fetch the value for |
IException | if the value is not found |
Definition at line 583 of file CollectorMap.h.
Referenced by Isis::DbProfile::add(), Isis::Kernels::categorizeByType(), Isis::DbProfile::count(), Isis::DatabaseFactory::create(), Isis::CSVReader::getColumnSummary(), Isis::DbAccess::getProfile(), Isis::DatabaseFactory::getProfile(), Isis::DatabaseFactory::isDriverAvailable(), Isis::Gruen::logError(), Isis::LroWideAngleCamera::LroWideAngleCamera(), and Isis::DbProfile::value().
|
inline |
Const version returning the value associated with the given name.
key | Key to fetch the value for |
Definition at line 599 of file CollectorMap.h.
|
inline |
Returns the nth value in the collection.
If the specifed value does not exist in the list, an out_of_range exception is thrown. Use size() to predetermine if the range is valid.
nth | Return the Nth value in the list |
Definition at line 640 of file CollectorMap.h.
Referenced by Isis::Gruen::AlgorithmStatistics(), Isis::DbProfile::DbProfile(), Isis::DbAccess::getProfile(), and Isis::LroWideAngleCamera::LroWideAngleCamera().
|
inline |
Returns the nth value in the collection.
If the specifed value does not exist in the list, an out_of_range exception is thrown. Use size() to predetermine if the range is valid.
nth | Return the Nth value in the list |
Definition at line 665 of file CollectorMap.h.
|
inline |
Returns the index of the first occuring element in the list.
This returns the index such that the getNth() methods would retrieve the element with key. For duplicate keys, it is garaunteed to return the first element. It will return -1 if the element is not in the list.
key | Key to fetch the value for |
Definition at line 620 of file CollectorMap.h.
|
inline |
Returns the nth key in the collection.
If the specifed key does not exist in the list, an out_of_range exception is thrown. Use size() to predetermine if the range is valid.
nth | Return the Nth key in the list |
Definition at line 689 of file CollectorMap.h.
Referenced by Isis::CollectorMap< int, ErrorCounter >::add(), Isis::DatabaseFactory::available(), Isis::CSVReader::columns(), Isis::CollectorMap< int, ErrorCounter >::count(), Isis::DbProfile::DbProfile(), Isis::CollectorMap< int, ErrorCounter >::exists(), Isis::CollectorMap< int, ErrorCounter >::get(), Isis::Kernels::getKernelTypes(), Isis::DatabaseFactory::getProfileList(), Isis::CollectorMap< int, ErrorCounter >::index(), Isis::DbProfile::key(), Isis::CollectorMap< int, ErrorCounter >::remove(), and Isis::DatabaseFactory::selfDestruct().
|
inline |
Assignment operator for the CollectorMap class object.
This object assignment operator is provided to properly handle the copying of CollectorMap elements to a new instantiation. This implements the CopyPolicy for each element in the cmap object to the current one. This is a two step operation: first destroy any elements that exist in the destination object (using the RemovalPolicy) and then copy all elements from the cmap object to the current one using the copy() method exposed in the CopyPolicy.
cmap | The CollectorMap to be copied |
Definition at line 511 of file CollectorMap.h.
|
inline |
Removes and entry from the list.
key | Name of key/value pair to remove from the list |
Definition at line 710 of file CollectorMap.h.
Referenced by Isis::DbProfile::remove(), Isis::DatabaseFactory::remove(), and Isis::DatabaseFactory::selfDestruct().
|
inlineprivate |
Thourough destruction of list.
This method iterates through each element in the list applying the RemovalPolicy to each value in the map. It then clears the internal list for subsequent reuse if needed.
Definition at line 770 of file CollectorMap.h.
Referenced by Isis::CollectorMap< int, ErrorCounter >::operator=(), and Isis::CollectorMap< int, ErrorCounter >::~CollectorMap().
|
inline |
Returns the size of the collection.
Definition at line 528 of file CollectorMap.h.
Referenced by Isis::Gruen::AlgorithmStatistics(), Isis::DatabaseFactory::available(), Isis::CSVReader::columns(), Isis::DbProfile::DbProfile(), Isis::Kernels::getKernelTypes(), Isis::DatabaseFactory::getProfileList(), Isis::CSVReader::isTableValid(), Isis::LroWideAngleCamera::LroWideAngleCamera(), Isis::DbAccess::profileCount(), Isis::DatabaseFactory::selfDestruct(), and Isis::DbProfile::size().
|
private |
Unique or duplicate key constraint.
Definition at line 760 of file CollectorMap.h.
Referenced by Isis::CollectorMap< int, ErrorCounter >::add(), Isis::CollectorMap< int, ErrorCounter >::CollectorMap(), and Isis::CollectorMap< int, ErrorCounter >::operator=().
|
private |
The list.
Definition at line 761 of file CollectorMap.h.
Referenced by Isis::CollectorMap< int, ErrorCounter >::add(), Isis::CollectorMap< int, ErrorCounter >::begin(), Isis::CollectorMap< int, ErrorCounter >::CollectorMap(), Isis::CollectorMap< int, ErrorCounter >::count(), Isis::CollectorMap< int, ErrorCounter >::end(), Isis::CollectorMap< int, ErrorCounter >::exists(), Isis::CollectorMap< int, ErrorCounter >::get(), Isis::CollectorMap< int, ErrorCounter >::getNth(), Isis::CollectorMap< int, ErrorCounter >::index(), Isis::CollectorMap< int, ErrorCounter >::key(), Isis::CollectorMap< int, ErrorCounter >::operator=(), Isis::CollectorMap< int, ErrorCounter >::remove(), Isis::CollectorMap< int, ErrorCounter >::selfDestruct(), and Isis::CollectorMap< int, ErrorCounter >::size().