ATLAS Offline Software
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Modules Pages
AuxStoreInternal.cxx
Go to the documentation of this file.
1 /*
2  Copyright (C) 2002-2024 CERN for the benefit of the ATLAS collaboration
3 */
12 #include <iostream>
13 #include <sstream>
14 
20 
21 
22 namespace SG {
23 
24 
30  : m_standalone (standalone),
31  m_locked (false)
32 {
33 }
34 
35 
42 {
43 }
44 
45 
50  : m_standalone (other.m_standalone),
51  m_decorations (other.m_decorations),
52  m_auxids (other.m_auxids),
53  m_locked (other.m_locked)
54 {
55  size_t size = other.m_vecs.size();
56  m_vecs.resize (size);
57  for (size_t i = 0; i < size; i++) {
58  if (other.m_vecs[i])
59  m_vecs[i] = other.m_vecs[i]->clone();
60  }
61 }
62 
63 
68 {
69  return m_standalone;
70 }
71 
72 
83 const void* AuxStoreInternal::getData (auxid_t auxid) const
84 {
85  const IAuxTypeVector* v = getVector (auxid);
86  if (v) {
87  return v->toPtr();
88  }
89  return nullptr;
90 }
91 
92 
100 {
101  guard_t guard (m_mutex);
102  if (auxid >= m_vecs.size() || !m_vecs[auxid]) {
103  // With the new behavior of SG::Accessor::isAvailable,
104  // we shouldn't print an error message here. Asking the store whether
105  // it has an element using this function is not necessarily an
106  // error condition by now. In any case, the DataVector code will
107  // complain itself in case of an error.
108  return 0;
109  }
110  return m_vecs[auxid].get();
111 }
112 
113 
130 void* AuxStoreInternal::getData (auxid_t auxid, size_t size, size_t capacity)
131 {
132  return getDataInternal (auxid, size, capacity, false);
133 }
134 
135 
143 void
144 AuxStoreInternal::addVector (std::unique_ptr<IAuxTypeVector> vec,
145  bool isDecoration)
146 {
147  guard_t guard (m_mutex);
148  auxid_t auxid = vec->auxid();
149  if (m_locked)
150  throw ExcStoreLocked (auxid);
151 
152  // Resize the vector if needed.
153  if (m_vecs.size() <= auxid) {
154  m_vecs.resize (auxid+1);
155  }
156 
157  // Give up if the variable is already present in the store.
158  if (m_vecs[auxid]) std::abort();
159 
160  // Make sure the length is consistent with the rest of the store.
161  if (!vec->isLinked()) {
162  size_t sz = this->size_noLock();
163  if (vec->size() < sz)
164  vec->resize (sz);
165  }
166 
167  // Add it to the store.
168  m_vecs[auxid] = std::move (vec);
169  addAuxID (auxid);
170  if (isDecoration) {
171  m_decorations.insert (auxid);
172  }
173 }
174 
175 
197 void*
198 AuxStoreInternal::getDecoration (auxid_t auxid, size_t size, size_t capacity)
199 {
200  guard_t guard (m_mutex);
201  if (m_vecs.size() <= auxid) {
202  m_vecs.resize (auxid+1);
203  }
204  if (m_vecs[auxid] == 0) {
205  m_vecs[auxid] = AuxTypeRegistry::instance().makeVector (auxid, size, capacity);
206  addAuxID (auxid);
207  std::unique_ptr<IAuxTypeVector> linked = m_vecs[auxid]->linkedVector();
208  auxid_t linked_id = null_auxid;
209  if (linked) {
210  linked_id = linked->auxid();
211  m_vecs[linked_id] = std::move (linked);
212  addAuxID (linked_id);
213  }
214  if (m_locked) {
215  m_decorations.insert (auxid);
216  if (linked_id != null_auxid) {
217  m_decorations.insert (linked_id);
218  }
219  }
220  }
221  if (m_locked && !m_decorations.test (auxid)) {
222  throw ExcStoreLocked (auxid);
223  }
224  return m_vecs[auxid]->toPtr();
225 }
226 
227 
244 {
245  guard_t guard (m_mutex);
246  if (m_locked)
247  throw ExcStoreLocked ("resize");
248  bool nomoves = true;
249  for (std::unique_ptr<IAuxTypeVector>& v : m_vecs) {
250  if (v && !v->isLinked()) {
251  if (!v->resize (sz))
252  nomoves = false;
253  }
254  }
255  return nomoves;
256 }
257 
258 
268 {
269  guard_t guard (m_mutex);
270  if (m_locked)
271  throw ExcStoreLocked ("reserve");
272  for (std::unique_ptr<IAuxTypeVector>& v : m_vecs) {
273  if (v && !v->isLinked())
274  v->reserve (sz);
275  }
276 }
277 
278 
301 void AuxStoreInternal::shift (size_t pos, ptrdiff_t offs)
302 {
303  guard_t guard (m_mutex);
304  if (m_locked)
305  throw ExcStoreLocked ("shift");
306  for (std::unique_ptr<IAuxTypeVector>& v : m_vecs) {
307  if (v && !v->isLinked())
308  v->shift (pos, offs);
309  }
310 }
311 
312 
333  IAuxStore& other,
334  const SG::auxid_set_t& ignore)
335 {
336  guard_t guard (m_mutex);
338 
339  if (m_locked)
340  throw ExcStoreLocked ("insertMove");
341  bool nomove = true;
342  size_t other_size = other.size();
343  if (other_size == 0)
344  return true;
345  for (SG::auxid_t id : m_auxids) {
346  SG::IAuxTypeVector* v_dst = nullptr;
347  if (id < m_vecs.size())
348  v_dst = m_vecs[id].get();
349  // Skip linked vars --- they should be taken care of by the parent var.
350  if (v_dst && !v_dst->isLinked()) {
351  if (other.getData (id)) {
352  void* src_ptr = other.getData (id, other_size, other_size);
353  if (src_ptr) {
354  if (!v_dst->insertMove (pos, src_ptr, 0, other_size,
355  other))
356  nomove = false;
357  }
358  }
359  else {
360  const void* orig = v_dst->toPtr();
361  v_dst->shift (pos, other_size);
362  if (orig != v_dst->toPtr())
363  nomove = false;
364  }
365  }
366  }
367 
368  // Add any new variables not present in the original container.
369  for (SG::auxid_t id : other.getAuxIDs()) {
370  if (!m_auxids.test(id) && !ignore.test(id))
371  {
372  if (r.isLinked (id)) continue;
373  if (other.getData (id)) {
374  void* src_ptr = other.getData (id, other_size, other_size);
375  if (src_ptr) {
376  size_t sz = size_noLock();
377  if (sz < other_size) sz = other_size + pos;
378  IAuxTypeVector* v = getVectorInternal_noLock (id, sz, sz, false);
379  v->resize (sz - other_size);
380  v->insertMove (pos, src_ptr, 0, other_size,
381  other);
382  nomove = false;
383  }
384  }
385  }
386  }
387 
388  return nomove;
389 }
390 
391 
399 const SG::auxid_set_t&
401 {
402  return m_auxids;
403 }
404 
405 
409 const SG::auxid_set_t&
411 {
412  return m_decorations;
413 }
414 
415 
421 {
422  return m_decorations.test (auxid);
423 }
424 
425 
432 const SG::auxid_set_t&
434 {
435  return getAuxIDs();
436 }
437 
438 
450 const void* AuxStoreInternal::getIODataInternal (auxid_t auxid, bool quiet) const
451 {
452  guard_t guard (m_mutex);
453  if (auxid >= m_vecs.size() || !m_vecs[auxid]) {
454  if (!quiet) {
455  std::ostringstream ss;
456  ss << "Requested variable "
458  << " (" << auxid << ") doesn't exist";
459  ATHCONTAINERS_ERROR("AuxStoreInternal::getIODataInternal", ss.str());
460  }
461  return 0;
462  }
463 
464  if (m_standalone) {
465  if (!SG::AuxTypeRegistry::instance().isLinked (auxid))
466  return m_vecs[auxid]->toPtr();
467  }
468  return m_vecs[auxid]->toVector();
469 }
470 
471 
484 {
485  guard_t guard (m_mutex);
486  if (auxid >= m_vecs.size() || !m_vecs[auxid]) {
487  if (!quiet) {
488  std::ostringstream ss;
489  ss << "Requested variable "
491  << " (" << auxid << ") doesn't exist";
492  ATHCONTAINERS_ERROR("AuxStoreInternal::getIODataInternal", ss.str());
493  }
494  return 0;
495  }
496 
497  if (m_standalone) {
498  if (!SG::AuxTypeRegistry::instance().isLinked (auxid))
499  return m_vecs[auxid]->toPtr();
500  }
501  return m_vecs[auxid]->toVector();
502 }
503 
504 
515 const void* AuxStoreInternal::getIOData (auxid_t auxid) const
516 {
517  return getIODataInternal (auxid, false);
518 }
519 
520 
532 const std::type_info* AuxStoreInternal::getIOType (auxid_t auxid) const
533 {
534  if (m_standalone) {
536  if (!r.isLinked (auxid))
537  return r.getType (auxid);
538  }
539  guard_t guard (m_mutex);
540  if (auxid < m_vecs.size() && m_vecs[auxid]) {
541  const std::type_info* ret = m_vecs[auxid]->objType();
542  if (ret) return ret;
543  }
544  return SG::AuxTypeRegistry::instance().getVecType (auxid);
545 }
546 
547 
551 const SG::auxid_set_t&
553 {
554  return getAuxIDs();
555 }
556 
557 
565 {
566  guard_t guard (m_mutex);
567  m_locked = true;
568 }
569 
570 
582 {
583  guard_t guard (m_mutex);
584  bool anycleared = false;
585  for (auxid_t id : m_decorations) {
586  m_vecs[id].reset();
587  m_auxids.erase (id);
588  anycleared = true;
589  }
590  if (anycleared) {
592  }
593  return anycleared;
594 }
595 
596 
603 {
604  guard_t guard (m_mutex);
605  return size_noLock();
606 }
607 
608 
615 {
616  for (SG::auxid_t id : m_auxids) {
617  if (id < m_vecs.size() && m_vecs[id] && !m_vecs[id]->isLinked() &&
618  m_vecs[id]->size() > 0)
619  {
620  return m_vecs[id]->size();
621  }
622  }
623  return 0;
624 }
625 
626 
637 {
638  // Does this variable exist in this store?
639  bool exists = false;
640  {
641  guard_t guard (m_mutex);
642  if (id < m_vecs.size() && m_vecs[id] != 0)
643  exists = true;
644  }
645 
646  // If not, and we have a packing parameter request, then create the variable.
647  if (!exists) {
648  if (!PackedParameters::isValidOption (option)) return false;
649  size_t sz = size();
650  getDataInternal (id, sz, sz, true);
651  }
652 
653  // Try the option setting.
654  guard_t guard (m_mutex);
655  if (m_vecs[id]->setOption (option)) return true;
656 
657  // It didn't work. If this is a packing request, then try to convert
658  // the variable to packed form and retry.
659  if (!PackedParameters::isValidOption (option)) return false;
660  std::unique_ptr<IAuxTypeVector> packed = m_vecs[id]->toPacked();
661  if (packed) {
662  // Converted to packed form. Replace the object and retry.
663  m_vecs[id] = std::move (packed);
664  return m_vecs[id]->setOption (option);
665  }
666 
667  // Didn't work.
668  return false;
669 }
670 
671 
677 {
678  m_auxids.insert (auxid);
679 }
680 
681 
685  size_t size,
686  size_t capacity,
687  bool no_lock_check)
688 {
689  if (m_vecs.size() <= auxid) {
690  m_vecs.resize (auxid+1);
691  }
692  if (m_vecs[auxid] == 0) {
693  if (m_locked && !no_lock_check)
694  throw ExcStoreLocked (auxid);
696  m_vecs[auxid] = r.makeVector (auxid, size, capacity);
697  addAuxID (auxid);
698  std::unique_ptr<IAuxTypeVector> linked = m_vecs[auxid]->linkedVector();
699  if (linked) {
700  auxid_t linked_id = linked->auxid();
701  m_vecs[linked_id] = std::move (linked);
702  addAuxID (linked_id);
703  }
704  }
705  else {
706  // Make sure the vector has at least the requested size.
707  // One way in which it could be short: setOption was called and created
708  // a variable in a store that had no other variables.
709  if (m_vecs[auxid]->size() < size) {
710  m_vecs[auxid]->resize (size);
711  m_vecs[auxid]->reserve (capacity);
712  }
713  }
714  return m_vecs[auxid].get();
715 }
716 
717 
736  size_t size,
737  size_t capacity,
738  bool no_lock_check)
739 {
740  guard_t guard (m_mutex);
741  return getVectorInternal_noLock (auxid, size, capacity, no_lock_check)->toPtr();
742 }
743 
744 
754 {
755  guard_t guard (m_mutex);
756  m_decorations.reset (auxid);
757 }
758 
759 
770 {
772  auxid_t linked_id = r.linkedVariable (auxid);
773  guard_t guard (m_mutex);
774  if (linked_id < m_vecs.size())
775  return m_vecs[linked_id].get();
776  return nullptr;
777 }
778 
779 
790 {
792  auxid_t linked_id = r.linkedVariable (auxid);
793  guard_t guard (m_mutex);
794  if (linked_id < m_vecs.size())
795  return m_vecs[linked_id].get();
796  return nullptr;
797 }
798 
799 
800 } // namespace SG
SG::AuxStoreInternal::reserve
virtual void reserve(size_t sz) override
Change the capacity of all aux data vectors.
Definition: AuxStoreInternal.cxx:267
SG::IAuxTypeVector::shift
virtual bool shift(size_t pos, ptrdiff_t offs)=0
Shift the elements of the vector.
SG::AuxStoreInternal::addVector
void addVector(std::unique_ptr< IAuxTypeVector > vec, bool isDecoration)
Explicitly add a vector to the store.
Definition: AuxStoreInternal.cxx:144
SG::IAuxTypeVector::isLinked
bool isLinked() const
Return true if this variable is linked from another one.
Definition: IAuxTypeVector.h:226
beamspotman.r
def r
Definition: beamspotman.py:676
SG::AuxStoreInternal::addAuxID
void addAuxID(auxid_t auxid)
Add a new auxid to the set of those being managed by this store.
Definition: AuxStoreInternal.cxx:676
fitman.sz
sz
Definition: fitman.py:527
SG::AuxStoreInternal::size_noLock
size_t size_noLock() const
Return the number of elements in the store; no locking.
Definition: AuxStoreInternal.cxx:614
SG::AuxStoreInternal::getDecoration
virtual void * getDecoration(auxid_t auxid, size_t size, size_t capacity) override
Return the data vector for one aux data decoration item.
Definition: AuxStoreInternal.cxx:198
SG
Forward declaration.
Definition: CaloCellPacker_400_500.h:32
PowhegControl_ttHplus_NLO.ss
ss
Definition: PowhegControl_ttHplus_NLO.py:83
L1CaloPhase1Monitoring.standalone
standalone
Definition: L1CaloPhase1Monitoring.py:120
SG::AuxStoreInternal::getData
virtual const void * getData(SG::auxid_t auxid) const override
Return the data vector for one aux data item.
Definition: AuxStoreInternal.cxx:83
SG::AuxTypeRegistry::instance
static AuxTypeRegistry & instance()
Return the singleton registry instance.
Definition: AuxTypeRegistry.cxx:639
SG::AuxStoreInternal::m_auxids
SG::auxid_set_t m_auxids
Set of auxid's for which we've created a vector.
Definition: AuxStoreInternal.h:454
quiet
bool quiet
Definition: TrigGlobEffCorrValidation.cxx:190
SG::AuxStoreInternal::guard_t
AthContainers_detail::lock_guard< mutex_t > guard_t
Definition: AuxStoreInternal.h:461
SG::AuxStoreInternal::m_mutex
mutex_t m_mutex
Definition: AuxStoreInternal.h:462
ATHCONTAINERS_ERROR
#define ATHCONTAINERS_ERROR(ctx, msg)
Definition: error.h:54
SG::AuxTypeRegistry::getName
std::string getName(SG::auxid_t auxid) const
Return the name of an aux data item.
Definition: AuxTypeRegistry.cxx:881
SG::AuxStoreInternal::standalone
bool standalone() const
Return the standalone flag.
Definition: AuxStoreInternal.cxx:67
SG::ExcStoreLocked
Exception — Attempted to modify auxiliary data in a locked store.
Definition: Control/AthContainers/AthContainers/exceptions.h:183
exceptions.h
Exceptions that can be thrown from AthContainers.
SG::AuxStoreInternal::~AuxStoreInternal
virtual ~AuxStoreInternal()
Destructor.
Definition: AuxStoreInternal.cxx:41
SG::AuxStoreInternal::m_decorations
SG::auxid_set_t m_decorations
Record which variables are decorations.
Definition: AuxStoreInternal.h:451
PackedParameters.h
Describe how the contents of a PackedContainer are to be saved.
SG::IAuxTypeVector::insertMove
virtual bool insertMove(size_t pos, void *src, size_t src_pos, size_t src_n, IAuxStore &srcStore)=0
Insert elements into the vector via move semantics.
vec
std::vector< size_t > vec
Definition: CombinationsGeneratorTest.cxx:9
SG::AuxStoreInternal::AuxStoreInternal
AuxStoreInternal(bool standalone=false)
Constructor.
Definition: AuxStoreInternal.cxx:29
SG::AuxStoreInternal::m_locked
bool m_locked
Has this container been locked?
Definition: AuxStoreInternal.h:457
CxxUtils::ConcurrentBitset::clear
ConcurrentBitset & clear()
Clear all bits in the set.
SG::AuxStoreInternal::getDynamicAuxIDs
virtual const SG::auxid_set_t & getDynamicAuxIDs() const override
Get the list of all variables that need to be handled.
Definition: AuxStoreInternal.cxx:552
SG::AuxStoreInternal::getAuxIDs
virtual const SG::auxid_set_t & getAuxIDs() const override
Return a set of identifiers for existing data items in this store.
Definition: AuxStoreInternal.cxx:400
SG::AuxTypeRegistry
Handle mappings between names and auxid_t.
Definition: AuxTypeRegistry.h:61
python.setupRTTAlg.size
int size
Definition: setupRTTAlg.py:39
DiTauMassTools::ignore
void ignore(T &&)
Definition: PhysicsAnalysis/TauID/DiTauMassTools/DiTauMassTools/HelperFunctions.h:58
SG::AuxStoreInternal::m_vecs
std::vector< std::unique_ptr< IAuxTypeVector > > m_vecs
The collection of vectors of aux data that we're managing, indexed by auxid.
Definition: AuxStoreInternal.h:448
SG::auxid_t
size_t auxid_t
Identifier for a particular aux data item.
Definition: AuxTypes.h:27
H5Utils::internal::packed
H5::CompType packed(H5::CompType in)
Definition: common.cxx:16
lumiFormat.i
int i
Definition: lumiFormat.py:85
CxxUtils::ConcurrentBitset::insert
ConcurrentBitset & insert(bit_t bit, bit_t new_nbits=0)
Set a bit to 1.
SG::AuxStoreInternal::clearDecorations
virtual bool clearDecorations() override
Clear all decorations.
Definition: AuxStoreInternal.cxx:581
CxxUtils::ConcurrentBitset::reset
ConcurrentBitset & reset(bit_t bit)
Turn off one bit.
SG::AuxStoreInternal::lock
virtual void lock() override
Lock the container.
Definition: AuxStoreInternal.cxx:564
SG::AuxStoreInternal::lockDecoration
virtual void lockDecoration(SG::auxid_t auxid) override
Lock a decoration.
Definition: AuxStoreInternal.cxx:753
SG::AuxStoreInternal::getIODataInternal
const void * getIODataInternal(auxid_t auxid, bool quiet) const
Return a pointer to the data to be stored for one aux data item.
Definition: AuxStoreInternal.cxx:450
error.h
Helper for emitting error messages.
SG::AuxStoreInternal::shift
virtual void shift(size_t pos, ptrdiff_t offs) override
Shift the elements of the container.
Definition: AuxStoreInternal.cxx:301
SG::AuxStoreInternal::insertMove
virtual bool insertMove(size_t pos, IAuxStore &other, const SG::auxid_set_t &ignore=SG::auxid_set_t(0)) override
Move all elements from other to this store.
Definition: AuxStoreInternal.cxx:332
SG::AuxStoreInternal::getVectorInternal_noLock
virtual IAuxTypeVector * getVectorInternal_noLock(SG::auxid_t auxid, size_t size, size_t capacity, bool no_lock_check)
Implementation of getVectorInternal; no locking.
Definition: AuxStoreInternal.cxx:684
SG::AuxTypeRegistry::getVecType
const std::type_info * getVecType(SG::auxid_t auxid) const
Return the type of the STL vector used to hold an aux data item.
Definition: AuxTypeRegistry.cxx:936
SG::AuxStoreInternal::setOption
virtual bool setOption(auxid_t id, const AuxDataOption &option) override
Set an option for an auxiliary data variable.
Definition: AuxStoreInternal.cxx:636
SG::AuxStoreInternal::getDataInternal
virtual void * getDataInternal(SG::auxid_t auxid, size_t size, size_t capacity, bool no_lock_check)
Return the data vector for one aux data item.
Definition: AuxStoreInternal.cxx:735
SG::AuxStoreInternal::getIOType
virtual const std::type_info * getIOType(SG::auxid_t auxid) const override
Return the type of the data to be stored for one aux data item.
Definition: AuxStoreInternal.cxx:532
SG::AuxStoreInternal::size
virtual size_t size() const override
Return the number of elements in the store.
Definition: AuxStoreInternal.cxx:602
SG::AuxStoreInternal::linkedVector
virtual IAuxTypeVector * linkedVector(SG::auxid_t auxid) override
Return interface for a linked variable.
Definition: AuxStoreInternal.cxx:769
SG::AuxStoreInternal::getIOData
virtual const void * getIOData(SG::auxid_t auxid) const override
Return a pointer to the data to be stored for one aux data item.
Definition: AuxStoreInternal.cxx:515
SG::AuxDataOption
Hold information about an option setting request.
Definition: AuxDataOption.h:37
SG::AuxTypeRegistry::makeVector
std::unique_ptr< IAuxTypeVector > makeVector(SG::auxid_t auxid, size_t size, size_t capacity) const
Construct a new vector to hold an aux item.
Definition: AuxTypeRegistry.cxx:817
id
SG::auxid_t id
Definition: Control/AthContainers/Root/debug.cxx:227
SG::PackedParameters::isValidOption
static bool isValidOption(const AuxDataOption &option)
Test to see if option is a recognized packing option.
Definition: PackedParameters.cxx:197
python.LumiBlobConversion.pos
pos
Definition: LumiBlobConversion.py:18
SG::IAuxStore
Interface for non-const operations on an auxiliary store.
Definition: IAuxStore.h:48
SG::AuxStoreInternal
An auxiliary data store that holds data internally.
Definition: AuxStoreInternal.h:43
python.PyAthena.v
v
Definition: PyAthena.py:154
SG::AuxStoreInternal::m_standalone
bool m_standalone
Are we being written in standalone mode?
Definition: AuxStoreInternal.h:444
InDetDD::other
@ other
Definition: InDetDD_Defs.h:16
SG::AuxStoreInternal::getVector
virtual const IAuxTypeVector * getVector(SG::auxid_t auxid) const override
Return vector interface for one aux data item.
Definition: AuxStoreInternal.cxx:99
SG::AuxStoreInternal::isDecoration
virtual bool isDecoration(auxid_t auxid) const override
Test if a particular variable is tagged as a decoration.
Definition: AuxStoreInternal.cxx:420
SG::IAuxTypeVector
Abstract interface for manipulating vectors of arbitrary types.
Definition: IAuxTypeVector.h:42
AuxTypeRegistry.h
Handle mappings between names and auxid_t.
SG::AuxStoreInternal::resize
virtual bool resize(size_t sz) override
Change the size of all aux data vectors.
Definition: AuxStoreInternal.cxx:243
SG::AuxStoreInternal::getDecorIDs
virtual const SG::auxid_set_t & getDecorIDs() const override
Return a set of identifiers for decorations in this store.
Definition: AuxStoreInternal.cxx:410
SG::auxid_set_t
A set of aux data identifiers.
Definition: AuxTypes.h:47
SG::AuxStoreInternal::getWritableAuxIDs
virtual const SG::auxid_set_t & getWritableAuxIDs() const override
Return a set of identifiers for writable data items in this store.
Definition: AuxStoreInternal.cxx:433
python.dummyaccess.exists
def exists(filename)
Definition: dummyaccess.py:9
CxxUtils::ConcurrentBitset::erase
ConcurrentBitset & erase(bit_t bit)
Turn off one bit.
AuxStoreInternal.h
An auxiliary data store that holds data internally.
SG::IAuxTypeVector::toPtr
virtual void * toPtr()=0
Return a pointer to the start of the vector's data.
CxxUtils::ConcurrentBitset::test
bool test(bit_t bit) const
Test to see if a bit is set.