faudes::TBaseSet< T, Cmp > Class Template Reference
[State, Event and Transition Set]

#include <baseset.h>

Inheritance diagram for faudes::TBaseSet< T, Cmp >:

faudes::Type List of all members.

Detailed Description

template<class T, class Cmp = std::less<T>>
class faudes::TBaseSet< T, Cmp >

STL style set template.

This class template is built on top of the STL set template. It provides essentials of the STL interface relevant to libFAUDES plus a deferred copy mechanism, aka copy-on-write. TBaseSet serves as a base class for all libFaudes containers:

The public functions of a TBaseSet provide the high-level api, with the intention to organize the deferred copy machanism in a transparent manner. Since STL iterators refer to a particular STL container, they become invalid when the internal container is copied. Therefor TBaseSet tracks iterators and fixes them when the actual copy takes place. Clearly, this introduces some overhead, in particular when your application represents subsets as sets of iterators. You may use the public method Lock() to enforce a full copy and to prevent any further re-allocation.

Alternatively to the high-level api, a protected low-level api is provided with direct access to the internal STL set. When using this api, it is up to the derived class to ensure that the BaseSet gets detached from its refernces befor write operations can take place.

The virtual function TBaseSet<T>::Valid() is used to indicate whether a candidate element is valid as a set member. If the macro FAUDES_CHECKED is defined, the attempt to insert an invalid element triggers an exception (id 61). Invalid iterators throw an exception (id 62) when used as an argument to a BaseSet function.

Note on a boring technical detail: since STL sets are sorted, effectively all set iterators should be const. However, there is a minor issue whether or not the erase function should use a const iterator as argument. SGI derived STL implementations (as used on most GNU systems) avoid this issue by defining const and non-const iterators on sets as identical types. MS implementation (used in VS C++ by default) differ in this aspect. The class TBaseSet::Iterator hides the issue from the faudes API but it is still present internaly: in its current implementation, libfaudes will not compile with MS STL. At this stage we are aware of two workarounds, one simple but on cost of performance, one a little bit awkward. Let us know if MS STL is missioncrititical for your libfaudes application.

Definition at line 85 of file baseset.h.

Public Member Functions

 TBaseSet (void)
 Constructor.
 TBaseSet (const TBaseSet &rOtherSet)
 Copy-constructor.
virtual ~TBaseSet (void)
 Virtual destructor.
std::string Name (void) const
 Return name of TBaseSet.
void Name (const std::string &rName)
 Set name of TBaseSet.
virtual void Clear (void)
 Clear all set.
Idx Size (void) const
 Get Size of TBaseSet.
bool Empty (void) const
 Check if the TBaseSet ist Empty.
Iterator Begin (void) const
 Iterator to the begin of set.
Iterator End (void) const
 Iterator to the end of set.
virtual bool Valid (const T &rElem) const
 Test validty of candidate element.
virtual bool Erase (const T &rElem)
 Erase element by reference.
virtual Iterator Erase (const Iterator &pos)
 Erase element by iterator.
virtual void EraseSet (const TBaseSet &rOtherSet)
 Erase elements given by other set.
virtual bool Insert (const T &rElem)
 Insert specified element.
virtual void InsertSet (const TBaseSet &rOtherSet)
 Insert elements given by rOtherSet.
virtual void SetUnion (const TBaseSet &rOtherSet)
 Set Union, result is accumulated in this set.
virtual void SetIntersection (const TBaseSet &rOtherSet)
 Set Intersection, result is stored in this set.
bool Exists (const T &rElem) const
 Test existence of element.
Iterator Find (const T &rElem) const
 Find element and return iterator.
TBaseSet operator+ (const TBaseSet &rOtherSet) const
 Set union operator.
TBaseSet operator- (const TBaseSet &rOtherSet) const
 Set difference operator.
TBaseSet operator * (const TBaseSet &rOtherSet) const
 Set intersection operator.
bool operator== (const TBaseSet &rOtherSet) const
 Test for equality.
bool operator!= (const TBaseSet &rOtherSet) const
 Test for inequality.
bool operator<= (const TBaseSet &rOtherSet) const
 Test for subset.
bool operator>= (const TBaseSet &rOtherSet) const
 Test for superset.
