Public Member Functions | List of all members
SparseSet< Type > Class Template Reference

Holds a set of primitive values, storing them as a set of ranges. More...

Public Member Functions

 SparseSet ()=default
 
 SparseSet (const SparseSet &)=default
 
SparseSetoperator= (const SparseSet &)=default
 
 SparseSet (SparseSet &&other) noexcept
 
SparseSetoperator= (SparseSet &&other) noexcept
 
void clear ()
 Clears the set. More...
 
bool isEmpty () const noexcept
 Checks whether the set is empty. More...
 
Type size () const noexcept
 Returns the number of values in the set. More...
 
Type operator[] (Type index) const noexcept
 Returns one of the values in the set. More...
 
bool contains (Type valueToLookFor) const noexcept
 Checks whether a particular value is in the set. More...
 
int getNumRanges () const noexcept
 Returns the number of contiguous blocks of values. More...
 
Range< Type > getRange (int rangeIndex) const noexcept
 Returns one of the contiguous ranges of values stored. More...
 
Range< Type > getTotalRange () const noexcept
 Returns the range between the lowest and highest values in the set. More...
 
void addRange (Range< Type > range)
 Adds a range of contiguous values to the set. More...
 
void removeRange (Range< Type > rangeToRemove)
 Removes a range of values from the set. More...
 
void invertRange (Range< Type > range)
 Does an XOR of the values in a given range. More...
 
bool overlapsRange (Range< Type > range) const noexcept
 Checks whether any part of a given range overlaps any part of this set. More...
 
bool containsRange (Range< Type > range) const noexcept
 Checks whether the whole of a given range is contained within this one. More...
 
const Array< Range< Type > > & getRanges () const noexcept
 Returns the set as a list of ranges, which you may want to iterate over. More...
 
bool operator== (const SparseSet &other) const noexcept
 
bool operator!= (const SparseSet &other) const noexcept
 

Detailed Description

template<class Type>
class SparseSet< Type >

Holds a set of primitive values, storing them as a set of ranges.

This container acts like an array, but can efficiently hold large contiguous ranges of values. It's quite a specialised class, mostly useful for things like keeping the set of selected rows in a listbox.

The type used as a template parameter must be an integer type, such as int, short, int64, etc.

Constructor & Destructor Documentation

◆ SparseSet() [1/3]

template<class Type>
SparseSet< Type >::SparseSet ( )
default

◆ SparseSet() [2/3]

template<class Type>
SparseSet< Type >::SparseSet ( const SparseSet< Type > &  )
default

◆ SparseSet() [3/3]

template<class Type>
SparseSet< Type >::SparseSet ( SparseSet< Type > &&  other)
noexcept

Member Function Documentation

◆ operator=() [1/2]

template<class Type>
SparseSet& SparseSet< Type >::operator= ( const SparseSet< Type > &  )
default

◆ operator=() [2/2]

template<class Type>
SparseSet& SparseSet< Type >::operator= ( SparseSet< Type > &&  other)
noexcept

◆ clear()

template<class Type>
void SparseSet< Type >::clear ( )

Clears the set.

◆ isEmpty()

template<class Type>
bool SparseSet< Type >::isEmpty ( ) const
noexcept

Checks whether the set is empty.

This is much quicker than using (size() == 0).

◆ size()

template<class Type>
Type SparseSet< Type >::size ( ) const
noexcept

Returns the number of values in the set.

Because of the way the data is stored, this method can take longer if there are a lot of items in the set. Use isEmpty() for a quick test of whether there are any items.

◆ operator[]()

template<class Type>
Type SparseSet< Type >::operator[] ( Type  index) const
noexcept

Returns one of the values in the set.

Parameters
indexthe index of the value to retrieve, in the range 0 to (size() - 1).
Returns
the value at this index, or 0 if it's out-of-range

◆ contains()

template<class Type>
bool SparseSet< Type >::contains ( Type  valueToLookFor) const
noexcept

Checks whether a particular value is in the set.

◆ getNumRanges()

template<class Type>
int SparseSet< Type >::getNumRanges ( ) const
noexcept

Returns the number of contiguous blocks of values.

See also
getRange

◆ getRange()

template<class Type>
Range<Type> SparseSet< Type >::getRange ( int  rangeIndex) const
noexcept

Returns one of the contiguous ranges of values stored.

Parameters
rangeIndexthe index of the range to look up, between 0 and (getNumRanges() - 1)
See also
getTotalRange

◆ getTotalRange()

template<class Type>
Range<Type> SparseSet< Type >::getTotalRange ( ) const
noexcept

Returns the range between the lowest and highest values in the set.

See also
getRange

Referenced by SparseSet< int >::removeRange().

◆ addRange()

template<class Type>
void SparseSet< Type >::addRange ( Range< Type >  range)

Adds a range of contiguous values to the set.

e.g. addRange (Range <int> (10, 14)) will add (10, 11, 12, 13) to the set.

Referenced by SparseSet< int >::invertRange().

◆ removeRange()

template<class Type>
void SparseSet< Type >::removeRange ( Range< Type >  rangeToRemove)

Removes a range of values from the set.

e.g. removeRange (Range<int> (10, 14)) will remove (10, 11, 12, 13) from the set.

Referenced by SparseSet< int >::addRange(), and SparseSet< int >::invertRange().

◆ invertRange()

template<class Type>
void SparseSet< Type >::invertRange ( Range< Type >  range)

Does an XOR of the values in a given range.

◆ overlapsRange()

template<class Type>
bool SparseSet< Type >::overlapsRange ( Range< Type >  range) const
noexcept

Checks whether any part of a given range overlaps any part of this set.

◆ containsRange()

template<class Type>
bool SparseSet< Type >::containsRange ( Range< Type >  range) const
noexcept

Checks whether the whole of a given range is contained within this one.

◆ getRanges()

template<class Type>
const Array<Range<Type> >& SparseSet< Type >::getRanges ( ) const
noexcept

Returns the set as a list of ranges, which you may want to iterate over.

◆ operator==()

template<class Type>
bool SparseSet< Type >::operator== ( const SparseSet< Type > &  other) const
noexcept

◆ operator!=()

template<class Type>
bool SparseSet< Type >::operator!= ( const SparseSet< Type > &  other) const
noexcept

The documentation for this class was generated from the following file: