DiaDes  0.1
DIAgnosis of Discrete-Event System
Classes | Public Types | Public Member Functions | Static Public Member Functions | Public Attributes | Protected Types | Protected Attributes | Private Member Functions | List of all members
Diades::Utils::InfoManager< _Info, _InfoId, _NullInfo, _NullInfoId, _Hash > Class Template Reference

#include <InfoManager.hh>

Classes

class  GetInfo
 

Public Types

using Info = _Info
 
using InfoId = _InfoId
 
using NullInfo = _NullInfo
 
using NullInfoId = _NullInfoId
 
using Hash = _Hash
 
using Exception = Diades::Utils::Exception< InfoManager >
 
template<typename InfoIdIterator >
using InfoIdRangeInfoIterator = Diades::Utils::RangeMapperIterator< GetInfo< InfoIdIterator > >
 

Public Member Functions

 InfoManager ()=default
 
 InfoManager (InfoManager const &other)=default
 
InfoManageroperator= (InfoManager const &other)
 
 InfoManager (InfoManager &&other)
 
InfoManageroperator= (InfoManager &&other)
 
virtual ~InfoManager ()=default
 
bool hasInfo (const Info &info) const
 
bool hasInfoId (InfoId id) const
 
bool setInfo (const Info &info, InfoId id)
 
InfoId infoId (const Info &info)
 
const InfogetInfo (InfoId id) const
 
InfoManagerinitialise (unsigned capacity)
 
const std::vector< Info > & storage () const
 
InfoIdIterator begin () const
 
InfoIdIterator end () const
 
template<typename InfoIdIterator >
InfoIdRangeInfoIterator< InfoIdIteratorinfoIdRangeInfoIterator (InfoIdIterator iterator) const
 
size_t numberOfInfos () const
 
bool isConsistentWith (const InfoManager &manager) const
 
bool isEquivalentTo (const InfoManager &manager) const
 
InfoManagerappendWith (const InfoManager &manager)
 
InfoManagermakeIntersection (const InfoManager &m1, const InfoManager &m2)
 
InfoManagermakeUnion (const InfoManager &m1, const InfoManager &m2)
 
bool isNull (const Info &info) const
 
bool isNullId (const InfoId &infoId) const
 

Static Public Member Functions

static string typeName ()
 

Public Attributes

const Info nullInfo = NullInfo().nullValue()
 
const InfoId nullInfoId = NullInfoId().nullValue()
 

Protected Types

using Map = std::unordered_map< size_t, std::vector< InfoId > >
 
using InfoIdIterator = typename std::vector< InfoId >::const_iterator
 

Protected Attributes

Map _infoMap
 
std::vector< Info_infos
 
std::vector< InfoId_infoIds
 

Private Member Functions

void clear ()
 

Detailed Description

template<typename _Info, typename _InfoId, typename _NullInfo = NullValue<_Info>, typename _NullInfoId = NullValue<_InfoId>, typename _Hash = std::hash<_Info>>
class Diades::Utils::InfoManager< _Info, _InfoId, _NullInfo, _NullInfoId, _Hash >

An InfoManager is a container that associates an Info with an InfoId. Based on this class it is then possible to manipulate Info object's as simple ids with help of InfoId. No pointers/references are then embedded in an InfoId. To get the effective Info of a given InfoId, ask the InfoManager (hash table + vector). For efficiency purpose, an InfoId does not even hold a pointer about the InfoManager that creates it. It means that an InfoId may have several meanings depending on the InfoManagers that are available. It is up to the client to manage InfoId's ownership.

An InfoManager aims at being very flexible. It can be copied. We can perform intersection, union of InfoManagers. But be aware that two InfoManagers are totally independent. A consistency check can be performed to attest that an InfoManager owns a subset of Info's from another manager with the same InfoId's. If two InfoManagers own the same Info's with the same InfoId's they are equivalent.

Info/InfoId must be copyable. Info must be hashable (default is std::hash<Info>>) Info must have an operator == (by Value). Info must have a NullInfo (by default it is NullValue<Info>.nullValue()) InfoId must have a NullInfoId (by default it is NullValue<InfoId>.nullValue()) InfoId must have an operator == (by Value).

Definition at line 55 of file InfoManager.hh.

Member Typedef Documentation

◆ Exception