bool operator< (const TBaseSet &rOtherSet) const
 Order for sorting containers of TBaseSet.
virtual const TBaseSetoperator= (const TBaseSet &rSrc)
 Assignment operator (fake copy).
void DValid (const std::string &rMessage="") const
 Some validation of deferred copy mechanism (provole abort).
void Detach (void) const
 Detach from extern storage (incl allocation and true copy).
void Lock (void) const
 Detach and lock any further reallocation.

Protected Types

typedef std::set< T, Cmp
>::iterator 
iterator
 STL iterator, non-const version.
typedef std::set< T, Cmp
>::const_iterator 
const_iterator
 STL iterator, const version.

Protected Member Functions

virtual void DoDWrite (TokenWriter &rTw, const std::string &rLabel="", const Type *pContext=0) const
 Token output, debugging see Type::DWrite for public wrappers.
virtual void DoWrite (TokenWriter &rTw, const std::string &rLabel="", const Type *pContext=0) const
 Token output, see Type::DWrite for public wrappers.
virtual void DoRead (TokenReader &rTr, const std::string &rLabel="", const Type *pContext=0)
 Token input, see Type::Read for public wrappers.
const TBaseSet< T, Cmp > & Assign (const TBaseSet< T, Cmp > &rOtherSet)
 Assignment function (fake copy, no storage allocated).
TBaseSet< T, Cmp >::Iterator ThisIterator (const typename std::set< T, Cmp >::const_iterator &sit) const
 Convert STL iterator.

Protected Attributes

std::set< T, Cmp > * mpSet
 STL set, if the object owns content (else NULL).
std::set< T, Cmp > * pSet
 Pointer on STL set to operate on.

Static Protected Attributes

static std::set< T, Cmp > mEmptySet = std::set<T,Cmp>()
 static empty STL set for default constructor

Private Member Functions

void RelinkReferences (void)
 Ensure that we do not serve contents to anyone else.
void AttachReference (TBaseSet *pRef) const
 Record that we serve contents to some other TBaseSet.
void DetachReference (TBaseSet *pRef) const
 Record that we stop serving contents to some TBaseSet.
void AttachIterator (Iterator *pFit) const
 Record that an iterator refers to this TBaseSet.
void DetachIterator (Iterator *pFit) const
 Record that an iterator stops to refer to this TBaseSet.

Private Attributes

std::string mMyName
 Name of TBaseSet.
std::set< TBaseSet< T, Cmp > * > mReferences
 Other BaseSets, that refer to the STL set provided by this TBaseSet.
TBaseSet< T, Cmp > * pBaseSet
 Pointer on BaseSet that owns the STL set this BaseSet referrs to.
bool mDetached
 Indicate "has no references, provides STL set".
bool mLocked
 Indicate "dont re-allocate the STL set again".
std::set< Iterator * > mIterators
 Iterators that refer to this TBaseSet.

Classes

class  Iterator
 Iterator class for high-level api to TBaseSet. More...


Member Typedef Documentation

template<class T, class Cmp = std::less<T>>
typedef std::set<T,Cmp>::const_iterator faudes::TBaseSet< T, Cmp >::const_iterator [protected]
 

STL iterator, const version.

Definition at line 652 of file baseset.h.

template<class T, class Cmp = std::less<T>>
typedef std::set<T,Cmp>::iterator faudes::TBaseSet< T, Cmp >::iterator [protected]
 

STL iterator, non-const version.

Definition at line 649 of file baseset.h.


Constructor & Destructor Documentation

template<class T, class Cmp>
faudes::TBaseSet< T, Cmp >::TBaseSet void   ) 
 

Constructor.

Definition at line 721 of file baseset.h.

template<class T, class Cmp>
faudes::TBaseSet< T, Cmp >::TBaseSet const TBaseSet< T, Cmp > &  rOtherSet  ) 
 

Copy-constructor.

Parameters:
rOtherSet Source to copy from

Definition at line 743 of file baseset.h.

template<class T, class Cmp>
faudes::TBaseSet< T, Cmp >::~TBaseSet void   )  [virtual]
 

Virtual destructor.

Definition at line 765 of file baseset.h.


Member Function Documentation

