| OpenMS 2.5.0

Public Types | Public Member Functions | Protected Member Functions | Protected Attributes | List of all members
UniqueIdIndexer< RandomAccessContainer > Class Template Reference

A base class for random access containers for classes derived from UniqueIdInterface that adds functionality to convert a unique id into an index into the container. More...

`#include <OpenMS/CONCEPT/UniqueIdIndexer.h>`

## Public Types

typedef boost::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 RandomAccessContainer & | getBase_ () const
| A little helper to get access to the base (!) class RandomAccessContainer. More...
RandomAccessContainer & | 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...

## Detailed Description

### template<typename RandomAccessContainer>
class OpenMS::UniqueIdIndexer< RandomAccessContainer >

A base class for random access containers for classes derived from UniqueIdInterface that adds functionality to convert a unique id into an index into the container.

See FeatureMap and ConsensusMap for living examples. The RandomAccessContainer must support operator[], at(), and size().

## Member Typedef Documentation

## ◆ UniqueIdMap

typedef boost::unordered_map<UInt64, Size> UniqueIdMap

## Member Function Documentation

## ◆ getBase_() [1/2]

const RandomAccessContainer& getBase_ | ( |  | ) | const

inline protected

A little helper to get access to the base (!) class RandomAccessContainer.

This is just a static_cast and probably not interesting elsewhere, so we make it a protected member.

Referenced by UniqueIdIndexer< ConsensusMap >::resolveUniqueIdConflicts(), UniqueIdIndexer< ConsensusMap >::uniqueIdToIndex(), and UniqueIdIndexer< ConsensusMap >::updateUniqueIdToIndex().

## ◆ getBase_() [2/2]

RandomAccessContainer& getBase_ | ( |  | ) |

inline protected

A little helper to get access to the base (!) class RandomAccessContainer.

This is just a static_cast and probably not interesting elsewhere, so we make it a protected member.

## ◆ resolveUniqueIdConflicts()

Size resolveUniqueIdConflicts | ( |  | ) |

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.

Note
  Subordinate features are not checked and may remain non-unique. However, they are associated to their parent which makes identification 'unique'.

Returns
  The number of invalid (=replaced) elements

Referenced by UTILProteomicsLFQ::main_().

## ◆ swap()

void swap | ( | UniqueIdIndexer< RandomAccessContainer > & | rhs | ) |

inline

Swap.

Note
  obviously we can swap only with indices for the same type.

## ◆ uniqueIdToIndex()

Size uniqueIdToIndex | ( | UInt64 | unique_id | ) | const

inline

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:

- consult the internal hash map (i.e., uniqueid_to_index_)
- if an index is found and that element indeed has this unique id, then return the index
- if no index is found or the unique ids do not match, then update the hash map (using updateUniqueIdToIndex()) and lookup the index again
- if an index is found this time, return it, otherwise return Size(-1)

Note
  that subordinate elements are not considered here.

## ◆ updateUniqueIdToIndex()

void updateUniqueIdToIndex | ( |  | ) | const

inline

Updates the hash map from unique id to index.

See also
  uniqueIdToIndex()

Referenced by UniqueIdIndexer< ConsensusMap >::uniqueIdToIndex().

## Member Data Documentation

## ◆ uniqueid_to_index_

UniqueIdMap uniqueid_to_index_

mutable protected

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< ConsensusMap >::resolveUniqueIdConflicts(), UniqueIdIndexer< ConsensusMap >::swap(), UniqueIdIndexer< ConsensusMap >::uniqueIdToIndex(), and UniqueIdIndexer< ConsensusMap >::updateUniqueIdToIndex().