template<typename _Info, typename _InfoId, typename _NullInfo = NullValue<_Info>, typename _NullInfoId = NullValue<_InfoId>, typename _Hash = std::hash<_Info>>
using Diades::Utils::InfoManager< _Info, _InfoId, _NullInfo, _NullInfoId, _Hash >::Exception = Diades::Utils::Exception<InfoManager>

Definition at line 113 of file InfoManager.hh.

◆ Hash

template<typename _Info, typename _InfoId, typename _NullInfo = NullValue<_Info>, typename _NullInfoId = NullValue<_InfoId>, typename _Hash = std::hash<_Info>>
using Diades::Utils::InfoManager< _Info, _InfoId, _NullInfo, _NullInfoId, _Hash >::Hash = _Hash

Definition at line 98 of file InfoManager.hh.

◆ Info

template<typename _Info, typename _InfoId, typename _NullInfo = NullValue<_Info>, typename _NullInfoId = NullValue<_InfoId>, typename _Hash = std::hash<_Info>>
nullInfo the null Diades::Utils::InfoManager< _Info, _InfoId, _NullInfo, _NullInfoId, _Hash >::Info

Definition at line 62 of file InfoManager.hh.

◆ InfoId

template<typename _Info, typename _InfoId, typename _NullInfo = NullValue<_Info>, typename _NullInfoId = NullValue<_InfoId>, typename _Hash = std::hash<_Info>>
nullInfoId the null Diades::Utils::InfoManager< _Info, _InfoId, _NullInfo, _NullInfoId, _Hash >::InfoId

Definition at line 68 of file InfoManager.hh.

◆ InfoIdIterator

template<typename _Info, typename _InfoId, typename _NullInfo = NullValue<_Info>, typename _NullInfoId = NullValue<_InfoId>, typename _Hash = std::hash<_Info>>
using Diades::Utils::InfoManager< _Info, _InfoId, _NullInfo, _NullInfoId, _Hash >::InfoIdIterator = typename std::vector<InfoId>::const_iterator
protected

Definition at line 125 of file InfoManager.hh.

◆ InfoIdRangeInfoIterator

template<typename _Info, typename _InfoId, typename _NullInfo = NullValue<_Info>, typename _NullInfoId = NullValue<_InfoId>, typename _Hash = std::hash<_Info>>
template<typename InfoIdIterator >
using Diades::Utils::InfoManager< _Info, _InfoId, _NullInfo, _NullInfoId, _Hash >::InfoIdRangeInfoIterator = Diades::Utils::RangeMapperIterator<GetInfo<InfoIdIterator> >

Definition at line 174 of file InfoManager.hh.

◆ Map

template<typename _Info, typename _InfoId, typename _NullInfo = NullValue<_Info>, typename _NullInfoId = NullValue<_InfoId>, typename _Hash = std::hash<_Info>>
using Diades::Utils::InfoManager< _Info, _InfoId, _NullInfo, _NullInfoId, _Hash >::Map = std::unordered_map<size_t, std::vector<InfoId> >
protected

Definition at line 119 of file InfoManager.hh.

◆ NullInfo

template<typename _Info, typename _InfoId, typename _NullInfo = NullValue<_Info>, typename _NullInfoId = NullValue<_InfoId>, typename _Hash = std::hash<_Info>>
using Diades::Utils::InfoManager< _Info, _InfoId, _NullInfo, _NullInfoId, _Hash >::NullInfo = _NullInfo

Definition at line 73 of file InfoManager.hh.

◆ NullInfoId

template<typename _Info, typename _InfoId, typename _NullInfo = NullValue<_Info>, typename _NullInfoId = NullValue<_InfoId>, typename _Hash = std::hash<_Info>>
using Diades::Utils::InfoManager< _Info, _InfoId, _NullInfo, _NullInfoId, _Hash >::NullInfoId = _NullInfoId

Definition at line 81 of file InfoManager.hh.

Constructor & Destructor Documentation

◆ InfoManager() [1/3]

template<typename _Info, typename _InfoId, typename _NullInfo = NullValue<_Info>, typename _NullInfoId = NullValue<_InfoId>, typename _Hash = std::hash<_Info>>
Exception the exception associated to the Diades::Utils::InfoManager< _Info, _InfoId, _NullInfo, _NullInfoId, _Hash >::InfoManager ( )
default

Default constructor