template<class T, class Cmp>
const TBaseSet< T, Cmp > & faudes::TBaseSet< T, Cmp >::Assign const TBaseSet< T, Cmp > &  rOtherSet  )  [protected]
 

Assignment function (fake copy, no storage allocated).

Definition at line 780 of file baseset.h.

template<class T, class Cmp>
void faudes::TBaseSet< T, Cmp >::AttachIterator Iterator pFit  )  const [inline, private]
 

Record that an iterator refers to this TBaseSet.

Definition at line 997 of file baseset.h.

template<class T, class Cmp>
void faudes::TBaseSet< T, Cmp >::AttachReference TBaseSet< T, Cmp > *  pRef  )  const [inline, private]
 

Record that we serve contents to some other TBaseSet.

Definition at line 983 of file baseset.h.

template<class T, class Cmp>
TBaseSet< T, Cmp >::Iterator faudes::TBaseSet< T, Cmp >::Begin void   )  const [inline]
 

Iterator to the begin of set.

Returns:
Iterator

Reimplemented in faudes::TTransSet< Cmp >.

Definition at line 1181 of file baseset.h.

template<class T, class Cmp>
void faudes::TBaseSet< T, Cmp >::Clear void   )  [virtual]
 

Clear all set.

Reimplemented from faudes::Type.

Reimplemented in faudes::TaIndexSet< Attr >, faudes::TaTransSet< Attr >, faudes::TaIndexSet< SimConditionAttribute >, faudes::TaIndexSet< StateAttr >, faudes::TaIndexSet< AttributeCFlags >, faudes::TaIndexSet< EventAttr >, and faudes::TaIndexSet< AttributeTimedState >.

Definition at line 1194 of file baseset.h.

template<class T, class Cmp>
void faudes::TBaseSet< T, Cmp >::Detach void   )  const
 

Detach from extern storage (incl allocation and true copy).

Definition at line 814 of file baseset.h.

template<class T, class Cmp>
void faudes::TBaseSet< T, Cmp >::DetachIterator Iterator pFit  )  const [inline, private]
 

Record that an iterator stops to refer to this TBaseSet.

Definition at line 1005 of file baseset.h.

template<class T, class Cmp>
void faudes::TBaseSet< T, Cmp >::DetachReference TBaseSet< T, Cmp > *  pRef  )  const [inline, private]
 

Record that we stop serving contents to some TBaseSet.

Definition at line 990 of file baseset.h.

template<class T, class Cmp>
void faudes::TBaseSet< T, Cmp >::DoDWrite TokenWriter rTw,
const std::string &  rLabel = "",
const Type pContext = 0
const [protected, virtual]
 

Token output, debugging see Type::DWrite for public wrappers.

Reimplement this function in derived classes for specific specific template parameters.

Parameters:
rTw Reference to TokenWriter
rLabel Label of section to write, defaults to name of set
pContext Write context to provide contextual information

Reimplemented from faudes::Type.

Reimplemented in faudes::NameSet, faudes::TaNameSet< Attr >, faudes::TaNameSet< SimConditionAttribute >, faudes::TaNameSet< AttributeCFlags >, and faudes::TaNameSet< EventAttr >.

Definition at line 1151 of file baseset.h.

template<class T, class Cmp>
void faudes::TBaseSet< T, Cmp >::DoRead TokenReader rTr,
const std::string &  rLabel = "",
const Type pContext = 0
[protected, virtual]
 

Token input, see Type::Read for public wrappers.

Reimplement this function in derived classes for specific specific template parameters. By convention, the default label "" should be translated to some meaningful default, eg "IndexSet" for a set of indices". The pContext pointer can de type-checked and interpreted, ie as a symboltable to provide symbolic names. It is also passed on to attributes.

Parameters:
rTr Reference to TokenReader
rLabel Label of section to read, defaults to name of set
pContext Read context to provide contextual information

Reimplemented from faudes::Type.

Reimplemented in faudes::IndexSet, faudes::TaIndexSet< Attr >, faudes::NameSet, faudes::TaNameSet< Attr >, faudes::SymbolSet, faudes::TaIndexSet< SimConditionAttribute >, faudes::TaIndexSet< StateAttr >, faudes::TaIndexSet< AttributeCFlags >, faudes::TaIndexSet< EventAttr >, faudes::TaIndexSet< AttributeTimedState >, faudes::TaNameSet< SimConditionAttribute >, faudes::TaNameSet< AttributeCFlags >, and faudes::TaNameSet< EventAttr >.

