ATLAS Offline Software
Loading...
Searching...
No Matches
TRTCond::NestedContainer< NestingLevel, T, Trait > Class Template Reference

Nested container class, ie a base class at level l with daugthers at level l+1. More...

#include <NestedContainer.h>

Inheritance diagram for TRTCond::NestedContainer< NestingLevel, T, Trait >:
Collaboration diagram for TRTCond::NestedContainer< NestingLevel, T, Trait >:

Public Types

typedef T value_type
 Type of atomic element.
typedef const T const_value_type
 const Type of atomic element.
typedef Trait trait_type
 Type of trait.
typedef std::vector< std::pair< ExpandedIdentifier, const T * > > FlatContainer
 fill vector with all entries in the container. needed to dump to Peter's flat file format

Public Member Functions

void set (const ExpandedIdentifier &id, const T &t)
 set a value.
const T & get (const ExpandedIdentifier &id) const
 get a value.
void clear ()
 clear entire container
const DaughterContainerdaughters () const
 return the vector of daughters
size_t numObjects () const
 return the total number of valid calibration objects
bool operator== (const NestedContainerBase &rhs) const
 equality operator, used for compressing
size_t footprint () const
 return the memory allocated by the container and its daughters
void crunch ()
 reduce the footprint as much as possible by removing the extra space allocated by the vectors
void printindent () const
 some IO for debugging
void print () const
void getall (FlatContainer &entries) const

Private Types

typedef std::vector< NestedContainer< NestingLevel+1, T, Trait > > DaughterContainer
 typedef of container

Private Attributes

DaughterContainer m_daughters
 Container of Daughters.
m_default
 Type of atomic element.

Detailed Description

template<int NestingLevel, class T, class Trait>
class TRTCond::NestedContainer< NestingLevel, T, Trait >

Nested container class, ie a base class at level l with daugthers at level l+1.

Definition at line 371 of file NestedContainer.h.

Member Typedef Documentation

◆ const_value_type

typedef const T TRTCond::NestedContainerBase< NestingLevel, NestedContainer< NestingLevel+1, T, Trait >, T, Trait >::const_value_type
inherited

const Type of atomic element.

Definition at line 161 of file NestedContainer.h.

◆ DaughterContainer

typedef std::vector<NestedContainer< NestingLevel+1, T, Trait >> TRTCond::NestedContainerBase< NestingLevel, NestedContainer< NestingLevel+1, T, Trait >, T, Trait >::DaughterContainer
privateinherited

typedef of container

Definition at line 154 of file NestedContainer.h.

◆ FlatContainer

typedef std::vector< std::pair<ExpandedIdentifier, const T*> > TRTCond::NestedContainerBase< NestingLevel, NestedContainer< NestingLevel+1, T, Trait >, T, Trait >::FlatContainer
inherited

fill vector with all entries in the container. needed to dump to Peter's flat file format

Definition at line 346 of file NestedContainer.h.

◆ trait_type

typedef Trait TRTCond::NestedContainerBase< NestingLevel, NestedContainer< NestingLevel+1, T, Trait >, T, Trait >::trait_type
inherited

Type of trait.

Definition at line 162 of file NestedContainer.h.

◆ value_type

typedef T TRTCond::NestedContainerBase< NestingLevel, NestedContainer< NestingLevel+1, T, Trait >, T, Trait >::value_type
inherited

Type of atomic element.

Definition at line 160 of file NestedContainer.h.

Member Function Documentation

◆ clear()

void TRTCond::NestedContainerBase< NestingLevel, NestedContainer< NestingLevel+1, T, Trait >, T, Trait >::clear ( )
inlineinherited

clear entire container

Definition at line 238 of file NestedContainer.h.

238 {
239 for( typename DaughterContainer::iterator it = m_daughters.begin() ; it != m_daughters.end(); ++it )
243 }
Base class for nested containers.
void clear()
clear entire container
static void clear(Daughter &d, const ExpandedIdentifier &id)
clear container for given id