◆ InfoManager() [2/3]

template<typename _Info, typename _InfoId, typename _NullInfo = NullValue<_Info>, typename _NullInfoId = NullValue<_InfoId>, typename _Hash = std::hash<_Info>>
Diades::Utils::InfoManager< _Info, _InfoId, _NullInfo, _NullInfoId, _Hash >::InfoManager ( InfoManager< _Info, _InfoId, _NullInfo, _NullInfoId, _Hash > const &  other)
default

Copy constructor (default)

Parameters
other

◆ InfoManager() [3/3]

template<typename _Info, typename _InfoId, typename _NullInfo = NullValue<_Info>, typename _NullInfoId = NullValue<_InfoId>, typename _Hash = std::hash<_Info>>
Diades::Utils::InfoManager< _Info, _InfoId, _NullInfo, _NullInfoId, _Hash >::InfoManager ( InfoManager< _Info, _InfoId, _NullInfo, _NullInfoId, _Hash > &&  other)
inline

Move constructor (not default)

Parameters
other

Definition at line 215 of file InfoManager.hh.

◆ ~InfoManager()

template<typename _Info, typename _InfoId, typename _NullInfo = NullValue<_Info>, typename _NullInfoId = NullValue<_InfoId>, typename _Hash = std::hash<_Info>>
virtual Diades::Utils::InfoManager< _Info, _InfoId, _NullInfo, _NullInfoId, _Hash >::~InfoManager ( )
virtualdefault

Member Function Documentation

◆ appendWith()

template<typename _Info, typename _InfoId, typename _NullInfo = NullValue<_Info>, typename _NullInfoId = NullValue<_InfoId>, typename _Hash = std::hash<_Info>>
InfoManager& Diades::Utils::InfoManager< _Info, _InfoId, _NullInfo, _NullInfoId, _Hash >::appendWith ( const InfoManager< _Info, _InfoId, _NullInfo, _NullInfoId, _Hash > &  manager)
inline

Manager appending

Parameters
managerthe manage to append
Returns
the current InfoManager that results from the appending with the other one.

By appending, we mean that any Info of the manager in parameter will be included in the current manager. However, the InfoId of the current manager associated with a given StateInfo might not be (will certainly be not) the same as the InfoId in the other manager.

Definition at line 531 of file InfoManager.hh.

Referenced by Diades::Utils::InfoManager< std::string, size_t, NullValue< std::string >, NullValue< size_t >, std::hash< std::string > >::makeUnion().

◆ begin()

template<typename _Info, typename _InfoId, typename _NullInfo = NullValue<_Info>, typename _NullInfoId = NullValue<_InfoId>, typename _Hash = std::hash<_Info>>
InfoIdIterator Diades::Utils::InfoManager< _Info, _InfoId, _NullInfo, _NullInfoId, _Hash >::begin ( ) const
inline
Returns
a begin iterator on the InfoId owned by the manager

Definition at line 418 of file InfoManager.hh.

Referenced by explainLog(), and Diades::Automata::Experimental::initialiseMatcher().

◆ clear()

template<typename _Info, typename _InfoId, typename _NullInfo = NullValue<_Info>, typename _NullInfoId = NullValue<_InfoId>, typename _Hash = std::hash<_Info>>
void Diades::Utils::InfoManager< _Info, _InfoId, _NullInfo, _NullInfoId, _Hash >::clear ( )
inlineprivate

◆ end()

template<typename _Info, typename _InfoId, typename _NullInfo = NullValue<_Info>, typename _NullInfoId = NullValue<_InfoId>, typename _Hash = std::hash<_Info>>
InfoIdIterator Diades::Utils::InfoManager< _Info, _InfoId, _NullInfo, _NullInfoId, _Hash >::end ( ) const
inline
Returns
an end iterator on the InfoId owned by the manager

Definition at line 428 of file InfoManager.hh.

Referenced by explainLog(), and Diades::Automata::Experimental::initialiseMatcher().

◆ getInfo()

template<typename _Info, typename _InfoId, typename _NullInfo = NullValue<_Info>, typename _NullInfoId = NullValue<_InfoId>, typename _Hash = std::hash<_Info>>
const Info& Diades::Utils::InfoManager< _Info, _InfoId, _NullInfo, _NullInfoId, _Hash >::getInfo ( InfoId  id) const
inline