Definition at line 1166 of file baseset.h.

template<class T, class Cmp>
void faudes::TBaseSet< T, Cmp >::DoWrite TokenWriter rTw,
const std::string &  rLabel = "",
const Type pContext = 0
const [protected, virtual]
 

Token output, see Type::DWrite for public wrappers.

Reimplement this function in derived classes for specific specific template parameters. By convention, the default label "" should be translated to a) the name of the set or b) some meaningful default, eg "IndexSet" for a set of indices". The pContext pointer can de type-checked and interpreted, ie as a symboltable to provide symbolic names. It is also passed on to attributes.

Parameters:
rTw Reference to TokenWriter
rLabel Label of section to write, defaults to name of set
pContext Write context to provide contextual information

Reimplemented from faudes::Type.

Reimplemented in faudes::IndexSet, faudes::TaIndexSet< Attr >, faudes::NameSet, faudes::TaNameSet< Attr >, faudes::SymbolSet, faudes::TTransSet< Cmp >, faudes::TaIndexSet< SimConditionAttribute >, faudes::TaIndexSet< StateAttr >, faudes::TaIndexSet< AttributeCFlags >, faudes::TaIndexSet< EventAttr >, faudes::TaIndexSet< AttributeTimedState >, faudes::TaNameSet< SimConditionAttribute >, faudes::TaNameSet< AttributeCFlags >, and faudes::TaNameSet< EventAttr >.

Definition at line 1139 of file baseset.h.

template<class T, class Cmp>
void faudes::TBaseSet< T, Cmp >::DValid const std::string &  rMessage = ""  )  const
 

Some validation of deferred copy mechanism (provole abort).

Definition at line 1015 of file baseset.h.

template<class T, class Cmp>
bool faudes::TBaseSet< T, Cmp >::Empty void   )  const
 

Check if the TBaseSet ist Empty.

Returns:
True if empty

Definition at line 1132 of file baseset.h.

template<class T, class Cmp>
TBaseSet< T, Cmp >::Iterator faudes::TBaseSet< T, Cmp >::End void   )  const [inline]
 

Iterator to the end of set.

Returns:
Iterator

Reimplemented in faudes::TTransSet< Cmp >.

Definition at line 1187 of file baseset.h.

template<class T, class Cmp>
TBaseSet< T, Cmp >::Iterator faudes::TBaseSet< T, Cmp >::Erase const Iterator pos  )  [virtual]
 

Erase element by iterator.

Parameters:
pos Iterator to specify element
Returns:
Iterator to next element (or End if no such)

Reimplemented in faudes::TaIndexSet< Attr >, faudes::NameSet, faudes::TaNameSet< Attr >, faudes::TaTransSet< Attr >, faudes::TaIndexSet< SimConditionAttribute >, faudes::TaIndexSet< StateAttr >, faudes::TaIndexSet< AttributeCFlags >, faudes::TaIndexSet< EventAttr >, faudes::TaIndexSet< AttributeTimedState >, faudes::TaNameSet< SimConditionAttribute >, faudes::TaNameSet< AttributeCFlags >, and faudes::TaNameSet< EventAttr >.

Definition at line 1288 of file baseset.h.

template<class T, class Cmp>
bool faudes::TBaseSet< T, Cmp >::Erase const T &  rElem  )  [virtual]
 

Erase element by reference.

Parameters:
rElem Element to erase
Returns:
True if element used to exist

Reimplemented in faudes::TTransSet< Cmp >, and faudes::TaTransSet< Attr >.

Definition at line 1280 of file baseset.h.

template<class T, class Cmp>
void faudes::TBaseSet< T, Cmp >::EraseSet const TBaseSet< T, Cmp > &  rOtherSet  )  [virtual]
 

Erase elements given by other set.

Parameters:
rOtherSet Set of elements to erase

Definition at line 1307 of file baseset.h.

template<class T, class Cmp>
bool faudes::TBaseSet< T, Cmp >::Exists const T &  rElem  )  const
 

Test existence of element.

