OpenMS
|
A base class for containers with elements derived from UniqueIdInterface. This adds functionality to convert a unique id into an index into the container. More...
#include <OpenMS/CONCEPT/UniqueIdIndexer.h>
Public Types | |
typedef std::unordered_map< UInt64, Size > | UniqueIdMap |
Public Member Functions | |
Size | uniqueIdToIndex (UInt64 unique_id) const |
Returns the index of the feature with the given unique id, or Size(-1) if none exists in this random access container. More... | |
void | updateUniqueIdToIndex () const |
Updates the hash map from unique id to index. More... | |
Size | resolveUniqueIdConflicts () |
Assign new UID's to doubly occurring UID's. More... | |
void | swap (UniqueIdIndexer &rhs) |
Swap. More... | |
Protected Member Functions | |
const auto & | getBase_ () const |
A little helper to get access to the base (!) class RandomAccessContainer. More... | |
auto & | getBase_ () |
A little helper to get access to the base (!) class RandomAccessContainer. More... | |
Protected Attributes | |
UniqueIdMap | uniqueid_to_index_ |
hash map from unique id to index of features More... | |
A base class for containers with elements derived from UniqueIdInterface. This adds functionality to convert a unique id into an index into the container.
The derived class needs a data member called data_
which holds the actual elements derived from UniqueIdInterface. This is classical CRTP with the additional requirement that the derived class needs to declare a .getData() member function.
See FeatureMap and ConsensusMap for living examples. The RandomAccessContainer returned by .getData() must support operator[], at(), and size().
typedef std::unordered_map<UInt64, Size> UniqueIdMap |
|
inlineprotected |
A little helper to get access to the base (!) class RandomAccessContainer.
|
inlineprotected |
A little helper to get access to the base (!) class RandomAccessContainer.
Referenced by UniqueIdIndexer< T >::resolveUniqueIdConflicts(), UniqueIdIndexer< T >::uniqueIdToIndex(), and UniqueIdIndexer< T >::updateUniqueIdToIndex().
|
inline |
Assign new UID's to doubly occurring UID's.
Assign new UID's to non-unique UID's. This usually occurs in merging of 'old' feature files, which have sequentially increasing UID's. Conflicting entries receive a new UID, such that all UID's are unique in the container.
References UniqueIdIndexer< T >::getBase_(), UniqueIdInterface::isValid(), and UniqueIdIndexer< T >::uniqueid_to_index_.
|
inline |
Swap.
References UniqueIdIndexer< T >::uniqueid_to_index_.
Returns the index of the feature with the given unique id, or Size(-1) if none exists in this random access container.
The complexity is expected constant upon success, linear upon failure.
The lookup actually performs the following steps:
References UniqueIdIndexer< T >::getBase_(), UniqueIdIndexer< T >::uniqueid_to_index_, and UniqueIdIndexer< T >::updateUniqueIdToIndex().
|
inline |
Updates the hash map from unique id to index.
References UniqueIdIndexer< T >::getBase_(), UniqueIdInterface::INVALID, UniqueIdInterface::isValid(), and UniqueIdIndexer< T >::uniqueid_to_index_.
Referenced by UniqueIdIndexer< T >::uniqueIdToIndex().
|
mutableprotected |
hash map from unique id to index of features
This is mutable because the hash map is updated on demand, even if the underlying container is const.
Referenced by UniqueIdIndexer< T >::resolveUniqueIdConflicts(), UniqueIdIndexer< T >::swap(), UniqueIdIndexer< T >::uniqueIdToIndex(), and UniqueIdIndexer< T >::updateUniqueIdToIndex().