◆ hasInfo()

template<typename _Info, typename _InfoId, typename _NullInfo = NullValue<_Info>, typename _NullInfoId = NullValue<_InfoId>, typename _Hash = std::hash<_Info>>
bool Diades::Utils::InfoManager< _Info, _InfoId, _NullInfo, _NullInfoId, _Hash >::hasInfo ( const Info info) const
inline

◆ hasInfoId()

template<typename _Info, typename _InfoId, typename _NullInfo = NullValue<_Info>, typename _NullInfoId = NullValue<_InfoId>, typename _Hash = std::hash<_Info>>
bool Diades::Utils::InfoManager< _Info, _InfoId, _NullInfo, _NullInfoId, _Hash >::hasInfoId ( InfoId  id) const
inline
Parameters
ida InfoId
Returns
true if the manager owns such an id, be aware that it does not mean the id is associated with a Info it is possibly assigned to an nullInfo

Definition at line 277 of file InfoManager.hh.

◆ infoId()

template<typename _Info, typename _InfoId, typename _NullInfo = NullValue<_Info>, typename _NullInfoId = NullValue<_InfoId>, typename _Hash = std::hash<_Info>>
InfoId Diades::Utils::InfoManager< _Info, _InfoId, _NullInfo, _NullInfoId, _Hash >::infoId ( const Info info)
inline

◆ infoIdRangeInfoIterator()

template<typename _Info, typename _InfoId, typename _NullInfo = NullValue<_Info>, typename _NullInfoId = NullValue<_InfoId>, typename _Hash = std::hash<_Info>>
template<typename InfoIdIterator >
InfoIdRangeInfoIterator<InfoIdIterator> Diades::Utils::InfoManager< _Info, _InfoId, _NullInfo, _NullInfoId, _Hash >::infoIdRangeInfoIterator ( InfoIdIterator  iterator) const
inline
Parameters
iteratora InfoIdIterator (whatever iterator which refers to a InfoId)
Returns
an iterator on the Info from the InfoId range here is how to use this. Suppose you have a range of InfoId begin,end from the current manager, then infoIdRangeInfoIterator(begin), infoIdRangeInfoIterator(end) is the corresponding Info Range.

Definition at line 443 of file InfoManager.hh.

◆ initialise()

template<typename _Info, typename _InfoId, typename _NullInfo = NullValue<_Info>, typename _NullInfoId = NullValue<_InfoId>, typename _Hash = std::hash<_Info>>
InfoManager& Diades::Utils::InfoManager< _Info, _InfoId, _NullInfo, _NullInfoId, _Hash >::initialise ( unsigned  capacity)
inline
Parameters
capacitythe capacity to reserve
Returns
the current InfoManager

The current InfoManager is fully reinitialised so any Info that was associated with it is now invalid. 'capacity' allocates memory. The recommended use is to create less Info's than capacity. If more, there will be memory reallocation (performance issue only).

Precondition
capacity > 0 && capacity < nullInfoId

Definition at line 391 of file InfoManager.hh.

Referenced by Diades::Utils::InfoManager< std::string, size_t, NullValue< std::string >, NullValue< size_t >, std::hash< std::string > >::makeIntersection().

◆ isConsistentWith()

template<typename _Info, typename _InfoId, typename _NullInfo = NullValue<_Info>, typename _NullInfoId = NullValue<_InfoId>, typename _Hash = std::hash<_Info>>
bool Diades::Utils::InfoManager< _Info, _InfoId, _NullInfo, _NullInfoId, _Hash >::isConsistentWith ( const InfoManager< _Info, _InfoId, _NullInfo, _NullInfoId, _Hash > &  manager) const
inline

Consistency checking

Parameters
managerthe manager to check with
Returns
true if the current manager is consistent with the other one.

consistency: a manager is consistent with another one if any Info owned by the current manager is owned by the other one with the same Info.

Definition at line 485 of file InfoManager.hh.

Referenced by Diades::Utils::InfoManager< std::string, size_t, NullValue< std::string >, NullValue< size_t >, std::hash< std::string > >::isEquivalentTo().

◆ isEquivalentTo()