Parameters:
rElem Element to test
Returns:
True if element exists in set

Reimplemented in faudes::TTransSet< Cmp >.

Definition at line 1339 of file baseset.h.

template<class T, class Cmp>
TBaseSet< T, Cmp >::Iterator faudes::TBaseSet< T, Cmp >::Find const T &  rElem  )  const
 

Find element and return iterator.

Parameters:
rElem Element to find
Returns:
Iterator to element or End() if nonexistent

Reimplemented in faudes::TTransSet< Cmp >.

Definition at line 1333 of file baseset.h.

template<class T, class Cmp>
bool faudes::TBaseSet< T, Cmp >::Insert const T &  rElem  )  [virtual]
 

Insert specified element.

Parameters:
rElem Element to insert
Returns:
True if index was new to set

Reimplemented in faudes::SymbolSet, faudes::TTransSet< Cmp >, and faudes::TaTransSet< Attr >.

Definition at line 1239 of file baseset.h.

template<class T, class Cmp>
void faudes::TBaseSet< T, Cmp >::InsertSet const TBaseSet< T, Cmp > &  rOtherSet  )  [virtual]
 

Insert elements given by rOtherSet.

Parameters:
rOtherSet Set of elements to insert

Definition at line 1253 of file baseset.h.

template<class T, class Cmp>
void faudes::TBaseSet< T, Cmp >::Lock void   )  const
 

Detach and lock any further reallocation.

Definition at line 917 of file baseset.h.

template<class T, class Cmp>
void faudes::TBaseSet< T, Cmp >::Name const std::string &  rName  ) 
 

Set name of TBaseSet.

Parameters:
rName Name to set

Definition at line 1120 of file baseset.h.

template<class T, class Cmp>
std::string faudes::TBaseSet< T, Cmp >::Name void   )  const
 

Return name of TBaseSet.

Returns:
Name of TBaseSet

Definition at line 1114 of file baseset.h.

template<class T, class Cmp>
TBaseSet< T, Cmp > faudes::TBaseSet< T, Cmp >::operator * const TBaseSet< T, Cmp > &  rOtherSet  )  const
 

Set intersection operator.

Returns:
Intersection Set

Definition at line 1427 of file baseset.h.

template<class T, class Cmp>
bool faudes::TBaseSet< T, Cmp >::operator!= const TBaseSet< T, Cmp > &  rOtherSet  )  const
 

Test for inequality.

Definition at line 1446 of file baseset.h.

template<class T, class Cmp>
TBaseSet< T, Cmp > faudes::TBaseSet< T, Cmp >::operator+ const TBaseSet< T, Cmp > &  rOtherSet  )  const
 

Set union operator.

Returns:
Union Set

Definition at line 1402 of file baseset.h.

template<class T, class Cmp>
TBaseSet< T, Cmp > faudes::TBaseSet< T, Cmp >::operator- const TBaseSet< T, Cmp > &  rOtherSet  )  const
 

Set difference operator.

Returns:
Difference Set

Definition at line 1414 of file baseset.h.

template<class T, class Cmp>
bool faudes::TBaseSet< T, Cmp >::operator< const TBaseSet< T, Cmp > &  rOtherSet  )  const
 

Order for sorting containers of TBaseSet.

Definition at line 1464 of file baseset.h.

template<class T, class Cmp>
bool faudes::TBaseSet< T, Cmp >::operator<= const TBaseSet< T, Cmp > &  rOtherSet  )  const
 

Test for subset.

Definition at line 1452 of file baseset.h.

template<class T, class Cmp = std::less<T>>
virtual const TBaseSet& faudes::TBaseSet< T, Cmp >::operator= const TBaseSet< T, Cmp > &  rSrc  )  [inline, virtual]
 

Assignment operator (fake copy).

Definition at line 310 of file baseset.h.

template<class T, class Cmp>
bool faudes::TBaseSet< T, Cmp >::operator== const TBaseSet< T, Cmp > &  rOtherSet  )  const
 

Test for equality.

Definition at line 1440 of file baseset.h.

template<class T, class Cmp>
bool faudes::TBaseSet< T, Cmp >::operator>= const TBaseSet< T, Cmp > &  rOtherSet  )  const
 

