The Gaudi Framework  v30r0 (c919700c)
Containers::KeyedObjectManager< SETUP > Class Template Reference

KeyedObjectManager Class to manage keyed objects. More...

#include <GaudiKernel/KeyedObjectManager.h>

Collaboration diagram for Containers::KeyedObjectManager< SETUP >:

Public Member Functions

 KeyedObjectManager ()
 Standard Constructor. More...
 
 KeyedObjectManager (KeyedObjectManager &&other)
 
virtual ~KeyedObjectManager ()
 Standard Destructor. More...
 
void clearDirect ()
 Clear all direct access fields. More...
 
long insertDirect (ObjectContainerBase *b, ContainedObject *c, void *o, long k)
 Insert element into direct access map. More...
 
long isDirect () const
 Check if the container is dirty. More...
 
void * object (long key) const
 Retrieve object identified by a key from the container. More...
 
long insert (ObjectContainerBase *b, ContainedObject *c, void *o, long *k)
 Insert new object into container. More...
 
long insert (ObjectContainerBase *b, ContainedObject *c, void *o, long k)
 Insert new object into container. More...
 
void * erase (long key, const void *obj)
 Remove object from container (very inefficient if key is invalid) More...
 
long erase (seq_type::iterator beg, seq_type::iterator end)
 Remove object by sequential iterators. More...
 
void reserve (long size)
 Reserve buffer space. More...
 
void clear ()
 Clear content of the vector. More...
 
void setup (void *seq, void **rndm)
 Setup of the Map and the parent object. More...
 
template<>
CLID classID ()
 
template<>
CLID classID ()
 
template<>
void * object (long value) const
 
template<>
long insert (ObjectContainerBase *b, ContainedObject *c, void *o, long *k)
 
template<>
long insert (ObjectContainerBase *b, ContainedObject *c, void *o, long k)
 
template<>
long insertDirect (ObjectContainerBase *b, ContainedObject *c, void *o, long k)
 
template<>
void clearDirect ()
 
template<>
void * erase (long key, const void *obj)
 
template<>
long erase (seq_type::iterator beg, seq_type::iterator end)
 
template<>
CLID classID ()
 
template<>
void * object (long) const
 
template<>
long insert (ObjectContainerBase *b, ContainedObject *c, void *o, long *k)
 
template<>
long insert (ObjectContainerBase *b, ContainedObject *c, void *o, long k)
 
template<>
long insertDirect (ObjectContainerBase *b, ContainedObject *c, void *o, long k)
 
template<>
void clearDirect ()
 
template<>
void * erase (long, const void *)
 
template<>
long erase (seq_type::iterator beg, seq_type::iterator end)
 
template<>
CLID classID ()
 

Static Public Member Functions

static CLID classID ()
 Access CLID for this type of container. More...
 

Private Types

typedef std::vector< void * > seq_type
 

Private Member Functions

void onDirty () const
 Callback when the container becomes dirty. More...
 
template<>
void onDirty () const
 
template<>
void onDirty () const
 

Private Attributes

seq_typem_seq
 Container holding array like container. More...
 
long m_direct
 Dirty flag. More...
 
long m_keyCtxt
 
union {
   char   buffer [128]
 Buffer space to hold keyed container. More...
 