template<typename _Info, typename _InfoId, typename _NullInfo = NullValue<_Info>, typename _NullInfoId = NullValue<_InfoId>, typename _Hash = std::hash<_Info>>
bool Diades::Utils::InfoManager< _Info, _InfoId, _NullInfo, _NullInfoId, _Hash >::isEquivalentTo ( const InfoManager< _Info, _InfoId, _NullInfo, _NullInfoId, _Hash > &  manager) const
inline

Equivalence checking

Parameters
managerthe manager to check with
Returns
true if the current manager is equivalent to the other one.

equivalence: a manager is equivalent to another one if any Info owned by the current manager is owned by the other one with the same Info and reciprocally

Definition at line 512 of file InfoManager.hh.

◆ isNull()

template<typename _Info, typename _InfoId, typename _NullInfo = NullValue<_Info>, typename _NullInfoId = NullValue<_InfoId>, typename _Hash = std::hash<_Info>>
bool Diades::Utils::InfoManager< _Info, _InfoId, _NullInfo, _NullInfoId, _Hash >::isNull ( const Info info) const
inline
Parameters
info
Returns
true if the info is the null Info

Definition at line 667 of file InfoManager.hh.

◆ isNullId()

template<typename _Info, typename _InfoId, typename _NullInfo = NullValue<_Info>, typename _NullInfoId = NullValue<_InfoId>, typename _Hash = std::hash<_Info>>
bool Diades::Utils::InfoManager< _Info, _InfoId, _NullInfo, _NullInfoId, _Hash >::isNullId ( const InfoId infoId) const
inline
Parameters
infoId
Returns
true if the info is the null Info

Definition at line 677 of file InfoManager.hh.

◆ makeIntersection()

template<typename _Info, typename _InfoId, typename _NullInfo = NullValue<_Info>, typename _NullInfoId = NullValue<_InfoId>, typename _Hash = std::hash<_Info>>
InfoManager& Diades::Utils::InfoManager< _Info, _InfoId, _NullInfo, _NullInfoId, _Hash >::makeIntersection ( const InfoManager< _Info, _InfoId, _NullInfo, _NullInfoId, _Hash > &  m1,
const InfoManager< _Info, _InfoId, _NullInfo, _NullInfoId, _Hash > &  m2 
)
inline

Intersection of two InfoManager's

Parameters
m1the first InfoManager
m2the second InfoManager
Returns
the current InfoManager.

The current InfoManager is the intersection of m1 and m2. It means that the current InfoManager consists of the Info owned by both m1 and m2. The associated InfoId is obviously different.

Definition at line 555 of file InfoManager.hh.

Referenced by Diades::Utils::InfoManager< std::string, size_t, NullValue< std::string >, NullValue< size_t >, std::hash< std::string > >::makeIntersection().

◆ makeUnion()

template<typename _Info, typename _InfoId, typename _NullInfo = NullValue<_Info>, typename _NullInfoId = NullValue<_InfoId>, typename _Hash = std::hash<_Info>>
InfoManager& Diades::Utils::InfoManager< _Info, _InfoId, _NullInfo, _NullInfoId, _Hash >::makeUnion ( const InfoManager< _Info, _InfoId, _NullInfo, _NullInfoId, _Hash > &  m1,
const InfoManager< _Info, _InfoId, _NullInfo, _NullInfoId, _Hash > &  m2 
)
inline

Union of two InfoManager's

Parameters
m1the first InfoManager
m2the second InfoManager
Returns
the current InfoManager.

The current InfoManager is the union of m1 and m2. It means that the current InfoManager consists of the Info owned by at least one InfoManager m1 or m2. The associated InfoId is obviously different.

Definition at line 613 of file InfoManager.hh.

◆ numberOfInfos()

template<typename _Info, typename _InfoId, typename _NullInfo = NullValue<_Info>, typename _NullInfoId = NullValue<_InfoId>, typename _Hash = std::hash<_Info>>
size_t Diades::Utils::InfoManager< _Info, _InfoId, _NullInfo, _NullInfoId, _Hash >::numberOfInfos ( ) const
inline

◆ operator=() [1/2]

template<typename _Info, typename _InfoId, typename _NullInfo = NullValue<_Info>, typename _NullInfoId = NullValue<_InfoId>, typename _Hash = std::hash<_Info>>
InfoManager& Diades::Utils::InfoManager< _Info, _InfoId, _NullInfo, _NullInfoId, _Hash >::operator= ( InfoManager< _Info, _InfoId, _NullInfo, _NullInfoId, _Hash > const &  other)
inline

