Gaudi Framework, version v24r2
Home
Generated: Wed Dec 4 2013
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
GaudiKernel
GaudiKernel
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
Generated at Wed Dec 4 2013 14:33:09 for Gaudi Framework, version v24r2 by
Doxygen
version 1.8.2 written by
Dimitri van Heesch
, © 1997-2004