   SETUP *   s
 
m_setup
 

Detailed Description

template<class SETUP>
class Containers::KeyedObjectManager< SETUP >

KeyedObjectManager Class to manage keyed objects.

Object manager class.

This class is instantiated for two container types: map and hashmap. Other types are possible, but currently not supported. Other implementations may be achieved by specializing the SETUP class.

As an example below the specialization for a vector like implementation is shown.

Author
M.Frank CERN/LHCb
Version
1.0

Definition at line 46 of file KeyedObjectManager.h.

Member Typedef Documentation

template<class SETUP >
typedef std::vector<void*> Containers::KeyedObjectManager< SETUP >::seq_type
private

Definition at line 49 of file KeyedObjectManager.h.

Constructor & Destructor Documentation

template<class T >
Containers::KeyedObjectManager< T >::KeyedObjectManager ( )

Standard Constructor.

Definition at line 94 of file KeyedObjectManager.cpp.

94  : m_seq( nullptr ), m_direct( 0 )
95 {
96  if ( sizeof( typename T::map_type ) > sizeof( m_setup.buffer ) ) {
97  throw GaudiException( "Basic STL contaier sizes are incompatible", "KeyedContainer", 0 );
98  }
99  m_setup.s = ::new ( m_setup.buffer + sizeof( m_setup.s ) ) T();
100  m_keyCtxt = -1;
101 }
union Containers::KeyedObjectManager::@4 m_setup
Define general base for Gaudi exception.
seq_type * m_seq
Container holding array like container.
template<class T >
Containers::KeyedObjectManager< T >::KeyedObjectManager ( KeyedObjectManager< SETUP > &&  other)

Definition at line 104 of file KeyedObjectManager.cpp.

105  : m_seq( nullptr ), m_direct( other.m_direct ), m_keyCtxt( other.m_keyCtxt )
106 {
107  m_setup.s = ::new ( m_setup.buffer + sizeof( m_setup.s ) ) T( std::move( *other.m_setup.s ) );
108 
109  other.m_keyCtxt = -1;
110  other.m_seq = nullptr;
111  other.m_direct = 0;
112 }
union Containers::KeyedObjectManager::@4 m_setup
STL namespace.
seq_type * m_seq
Container holding array like container.
template<class T >
Containers::KeyedObjectManager< T >::~KeyedObjectManager ( )
virtual

Standard Destructor.

Definition at line 115 of file KeyedObjectManager.cpp.

116 {
117  m_setup.s->~T();
118 }
union Containers::KeyedObjectManager::@4 m_setup

Member Function Documentation

template<class SETUP >
static CLID Containers::KeyedObjectManager< SETUP >::classID ( )
static

Access CLID for this type of container.

Definition at line 316 of file KeyedObjectManager.cpp.

317  {
318  return CLID_ObjectVector + 0x00030000;
319  }

Definition at line 321 of file KeyedObjectManager.cpp.

322  {
323  return CLID_ObjectVector + 0x00040000;
324  }
template<>
CLID Containers::KeyedObjectManager< __A >::classID ( )

Definition at line 539 of file KeyedObjectManager.cpp.

540  {
541  return CLID_ObjectVector + 0x00050000;
542  }
template<>
CLID Containers::KeyedObjectManager< __V >::classID ( )

Definition at line 635 of file KeyedObjectManager.cpp.

636  {
637  return CLID_ObjectVector + 0x00060000;
638  }
template<class T >
void Containers::KeyedObjectManager< T >::clear ( )

Clear content of the vector.

Definition at line 259 of file KeyedObjectManager.cpp.

260 {
261  clearDirect();
262  m_seq->clear();
263 }
void clearDirect()
Clear all direct access fields.
T clear(T...args)
seq_type * m_seq
Container holding array like container.
template<class T >
void Containers::KeyedObjectManager< T >::clearDirect ( )

Clear all direct access fields.

Definition at line 266 of file KeyedObjectManager.cpp.

267 {
268  switch ( m_direct ) {
269  case 1:
270  m_setup.s->m.clear();
271  break;
272  case 0:
273  m_setup.s->v.clear();
274  break;
275  default:
276  break;
277  }
278  m_direct = 0;
279  m_keyCtxt = -1;
280 }
union Containers::KeyedObjectManager::@4 m_setup
template<>
void Containers::KeyedObjectManager< __A >::clearDirect ( )

Definition at line 450 of file KeyedObjectManager.cpp.

451  {
452  m_setup.s->v.clear();
453  m_setup.s->m_idx.clear();
454  m_direct = 0;
455  m_keyCtxt = -1;
456  }
union Containers::KeyedObjectManager::@4 m_setup
template<>
void Containers::KeyedObjectManager< __V >::clearDirect ( )

Definition at line 607 of file KeyedObjectManager.cpp.

608  {
609  m_setup.s->v.clear();
610  m_direct = 0;
611  m_keyCtxt = -1;
612  }
union Containers::KeyedObjectManager::@4 m_setup
template<class T >
void * Containers::KeyedObjectManager< T >::erase ( long  key,
const void *  obj 
)

Remove object from container (very inefficient if key is invalid)

Definition at line 212 of file KeyedObjectManager.cpp.

213 {
214  typedef typename T::map_type MTYP;
215  typedef find<MTYP> FND;
216  if ( 1 == m_direct ) {
217  auto& m = m_setup.s->m;
218  auto i = ( obj ? std::find_if( m.begin(), m.end(), FND( obj ) ) : m_setup.s->m.find( key ) );
219  if ( i != m_setup.s->m.end() ) {
220  void* o = i->second;
221  auto j = std::find( m_seq->begin(), m_seq->end(), o );
222  if ( j != m_seq->end() ) {
223  m_seq->erase( j );
224  m_setup.s->m.erase( i );
225  return o;
226  }
227  }
229  }
230  onDirty();
231  return erase( key, obj );
232 }
union Containers::KeyedObjectManager::@4 m_setup
GAUDI_API void containerIsInconsistent()
Function to be called to indicate that the container is found to be inconsistent. ...
T end(T...args)
void * erase(long key, const void *obj)
Remove object from container (very inefficient if key is invalid)
constexpr double m
Definition: SystemOfUnits.h:94
T erase(T...args)
void onDirty() const
Callback when the container becomes dirty.
T find_if(T...args)
T begin(T...args)
seq_type * m_seq
Container holding array like container.
template<class T >
long Containers::KeyedObjectManager< T >::erase ( seq_type::iterator  beg,
seq_type::iterator  end 
)

Remove object by sequential iterators.

Definition at line 284 of file KeyedObjectManager.cpp.

285 {
286  typedef typename T::map_type MTYP;
287  typedef find<MTYP> FND;
288  if ( 0 == m_direct ) {
289  onDirty();
290  return erase( beg, end );
291  }
292  if ( beg == m_seq->begin() && end == m_seq->end() ) {
293  clear();
294  } else {
295  for ( auto j = beg; j != end; ++j ) {
296  // auto& m = m_setup.s->m;
297  auto i = std::find_if( m_setup.s->m.begin(), m_setup.s->m.end(), FND( *j ) );
298  if ( i != m_setup.s->m.end() ) {
299  m_setup.s->m.erase( i );
300  continue;
301  }
303  }
304  m_seq->erase( beg, end );
305  }
306  return OBJ_ERASED;
307 }
union Containers::KeyedObjectManager::@4 m_setup
void clear()
Clear content of the vector.
GAUDI_API void containerIsInconsistent()
Function to be called to indicate that the container is found to be inconsistent. ...
T end(T...args)
void * erase(long key, const void *obj)
Remove object from container (very inefficient if key is invalid)
T erase(T...args)
void onDirty() const
Callback when the container becomes dirty.
auto end(reverse_wrapper< T > &w)
Definition: reverse.h:64
Object was removed, but not deleted.
Definition: KeyedTraits.h:26
T find_if(T...args)
T begin(T...args)
seq_type * m_seq
Container holding array like container.
template<>
void * Containers::KeyedObjectManager< __A >::erase ( long  key,
const void *  obj 
)

Definition at line 460 of file KeyedObjectManager.cpp.

461  {
462  typedef std::vector<long> id_type;
463  if ( 0 == m_direct ) {
464  onDirty();
465  return erase( key, obj );
466  }
467  if ( obj ) {
468  id_type& idx = m_setup.s->m_idx;
469  for ( auto& elem : idx ) {
470  auto j = m_setup.s->v.begin() + ( elem );
471  auto k = std::find( m_seq->begin(), m_seq->end(), *j );
472  if ( *j == obj ) {
473  void* o = *j;
474  m_seq->erase( k );
475  m_setup.s->v.erase( j );
476  std::for_each( m_setup.s->m_idx.begin(), m_setup.s->m_idx.end(), array::decrement( elem ) );
477  elem = -1;
478  return o;
479  }
480  }
481  } else if ( key >= 0 && key < long( m_setup.s->m_idx.size() ) ) {
482  auto idx = m_setup.s->m_idx.begin() + key;
483  if ( *idx != -1 ) {
484  auto i = m_setup.s->v.begin() + ( *idx );
485  if ( i == m_setup.s->v.end() ) {
487  }
488  void* o = *i;
489  auto j = std::find( m_seq->begin(), m_seq->end(), o );
490  if ( j == m_seq->end() ) {
492  }
493  m_seq->erase( j );
494  m_setup.s->v.erase( i );
495  std::for_each( m_setup.s->m_idx.begin(), m_setup.s->m_idx.end(), array::decrement( *idx ) );
496  *idx = -1;
497  return o;
498  }
499  }
501  return nullptr;
502  }
union Containers::KeyedObjectManager::@4 m_setup
GAUDI_API void containerIsInconsistent()
Function to be called to indicate that the container is found to be inconsistent. ...
T end(T...args)
void * erase(long key, const void *obj)
Remove object from container (very inefficient if key is invalid)
T erase(T...args)
void onDirty() const
Callback when the container becomes dirty.
T find(T...args)
T begin(T...args)
T for_each(T...args)
seq_type * m_seq
Container holding array like container.
template<>
long Containers::KeyedObjectManager< __A >::erase ( seq_type::iterator  beg,
seq_type::iterator  end 
)

Definition at line 506 of file KeyedObjectManager.cpp.

507  {
508  typedef std::vector<long> id_type;
509  if ( beg == m_seq->begin() && end == m_seq->end() ) {
510  clear();
511  return OBJ_ERASED;
512  } else if ( 0 == m_direct ) {
513  onDirty();
514  return erase( beg, end );
515  } else {
516  long cnt = 0, nobj = end - beg;
517  id_type& idx = m_setup.s->m_idx;
518  for ( auto& elem : idx ) {
519  auto j = m_setup.s->v.begin() + ( elem );
520  auto k = std::find( beg, end, *j );
521  if ( k != end ) {
522  m_setup.s->v.erase( j );
523  std::for_each( m_setup.s->m_idx.begin(), m_setup.s->m_idx.end(), array::decrement( elem ) );
524  elem = -1;
525  cnt++;
526  if ( cnt == nobj ) break;
527  }
528  }
529  m_seq->erase( beg, end );
530  if ( cnt != nobj ) {
532  }
533  return OBJ_ERASED;
534  }
535  // cannot reach this point
536  }
union Containers::KeyedObjectManager::@4 m_setup
void clear()
Clear content of the vector.
GAUDI_API void containerIsInconsistent()
Function to be called to indicate that the container is found to be inconsistent. ...
T end(T...args)
void * erase(long key, const void *obj)
Remove object from container (very inefficient if key is invalid)
T erase(T...args)
void onDirty() const
Callback when the container becomes dirty.
auto end(reverse_wrapper< T > &w)
Definition: reverse.h:64
Object was removed, but not deleted.
Definition: KeyedTraits.h:26
T find(T...args)
T begin(T...args)
T for_each(T...args)
seq_type * m_seq
Container holding array like container.
template<>
void * Containers::KeyedObjectManager< __V >::erase ( long  ,
const void *   
)

Definition at line 616 of file KeyedObjectManager.cpp.

617  {
619  return nullptr;
620  }
GAUDI_API void invalidContainerOperation()
Function to be called to indicate that an operation should be performed on the container or it&#39;s cont...
template<>
long Containers::KeyedObjectManager< __V >::erase ( seq_type::iterator  beg,
seq_type::iterator  end 
)

Definition at line 624 of file KeyedObjectManager.cpp.

625  {
626  if ( beg == m_seq->begin() && end == m_seq->end() ) {
627  clear();
628  return OBJ_ERASED;
629  }
631  return OBJ_ERASED;
632  }
void clear()
Clear content of the vector.
T end(T...args)
GAUDI_API void invalidContainerOperation()
Function to be called to indicate that an operation should be performed on the container or it&#39;s cont...
auto end(reverse_wrapper< T > &w)
Definition: reverse.h:64
Object was removed, but not deleted.
Definition: KeyedTraits.h:26
T begin(T...args)
seq_type * m_seq
Container holding array like container.
template<class T >
long Containers::KeyedObjectManager< T >::insert ( ObjectContainerBase b,
ContainedObject c,
void *  o,
long *  k 
)

Insert new object into container.

Definition at line 139 of file KeyedObjectManager.cpp.

141 {
142  *key = ++m_keyCtxt;
143  return insert( pBase, pObject, obj, *key );
144 }
long insert(ObjectContainerBase *b, ContainedObject *c, void *o, long *k)
Insert new object into container.
template<class T >
long Containers::KeyedObjectManager< T >::insert ( ObjectContainerBase b,
ContainedObject c,
void *  o,
long  k 
)

Insert new object into container.

Keep major key value

Definition at line 147 of file KeyedObjectManager.cpp.

149 {
151  if ( key > m_keyCtxt ) {
152  m_keyCtxt = key;
153  }
154  if ( 1 == m_direct ) {
155  if ( m_setup.s->insert( obj, key ) ) {
156  if ( !pObject->parent() ) {
157  pObject->setParent( pBase );
158  }
159  m_seq->push_back( obj );
160  return OBJ_INSERTED;
161  }
162  } else if ( key == long( m_setup.s->v.size() ) ) {
163  m_setup.s->v.push_back( obj );
164  if ( !pObject->parent() ) {
165  pObject->setParent( pBase );
166  }
167  m_seq->push_back( obj );
168  return OBJ_INSERTED;
169  } else {
170  // Document is dirty now...
171  // need to copy all pointers from the vector to the map
172  onDirty();
173  return insert( pBase, pObject, obj, key );
174  }
176  return OBJ_CANNOT_INSERT;
177 }
union Containers::KeyedObjectManager::@4 m_setup
Cannot insert object into container.
Definition: KeyedTraits.h:28
GAUDI_API void cannotInsertToContainer()
Function to be called to indicate that an object cannot be inserted to the container.
T push_back(T...args)
void onDirty() const
Callback when the container becomes dirty.
long insert(ObjectContainerBase *b, ContainedObject *c, void *o, long *k)
Insert new object into container.
Object was inserted into the container.
Definition: KeyedTraits.h:27
seq_type * m_seq
Container holding array like container.
template<>
long Containers::KeyedObjectManager< __A >::insert ( ObjectContainerBase b,
ContainedObject c,
void *  o,
long *  k 
)

Definition at line 374 of file KeyedObjectManager.cpp.

375  {
376  // auto key creation only possible for direct access!
377  if ( 0 == m_direct ) {
378  m_seq->push_back( o );
379  m_setup.s->v.push_back( o );
380  if ( !c->parent() ) c->setParent( b );
381  *k = ++m_keyCtxt;
382  return OBJ_INSERTED;
383  }
385  return OBJ_CANNOT_INSERT;
386  }
union Containers::KeyedObjectManager::@4 m_setup
Cannot insert object into container.
Definition: KeyedTraits.h:28
const ObjectContainerBase * parent() const
Access to parent object.
GAUDI_API void cannotInsertToContainer()
Function to be called to indicate that an object cannot be inserted to the container.
T push_back(T...args)
Object was inserted into the container.
Definition: KeyedTraits.h:27
void setParent(ObjectContainerBase *value)
Update parent member.
seq_type * m_seq
Container holding array like container.
template<>
long Containers::KeyedObjectManager< __A >::insert ( ObjectContainerBase b,
ContainedObject c,
void *  o,
long  k 
)

Keep major key value

Extend redirection array and insert

Definition at line 390 of file KeyedObjectManager.cpp.

391  {
392  if ( 0 == m_direct ) {
393  if ( k == m_keyCtxt + 1 ) {
394  return insert( b, c, o, &k );
395  }
396  onDirty();
397  return insert( b, c, o, k );
398  }
400  if ( k > m_keyCtxt ) m_keyCtxt = k;
402  if ( k + 1 > long( m_setup.s->m_idx.size() ) ) {
403  m_setup.s->m_idx.resize( k + 1, -1 );
404  }
405  auto idx = m_setup.s->m_idx.begin() + k;
406  if ( *idx == -1 ) {
407  *idx = m_setup.s->v.size();
408  m_setup.s->v.push_back( o );
409  m_seq->push_back( o );
410  if ( !c->parent() ) c->setParent( b );
411  return OBJ_INSERTED;
412  }
414  return OBJ_CANNOT_INSERT;
415  }
union Containers::KeyedObjectManager::@4 m_setup
Cannot insert object into container.
Definition: KeyedTraits.h:28
const ObjectContainerBase * parent() const
Access to parent object.
GAUDI_API void cannotInsertToContainer()
Function to be called to indicate that an object cannot be inserted to the container.
T push_back(T...args)
void onDirty() const
Callback when the container becomes dirty.
long insert(ObjectContainerBase *b, ContainedObject *c, void *o, long *k)
Insert new object into container.
Object was inserted into the container.
Definition: KeyedTraits.h:27
void setParent(ObjectContainerBase *value)
Update parent member.
seq_type * m_seq
Container holding array like container.
template<>
long Containers::KeyedObjectManager< __V >::insert ( ObjectContainerBase b,
ContainedObject c,
void *  o,
long *  k 
)

Definition at line 572 of file KeyedObjectManager.cpp.

573  {
574  m_seq->push_back( o );
575  m_setup.s->v.push_back( o );
576  if ( !c->parent() ) c->setParent( b );
577  *k = ( m_setup.s->v.size() - 1 );
578  return OBJ_INSERTED;
579  }
union Containers::KeyedObjectManager::@4 m_setup
const ObjectContainerBase * parent() const
Access to parent object.
T push_back(T...args)
Object was inserted into the container.
Definition: KeyedTraits.h:27
void setParent(ObjectContainerBase *value)
Update parent member.
seq_type * m_seq
Container holding array like container.
template<>
long Containers::KeyedObjectManager< __V >::insert ( ObjectContainerBase b,
ContainedObject c,
void *  o,
long  k 
)

Definition at line 583 of file KeyedObjectManager.cpp.

584  {
585  if ( k == long( m_setup.s->v.size() ) ) {
586  return insert( b, c, o, &k );
587  }
589  return OBJ_CANNOT_INSERT;
590  }
union Containers::KeyedObjectManager::@4 m_setup
Cannot insert object into container.
Definition: KeyedTraits.h:28
GAUDI_API void cannotInsertToContainer()
Function to be called to indicate that an object cannot be inserted to the container.
long insert(ObjectContainerBase *b, ContainedObject *c, void *o, long *k)
Insert new object into container.
template<class T >
long Containers::KeyedObjectManager< T >::insertDirect ( ObjectContainerBase b,
ContainedObject c,
void *  o,
long  k 
)

Insert element into direct access map.

Keep major key value

Definition at line 180 of file KeyedObjectManager.cpp.

182 {
184  if ( key > m_keyCtxt ) {
185  m_keyCtxt = key;
186  }
187  if ( 1 == m_direct ) {
188  if ( m_setup.s->insert( obj, key ) ) {
189  if ( !pObject->parent() ) {
190  pObject->setParent( pBase );
191  }
192  return OBJ_INSERTED;
193  }
194  } else if ( key == long( m_setup.s->v.size() ) ) {
195  m_setup.s->v.push_back( obj );
196  if ( !pObject->parent() ) {
197  pObject->setParent( pBase );
198  }
199  return OBJ_INSERTED;
200  } else {
201  // Document is dirty now...
202  // need to copy all pointers from the vector to the map
203  onDirty();
204  return insertDirect( pBase, pObject, obj, key );
205  }
207  return OBJ_CANNOT_INSERT;
208 }
union Containers::KeyedObjectManager::@4 m_setup
Cannot insert object into container.
Definition: KeyedTraits.h:28
GAUDI_API void cannotInsertToContainer()
Function to be called to indicate that an object cannot be inserted to the container.
void onDirty() const
Callback when the container becomes dirty.
Object was inserted into the container.
Definition: KeyedTraits.h:27
long insertDirect(ObjectContainerBase *b, ContainedObject *c, void *o, long k)
Insert element into direct access map.
template<>
long Containers::KeyedObjectManager< __A >::insertDirect ( ObjectContainerBase b,
ContainedObject c,
void *  o,
long  k 
)

Keep major key value

Extend redirection array and insert

Definition at line 419 of file KeyedObjectManager.cpp.

420  {
421  if ( 0 == m_direct ) {
422  if ( k == m_keyCtxt + 1 ) {
423  m_setup.s->v.push_back( o );
424  if ( !c->parent() ) c->setParent( b );
425  ++m_keyCtxt;
426  return OBJ_INSERTED;
427  }
428  onDirty();
429  return insertDirect( b, c, o, k );
430  }
432  if ( k > m_keyCtxt ) m_keyCtxt = k;
434  if ( k + 1 > long( m_setup.s->m_idx.size() ) ) {
435  m_setup.s->m_idx.resize( k + 1, -1 );
436  }
437  auto idx = m_setup.s->m_idx.begin() + k;
438  if ( *idx == -1 ) {
439  *idx = m_setup.s->v.size();
440  m_setup.s->v.push_back( o );
441  if ( !c->parent() ) c->setParent( b );
442  return OBJ_INSERTED;
443  }
445  return OBJ_CANNOT_INSERT;
446  }
union Containers::KeyedObjectManager::@4 m_setup
Cannot insert object into container.
Definition: KeyedTraits.h:28
const ObjectContainerBase * parent() const
Access to parent object.
GAUDI_API void cannotInsertToContainer()
Function to be called to indicate that an object cannot be inserted to the container.
void onDirty() const
Callback when the container becomes dirty.
Object was inserted into the container.
Definition: KeyedTraits.h:27
void setParent(ObjectContainerBase *value)
Update parent member.
long insertDirect(ObjectContainerBase *b, ContainedObject *c, void *o, long k)
Insert element into direct access map.
template<>
long Containers::KeyedObjectManager< __V >::insertDirect ( ObjectContainerBase b,
ContainedObject c,
void *  o,
long  k 
)

Definition at line 594 of file KeyedObjectManager.cpp.

595  {
596  if ( k == long( m_setup.s->v.size() ) ) {
597  m_setup.s->v.push_back( o );
598  if ( !c->parent() ) c->setParent( b );
599  return OBJ_INSERTED;
600  }
602  return OBJ_CANNOT_INSERT;
603  }
union Containers::KeyedObjectManager::@4 m_setup
Cannot insert object into container.
Definition: KeyedTraits.h:28
const ObjectContainerBase * parent() const
Access to parent object.
GAUDI_API void cannotInsertToContainer()
Function to be called to indicate that an object cannot be inserted to the container.
Object was inserted into the container.
Definition: KeyedTraits.h:27
void setParent(ObjectContainerBase *value)
Update parent member.
template<class SETUP >
long Containers::KeyedObjectManager< SETUP >::isDirect ( ) const
inline

Check if the container is dirty.

Definition at line 75 of file KeyedObjectManager.h.

75 { return m_direct; }
template<class T >
void * Containers::KeyedObjectManager< T >::object ( long  key) const

Retrieve object identified by a key from the container.

Definition at line 235 of file KeyedObjectManager.cpp.

236 {
237  if ( 0 == m_direct ) onDirty();
238  auto i = m_setup.s->m.find( key );
239  if ( i != m_setup.s->m.end() ) return ( *i ).second;
240  return nullptr;
241 }
union Containers::KeyedObjectManager::@4 m_setup
void onDirty() const
Callback when the container becomes dirty.
template<>
void * Containers::KeyedObjectManager< __A >::object ( long  value) const

Definition at line 343 of file KeyedObjectManager.cpp.

344  {
345 #ifdef CHECK_KEYED_CONTAINER
346  unsigned long siz = m_setup.s->m_idx.size();
347  if ( value >= 0 && size_t( value ) < siz ) {
348  long ent = *( m_setup.s->m_idx.begin() + value );
349  if ( ent >= 0 ) {
350  return *( m_setup.s->v.begin() + ent );
351  }
352  }
353  return nullptr;
354 #else
355  return *( m_setup.s->v.begin() + ( *( m_setup.s->m_idx.begin() + value ) ) );
356 #endif
357  }
union Containers::KeyedObjectManager::@4 m_setup
template<>
void * Containers::KeyedObjectManager< __V >::object ( long  ) const

Definition at line 558 of file KeyedObjectManager.cpp.

559  {
561  return nullptr;
562  }
GAUDI_API void invalidContainerOperation()
Function to be called to indicate that an operation should be performed on the container or it&#39;s cont...
template<class T >
void Containers::KeyedObjectManager< T >::onDirty ( ) const
private

Callback when the container becomes dirty.

Definition at line 129 of file KeyedObjectManager.cpp.

130 {
131  m_direct = 1;
132  auto& s = *m_setup.s;
133  long i = 0;
134  for ( auto p : s.v ) s.insert( p, i++ );
135  s.v.clear();
136 }
union Containers::KeyedObjectManager::@4 m_setup
template<>
void Containers::KeyedObjectManager< __A >::onDirty ( ) const
private

Definition at line 360 of file KeyedObjectManager.cpp.

361  {
362  m_direct = 1;
363  m_setup.s->m_idx.reserve( m_setup.s->v.size() + 1 );
364  for ( int i = 0, stop = m_setup.s->v.size(); i < stop; ++i ) {
365  if ( !m_setup.s->v[i] ) {
367  }
368  m_setup.s->m_idx.push_back( i );
369  }
370  }
union Containers::KeyedObjectManager::@4 m_setup
GAUDI_API void containerIsInconsistent()
Function to be called to indicate that the container is found to be inconsistent. ...
template<>
void Containers::KeyedObjectManager< __V >::onDirty ( ) const
private

Definition at line 565 of file KeyedObjectManager.cpp.

566  {
568  }
GAUDI_API void invalidContainerOperation()
Function to be called to indicate that an operation should be performed on the container or it&#39;s cont...
template<class T >
void Containers::KeyedObjectManager< T >::reserve ( long  size)

Reserve buffer space.

Definition at line 244 of file KeyedObjectManager.cpp.

245 {
246  switch ( m_direct ) {
247  case 1:
248  break;
249  case 0:
250  m_setup.s->v.reserve( len );
251  break;
252  default:
253  break;
254  }
255  m_seq->reserve( len );
256 }
union Containers::KeyedObjectManager::@4 m_setup
seq_type * m_seq
Container holding array like container.
T reserve(T...args)
template<class T >
void Containers::KeyedObjectManager< T >::setup ( void *  seq,
void **  rndm 
)

Setup of the Map and the parent object.

Definition at line 122 of file KeyedObjectManager.cpp.

123 {
124  m_seq = (seq_type*)seq;
125  *rndm = &m_setup.s->v;
126 }
union Containers::KeyedObjectManager::@4 m_setup
std::vector< void * > seq_type
seq_type * m_seq
Container holding array like container.

Member Data Documentation

template<class SETUP >
char Containers::KeyedObjectManager< SETUP >::buffer[128]

Buffer space to hold keyed container.

Definition at line 57 of file KeyedObjectManager.h.

template<class SETUP >
long Containers::KeyedObjectManager< SETUP >::m_direct
mutableprivate

Dirty flag.

Definition at line 53 of file KeyedObjectManager.h.

template<class SETUP >
long Containers::KeyedObjectManager< SETUP >::m_keyCtxt
mutableprivate

Definition at line 54 of file KeyedObjectManager.h.

template<class SETUP >
seq_type* Containers::KeyedObjectManager< SETUP >::m_seq
private

Container holding array like container.

Definition at line 51 of file KeyedObjectManager.h.

union { ... } Containers::KeyedObjectManager< SETUP >::m_setup
template<class SETUP >
SETUP* Containers::KeyedObjectManager< SETUP >::s

Definition at line 58 of file KeyedObjectManager.h.


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