◆ crunch()

void TRTCond::NestedContainerBase< NestingLevel, NestedContainer< NestingLevel+1, T, Trait >, T, Trait >::crunch ( )
inlineinherited

reduce the footprint as much as possible by removing the extra space allocated by the vectors

Definition at line 292 of file NestedContainer.h.

292 {
293 // first the daughters
294 for( typename DaughterContainer::iterator it = m_daughters.begin() ; it != m_daughters.end(); ++it )
296 // now use, if anything is there
297 if( m_daughters.size()>0 ) {
298 // find the first daughter that is valid
299 size_t firstvaliddaughter(0);
300 bool allequal(true) ;
301 for(size_t idau=0; idau<m_daughters.size() && allequal; ++idau) {
303 if( allequal ) {
305 if( isvalid ) {
307 } else {
309 }
310 }
311 }
312 if(allequal) {
313 // set the default value to the value form the first daughter
315 if( firstvaliddaughter < m_daughters.size() )
317 clear() ; // this clears pointers in the daughters. would rather replace that with destructors.
320 } else if(m_daughters.size()<m_daughters.capacity()) {
322 newdaughters.reserve( m_daughters.size() ) ;
323 newdaughters.insert( newdaughters.end(), m_daughters.begin(), m_daughters.end() ) ;
325 }
326 }
327 }
static bool empty(Daughter &d)
empty daughter container
static bool isequal(const Daughter &lhs, const Daughter &rhs)
equality operator
static void crunch(Daughter &d)
compress daugther size

◆ daughters()

const DaughterContainer & TRTCond::NestedContainerBase< NestingLevel, NestedContainer< NestingLevel+1, T, Trait >, T, Trait >::daughters ( ) const
inlineinherited

return the vector of daughters

Definition at line 256 of file NestedContainer.h.

256{ return m_daughters ; }

◆ footprint()

size_t TRTCond::NestedContainerBase< NestingLevel, NestedContainer< NestingLevel+1, T, Trait >, T, Trait >::footprint ( ) const
inlineinherited

return the memory allocated by the container and its daughters

Definition at line 282 of file NestedContainer.h.

282 {
283 size_t total = Trait::footprint(m_default) + (m_daughters.capacity()-m_daughters.size())*sizeof(Daughter) ;
284 for( typename DaughterContainer::const_iterator it = m_daughters.begin() ; it != m_daughters.end(); ++it )
286 return total ;
287 }
static size_t footprint(const Daughter &d)
return allocated memory

◆ get()

const T & TRTCond::NestedContainerBase< NestingLevel, NestedContainer< NestingLevel+1, T, Trait >, T, Trait >::get ( const ExpandedIdentifier & id) const
inlineinherited

get a value.

return the default value if no valid entry for id exists.

Definition at line 205 of file NestedContainer.h.

205 {
206 if( NestingLevel < id.level() ) {
207 unsigned int thisindex = id.index(NestingLevel+1) ;
208 if(thisindex<m_daughters.size()) {
210 // only return this value if it is valid. otherwise, return the default.
211 if( Trait::isvalid(rc) ) return rc ;
212 }
213 }
214 return m_default ;
215 }
static const T & get(const Daughter &d, const ExpandedIdentifier &id)
get value for given id

◆ getall()

void TRTCond::NestedContainerBase< NestingLevel, NestedContainer< NestingLevel+1, T, Trait >, T, Trait >::getall ( FlatContainer & entries) const
inlineinherited

Definition at line 347 of file NestedContainer.h.

347 {
348 // add the daughters
349 for(unsigned int idau = 0; idau<m_daughters.size(); ++idau) {
351 // first get them
353 // now update the identifiers to have the dauhgter index set correctly
354 for(unsigned int j=0; j< dauentries.size(); ++j )
355 dauentries[j].first.index(NestingLevel+1) = idau ;
356 // and append
357 entries.insert(entries.end(),dauentries.begin(),dauentries.end()) ;
358 }
359 // add the default value
363 }
364 }
static void getall(const Daughter &d, std::vector< std::pair< ExpandedIdentifier, const T * > > &entries)
copy all object pointers into a vector of (id,pointer) pairs

