![]() |
Vcsn
2.8
Be Rational
|
Sparse Set implementation. More...
#include <sparse-set.hh>
Public Member Functions | |
| sparse_set (size_t max_size=0) | |
| The template parameter corresponds to indexes so it has to be unsigned. More... | |
| template<template< typename Elt > class Container, typename = decltype(std::declval<Container<T>>().size())> | |
| sparse_set (const Container< T > &cont) | |
| Construct with a container. More... | |
| void | set_max_size (size_t max_size) |
| Set current vector size. More... | |
| bool | emplace (T e) |
| bool | insert (T e) |
| Insert new value. More... | |
| bool | has (T e) const |
| void | erase (T e) |
| Erase an element. More... | |
| void | clear () |
| Flush all elements from the set. More... | |
| auto | begin () |
| auto | end () |
| auto | begin () const |
| auto | end () const |
Private Attributes | |
| std::vector< T > | dense_ |
| Actual elements of the set, not sorted. More... | |
| std::vector< T > | sparse_ |
| Indexes of elements in the dense_ vector. More... | |
| T | curr_ = 0 |
| Current number of elements. More... | |
Sparse Set implementation.
Based on Russ Cox trick allowing constant operations: http://research.swtch.com/sparse
Definition at line 12 of file sparse-set.hh.
|
inline |
The template parameter corresponds to indexes so it has to be unsigned.
Definition at line 19 of file sparse-set.hh.
References vcsn::sparse_set< T >::set_max_size(), vcsn::rat::size(), and vcsn::sparse_set< T >::sparse_.
|
inline |
Construct with a container.
Use size for SFINAE as it is not featured in sparse_set. Hence, this is not a copy-constructor.
Definition at line 32 of file sparse-set.hh.
References vcsn::sparse_set< T >::insert(), vcsn::sparse_set< T >::set_max_size(), and vcsn::sparse_set< T >::sparse_.
|
inline |
Definition at line 98 of file sparse-set.hh.
References vcsn::sparse_set< T >::dense_.
|
inline |
Definition at line 108 of file sparse-set.hh.
References vcsn::sparse_set< T >::dense_.
|
inline |
Flush all elements from the set.
Definition at line 93 of file sparse-set.hh.
References vcsn::sparse_set< T >::curr_.
|
inline |
Definition at line 47 of file sparse-set.hh.
References vcsn::sparse_set< T >::insert().
|
inline |
Definition at line 103 of file sparse-set.hh.
References vcsn::sparse_set< T >::curr_, and vcsn::sparse_set< T >::dense_.
|
inline |
Definition at line 113 of file sparse-set.hh.
References vcsn::sparse_set< T >::curr_, and vcsn::sparse_set< T >::dense_.
|
inline |
Erase an element.
Does nothing if the element is not present.
Definition at line 81 of file sparse-set.hh.
References vcsn::sparse_set< T >::curr_, vcsn::sparse_set< T >::dense_, vcsn::sparse_set< T >::has(), and vcsn::sparse_set< T >::sparse_.
|
inline |
Definition at line 71 of file sparse-set.hh.
References vcsn::sparse_set< T >::curr_, vcsn::sparse_set< T >::dense_, and vcsn::sparse_set< T >::sparse_.
Referenced by vcsn::sparse_set< T >::erase(), vcsn::has(), and vcsn::sparse_set< T >::insert().
|
inline |
Insert new value.
Definition at line 56 of file sparse-set.hh.
References vcsn::sparse_set< T >::curr_, vcsn::sparse_set< T >::dense_, vcsn::sparse_set< T >::has(), and vcsn::sparse_set< T >::sparse_.
Referenced by vcsn::sparse_set< T >::emplace(), and vcsn::sparse_set< T >::sparse_set().
|
inline |
Set current vector size.
Definition at line 42 of file sparse-set.hh.
References vcsn::sparse_set< T >::sparse_.
Referenced by vcsn::sparse_set< T >::sparse_set().
|
private |
Current number of elements.
Definition at line 124 of file sparse-set.hh.
Referenced by vcsn::sparse_set< T >::clear(), vcsn::sparse_set< T >::end(), vcsn::sparse_set< T >::erase(), vcsn::sparse_set< T >::has(), and vcsn::sparse_set< T >::insert().
|
private |
Actual elements of the set, not sorted.
Definition at line 120 of file sparse-set.hh.
Referenced by vcsn::sparse_set< T >::begin(), vcsn::sparse_set< T >::end(), vcsn::sparse_set< T >::erase(), vcsn::sparse_set< T >::has(), and vcsn::sparse_set< T >::insert().
|
private |
Indexes of elements in the dense_ vector.
Definition at line 122 of file sparse-set.hh.
Referenced by vcsn::sparse_set< T >::erase(), vcsn::sparse_set< T >::has(), vcsn::sparse_set< T >::insert(), vcsn::sparse_set< T >::set_max_size(), and vcsn::sparse_set< T >::sparse_set().