omni::graph::exec::unstable::CompactUniqueIndex

Defined in omni/graph/exec/unstable/CompactUniqueIndex.h

class CompactUniqueIndex

Registry of unique indexes with recycling of released indexes.

Call acquireUniqueIndex() to retrieve a unique index. Indexes are “compact”, meaning abandoned indices will be reused. This means that if releaseUniqueIndex() is called with a value of 6, the next call to acquireUniqueIndex() will return 6.

This class is useful for assigning a stable unique index to a set of dynamic items.

This object is not ABI-safe.

Thread Safety

Methods are not thread safe unless otherwise stated.

Public Types

enum [anonymous]

Invalid index is used when no free indexes are available, and as well as a value for reserved elements of the allocation array (an implementation detail)

Values:

enumerator kInvalidIndex

Public Functions

CompactUniqueIndex() noexcept = default

Constructor.

~CompactUniqueIndex() noexcept = default

Destructor.

inline std::size_t acquireUniqueIndex() noexcept

Returns a unique index.

If releaseUniqueIndex() was previously called, the value passed to it will be returned (i.e. the index will be recycled). Otherwise, a new index is allocated that is one greater than the current max index.

Thread Safety

This method is not thread safe.

inline void releaseUniqueIndex(std::size_t indexToFree) noexcept

Marks an index as no longer used.

A subsequent call to acquireUniqueIndex() will prefer reusing the index given to this method.

If indexToFree was not previously returned by acquireUniqueIndex, undefined behavior will result.

Thread Safety

This method is not thread safe.

inline std::size_t size() const noexcept

Returns the size of the registry.

The maximum number of indices is returned, not the current number of “active” indices. Said differently, if acquireUniqueIndex() is called followed by releaseUniqueIndex(), size() would return 1 not 0.

Thread Safety

This method is not thread safe.