| # Gaudi Framework, version v25r0 |

Home |  | Generated: Mon Feb 17 2014

- Main Page
- Related Pages
- Modules
- Namespaces
- Classes
- Files

- File List
- File Members

All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Groups Pages
KeyedTraits.h
Go to the documentation of this file.
1 // $Id: KeyedTraits.h,v 1.3 2006/12/10 20:29:17 leggett Exp $
2 #ifndef GAUDIKERNEL_KEYEDTRAITS_H
3 #define GAUDIKERNEL_KEYEDTRAITS_H
4
5 #define CHECK_KEYED_CONTAINER
6
7 // Include files
8 #include <vector>
9
10 // Forward declarations
11 template <class K> class KeyedObject;
12 template <class T, class M> class KeyedContainer;
13
14 /*
15 Namespace for Key classes used by the Keyed Container
16 */
17 namespace Containers {
18
19 // Status enumeration
20 enum {
21 OBJ_NOT_FOUND,
22 OBJ_DELETED,
23 OBJ_ERASED,
24 OBJ_INSERTED,
25 OBJ_CANNOT_INSERT
26 };
27
28 // Forward declarations
29
31 template <class CONTAINER, class DATATYPE> struct traits;
33 template <class KEY> struct key_traits;
35 template <class SETUP> class KeyedObjectManager;
36
39 GAUDI_API void cannotInsertToContainer();
40
43 GAUDI_API void containerIsInconsistent();
44
48 GAUDI_API void invalidContainerOperation();
49
51 GAUDI_API void cannotAssignObjectKey();
52
64 template < class KEY > struct key_traits {
66 typedef KEY key_type;
68 typedef KeyedObject<key_type> obj_type;
73 static key_type makeKey(long k) {return key_type(k); }
74 static key_type makeKey(int k) {return key_type(k); }
76 static long identifier(const key_type& k) {return k; }
78 static long hash(const key_type& key_value) {return key_value; }
80 static void setKey(obj_type* v, const key_type& k) {if(v)v->setKey(k); }
85 static bool checkKey(obj_type* v,const key_type& k) {
86 #ifdef CHECK_KEYED_CONTAINER
87 return (v) ? (hash(v->key())==hash(k)) : false;
88 #else
89 return true;
90 #endif
91 }
93 static long addRef(obj_type* v) { return (v) ? v->addRef() : 0; }
95 static long release(obj_type* v) { return (v) ? v->release() : 0; }
96 };
97
106 template < class CONTAINER, class DATATYPE >
107 struct traits : public key_traits < typename DATATYPE::key_type >
108 {
110 static bool checkBounds(const std::vector<DATATYPE*>* cnt,
111 const typename DATATYPE::key_type& k) {
112 #ifdef CHECK_KEYED_CONTAINER
113 return size_t(cnt->size()) > size_t(traits::hash(k));
114 #else
115 return true;
116 #endif
117 }
118 };
119 }
120 #endif // GAUDIKERNEL_KEYEDTRAITS_H
121