KeyedObjectManager.h
Go to the documentation of this file.
1 #ifndef GAUDIKERNEL_KEYEDOBJECTMANAGER_H
2 #define GAUDIKERNEL_KEYEDOBJECTMANAGER_H
3 
4 // Framework include files
5 #include "GaudiKernel/Kernel.h"
6 #include "GaudiKernel/ClassID.h"
7 #include "GaudiKernel/KeyedTraits.h"
8 
9 // STL includes
10 #include <vector>
11 
12 // Forward declarations
14 class ContainedObject;
15 
18 namespace Containers {
19 
21  typedef long (*MANIPULATOR)(void*);
23  struct GAUDI_API hashmap;
25  struct GAUDI_API map;
27  struct GAUDI_API array;
29  struct GAUDI_API vector;
30 
44  template <class SETUP>
45  class GAUDI_API KeyedObjectManager {
46  private:
47  typedef std::vector<void*> seq_type;
49  seq_type* m_seq;
51  mutable long m_direct;
52  mutable long m_keyCtxt;
53  union {
55  char buffer[128];
56  SETUP* s;
57  } m_setup;
58 
60  void onDirty() const;
61 
62  public:
64  KeyedObjectManager();
66  virtual ~KeyedObjectManager();
68  void clearDirect();
70  long insertDirect(ObjectContainerBase* b,ContainedObject* c,void* o, long k);
72  long isDirect() const { return m_direct; }
74  void* object(long key) const;
76  long insert(ObjectContainerBase* b,ContainedObject* c,void* o, long* k);
78  long insert(ObjectContainerBase* b,ContainedObject* c,void* o,long k);
80  void* erase(long key, const void* obj);
82  long erase(seq_type::iterator beg, seq_type::iterator end);
84  void reserve(long size);
86  void clear();
88  void setup(void* seq, void** rndm);
90  static CLID classID();
91  };
92 
94  typedef KeyedObjectManager< map > Map;
96  typedef KeyedObjectManager< hashmap > HashMap;
98  typedef KeyedObjectManager< vector > Vector;
100  typedef KeyedObjectManager< array > Array;
101 }
102 #endif // GAUDIKERNEL_KEYEDOBJECTMANAGER_H
tuple c
Definition: gaudirun.py:392
KeyedObjectManager< array > Array
Forward declaration of specialized redirection array object manager.
#define GAUDI_API
Definition: Kernel.h:107
KeyedObjectManager< vector > Vector
Forward declaration of specialized std::vector-like object manager.
struct GAUDI_API vector
Parametrisation class for vector-like implementation.
Containers namespace.
struct GAUDI_API map
Parametrisation class for map-like implementation.
auto end(reverse_wrapper< T > &w)
Definition: reverse.h:47
struct GAUDI_API hashmap
Parametrisation class for hashmap-like implementation.
unsigned int CLID
Class ID definition.
Definition: ClassID.h:8
All classes that their objects may be contained in an LHCb ObjectContainer (e.g.
struct GAUDI_API array
Parametrisation class for redirection array - like implementation.
KeyedObjectManager< hashmap > HashMap
Forward declaration of specialized std::hashmap-like object manager.
long(* MANIPULATOR)(void *)
Object manipulator type definition.
string s
Definition: gaudirun.py:246
ObjectContainerBase is the base class for Gaudi container classes.
KeyedObjectManager< map > Map
Forward declaration of specialized std::map-like object manager.