Assignement

Parameters
other
Returns
the current InfoManager note that it is not a default one as I have constants nullInfo and nullInfoId that are already defined

Definition at line 199 of file InfoManager.hh.

◆ operator=() [2/2]

template<typename _Info, typename _InfoId, typename _NullInfo = NullValue<_Info>, typename _NullInfoId = NullValue<_InfoId>, typename _Hash = std::hash<_Info>>
InfoManager& Diades::Utils::InfoManager< _Info, _InfoId, _NullInfo, _NullInfoId, _Hash >::operator= ( InfoManager< _Info, _InfoId, _NullInfo, _NullInfoId, _Hash > &&  other)
inline

Move assignement (not default)

Parameters
other
Returns
the current InfoManager

Definition at line 225 of file InfoManager.hh.

◆ setInfo()

template<typename _Info, typename _InfoId, typename _NullInfo = NullValue<_Info>, typename _NullInfoId = NullValue<_InfoId>, typename _Hash = std::hash<_Info>>
bool Diades::Utils::InfoManager< _Info, _InfoId, _NullInfo, _NullInfoId, _Hash >::setInfo ( const Info info,
InfoId  id 
)
inline

Associate info to a specific id

Parameters
infothe Info
idthe InfoId
Returns
true if the assignement is a success i.e. info was not present in the manager with another id and id was not present with another association false if info == nullInfo or id = nullInfoId

Definition at line 292 of file InfoManager.hh.

◆ storage()

template<typename _Info, typename _InfoId, typename _NullInfo = NullValue<_Info>, typename _NullInfoId = NullValue<_InfoId>, typename _Hash = std::hash<_Info>>
const std::vector<Info>& Diades::Utils::InfoManager< _Info, _InfoId, _NullInfo, _NullInfoId, _Hash >::storage ( ) const
inline
Returns
the set of Info that is stored in the manager

Definition at line 408 of file InfoManager.hh.

Referenced by tagStates(), and trimDdAutStates2().

◆ typeName()

template<typename _Info, typename _InfoId, typename _NullInfo = NullValue<_Info>, typename _NullInfoId = NullValue<_InfoId>, typename _Hash = std::hash<_Info>>
static string Diades::Utils::InfoManager< _Info, _InfoId, _NullInfo, _NullInfoId, _Hash >::typeName ( )
inlinestatic
Returns
the name of the class

Definition at line 105 of file InfoManager.hh.

Member Data Documentation

◆ _infoIds

template<typename _Info, typename _InfoId, typename _NullInfo = NullValue<_Info>, typename _NullInfoId = NullValue<_InfoId>, typename _Hash = std::hash<_Info>>
std::vector<InfoId> Diades::Utils::InfoManager< _Info, _InfoId, _NullInfo, _NullInfoId, _Hash >::_infoIds
protected

◆ _infoMap

template<typename _Info, typename _InfoId, typename _NullInfo = NullValue<_Info>, typename _NullInfoId = NullValue<_InfoId>, typename _Hash = std::hash<_Info>>
Map Diades::Utils::InfoManager< _Info, _InfoId, _NullInfo, _NullInfoId, _Hash >::_infoMap
protected

◆ _infos

template<typename _Info, typename _InfoId, typename _NullInfo = NullValue<_Info>, typename _NullInfoId = NullValue<_InfoId>, typename _Hash = std::hash<_Info>>
std::vector<Info> Diades::Utils::InfoManager< _Info, _InfoId, _NullInfo, _NullInfoId, _Hash >::_infos
protected

◆ nullInfo

template<typename _Info, typename _InfoId, typename _NullInfo = NullValue<_Info>, typename _NullInfoId = NullValue<_InfoId>, typename _Hash = std::hash<_Info>>
const Info Diades::Utils::InfoManager< _Info, _InfoId, _NullInfo, _NullInfoId, _Hash >::nullInfo = NullInfo().nullValue()

◆ nullInfoId

template<typename _Info, typename _InfoId, typename _NullInfo = NullValue<_Info>, typename _NullInfoId = NullValue<_InfoId>, typename _Hash = std::hash<_Info>>
const InfoId Diades::Utils::InfoManager< _Info, _InfoId, _NullInfo, _NullInfoId, _Hash >::nullInfoId = NullInfoId().nullValue()

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