Test for superset.

Definition at line 1458 of file baseset.h.

template<class T, class Cmp>
void faudes::TBaseSet< T, Cmp >::RelinkReferences void   )  [inline, private]
 

Ensure that we do not serve contents to anyone else.

Definition at line 943 of file baseset.h.

template<class T, class Cmp>
void faudes::TBaseSet< T, Cmp >::SetIntersection const TBaseSet< T, Cmp > &  rOtherSet  )  [virtual]
 

Set Intersection, result is stored in this set.

Parameters:
rOtherSet Other TBaseSet

Definition at line 1372 of file baseset.h.

template<class T, class Cmp>
void faudes::TBaseSet< T, Cmp >::SetUnion const TBaseSet< T, Cmp > &  rOtherSet  )  [virtual]
 

Set Union, result is accumulated in this set.

Parameters:
rOtherSet Other TBaseSet

Definition at line 1346 of file baseset.h.

template<class T, class Cmp>
Idx faudes::TBaseSet< T, Cmp >::Size void   )  const
 

Get Size of TBaseSet.

Returns:
Number of indices in TBaseSet

Definition at line 1126 of file baseset.h.

template<class T, class Cmp>
TBaseSet< T, Cmp >::Iterator faudes::TBaseSet< T, Cmp >::ThisIterator const typename std::set< T, Cmp >::const_iterator sit  )  const [protected]
 

Convert STL iterator.

Definition at line 1175 of file baseset.h.

template<class T, class Cmp>
bool faudes::TBaseSet< T, Cmp >::Valid const T &  rElem  )  const [inline, virtual]
 

Test validty of candidate element.

Reimplement this function for particular type T of elements, eg for an index set with T=Idx indicate 0 an invalid index.

Parameters:
rElem Candidate to test
Returns:
True if element is valid

Reimplemented in faudes::SymbolSet.

Definition at line 1232 of file baseset.h.


Member Data Documentation

template<class T, class Cmp = std::less<T>>
bool faudes::TBaseSet< T, Cmp >::mDetached [private]
 

Indicate "has no references, provides STL set".

Definition at line 671 of file baseset.h.

template<class T, class Cmp = std::less<T>>
std::set< T, Cmp > faudes::TBaseSet< T, Cmp >::mEmptySet = std::set<T,Cmp>() [static, protected]
 

static empty STL set for default constructor

Definition at line 643 of file baseset.h.

template<class T, class Cmp = std::less<T>>
std::set< Iterator* > faudes::TBaseSet< T, Cmp >::mIterators [private]
 

Iterators that refer to this TBaseSet.

Definition at line 686 of file baseset.h.

template<class T, class Cmp = std::less<T>>
bool faudes::TBaseSet< T, Cmp >::mLocked [private]
 

Indicate "dont re-allocate the STL set again".

Definition at line 674 of file baseset.h.

template<class T, class Cmp = std::less<T>>
std::string faudes::TBaseSet< T, Cmp >::mMyName [private]
 

Name of TBaseSet.

Definition at line 662 of file baseset.h.

template<class T, class Cmp = std::less<T>>
std::set<T,Cmp>* faudes::TBaseSet< T, Cmp >::mpSet [protected]
 

STL set, if the object owns content (else NULL).

Definition at line 640 of file baseset.h.

template<class T, class Cmp = std::less<T>>
std::set< TBaseSet<T,Cmp>* > faudes::TBaseSet< T, Cmp >::mReferences [private]
 

Other BaseSets, that refer to the STL set provided by this TBaseSet.

Definition at line 665 of file baseset.h.

template<class T, class Cmp = std::less<T>>
TBaseSet<T,Cmp>* faudes::TBaseSet< T, Cmp >::pBaseSet [private]
 

Pointer on BaseSet that owns the STL set this BaseSet referrs to.

Definition at line 668 of file baseset.h.

template<class T, class Cmp = std::less<T>>
std::set<T,Cmp>* faudes::TBaseSet< T, Cmp >::pSet [protected]
 

Pointer on STL set to operate on.

Definition at line 646 of file baseset.h.


The documentation for this class was generated from the following file:
Generated on Mon Nov 10 08:13:17 2008 for libFAUDES 2.11v by  doxygen 1.4.4