◆ numObjects()

size_t TRTCond::NestedContainerBase< NestingLevel, NestedContainer< NestingLevel+1, T, Trait >, T, Trait >::numObjects ( ) const
inlineinherited

return the total number of valid calibration objects

Definition at line 260 of file NestedContainer.h.

260 {
261 size_t rc(0) ;
262 assert( std::distance(m_daughters.begin(),m_daughters.end())==(int)m_daughters.size()) ;
263 assert( m_daughters.size() < 1000 ) ;
264 for( typename DaughterContainer::const_iterator it = m_daughters.begin() ; it != m_daughters.end(); ++it )
266 if( Trait::isvalid(m_default) ) ++rc ;
267 return rc ;
268 }
static Double_t rc
static size_t numObjects(const Daughter &d)
total number of atomic objects in daugther

◆ operator==()

bool TRTCond::NestedContainerBase< NestingLevel, NestedContainer< NestingLevel+1, T, Trait >, T, Trait >::operator== ( const NestedContainerBase< NestingLevel, NestedContainer< NestingLevel+1, T, Trait >, T, Trait > & rhs) const
inlineinherited

equality operator, used for compressing

Definition at line 272 of file NestedContainer.h.

272 {
273 return m_daughters.size()==0 && rhs.m_daughters.size()==0 && Trait::isequal(m_default,rhs.m_default) ;
274 }
T m_default
Type of atomic element.
DaughterContainer m_daughters
Container of Daughters.

◆ print()

void TRTCond::NestedContainerBase< NestingLevel, NestedContainer< NestingLevel+1, T, Trait >, T, Trait >::print ( ) const
inlineinherited

Definition at line 334 of file NestedContainer.h.

334 {
335 printindent() ;
337 std::cout << "level = " << id.name(NestingLevel) << " (" << NestingLevel << ")" << std::endl ;
338 for(unsigned int i=0; i< m_daughters.size(); ++i) {
339 printindent() ;
340 std::cout << "daughter " << i << std::endl ;
342 }
343 }
static void print(const Daughter &d)
print daugther info

◆ printindent()

void TRTCond::NestedContainerBase< NestingLevel, NestedContainer< NestingLevel+1, T, Trait >, T, Trait >::printindent ( ) const
inlineinherited

some IO for debugging

Definition at line 330 of file NestedContainer.h.

330 {
331 for(int i=0; i<NestingLevel; ++i)
332 std::cout << '\t' ;
333 }

◆ set()

void TRTCond::NestedContainerBase< NestingLevel, NestedContainer< NestingLevel+1, T, Trait >, T, Trait >::set ( const ExpandedIdentifier & id,
const T & t )
inlineinherited

set a value.

using 'level' in id we can specify if we want to set the default value.

Definition at line 191 of file NestedContainer.h.

191 {
192 if( NestingLevel == id.level() ) {
193 // set the default value
195 } else {
196 unsigned int thisindex = id.index(NestingLevel+1) ;
197 // expand daughter array if necessary
198 if(thisindex>=m_daughters.size())
201 }
202 }
static void set(Daughter &d, const ExpandedIdentifier &id, const T &t)
set value for given id

Member Data Documentation

◆ m_daughters

DaughterContainer TRTCond::NestedContainerBase< NestingLevel, NestedContainer< NestingLevel+1, T, Trait >, T, Trait >::m_daughters
privateinherited

Container of Daughters.

Definition at line 156 of file NestedContainer.h.

◆ m_default

T TRTCond::NestedContainerBase< NestingLevel, NestedContainer< NestingLevel+1, T, Trait >, T, Trait >::m_default
privateinherited

Type of atomic element.

Definition at line 157 of file NestedContainer.h.


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