| Classes | Job Modules | Data Objects | Services | Algorithms | Tools | Packages | Directories | Tracs |

In This Package:

KeyedObject< KEY > Class Template Reference

Definition of the templated KeyedObject class. More...

#include <KeyedObject.h>

Inheritance diagram for KeyedObject< KEY >:

[legend]
Collaboration diagram for KeyedObject< KEY >:
[legend]
List of all members.

Public Types

typedef KEY key_type
 Definition of the key-type to access object.

Public Member Functions

 KeyedObject ()
 Standard Constructor. The object key is preset to the invalid value.
 KeyedObject (const key_type &kval)
 Standard Constructor accepting the object's key.
virtual ~KeyedObject ()
 Standard destructor.
const key_typekey () const
 Retrieve Key of the object.
bool hasKey () const
 Check if the object has a key assigned or not.
virtual long index () const
 Distance in the parent container.
virtual StreamBufferserialize (StreamBuffer &s) const
 Serialize the object for writing.
virtual StreamBufferserialize (StreamBuffer &s)
 Serialize the object for reading.
virtual const CLIDclID () const
 Retrieve pointer to class identifier.
const ObjectContainerBaseparent () const
 Access to parent object.
void setParent (ObjectContainerBase *value)
 Update parent member.
virtual std::ostream & fillStream (std::ostream &s) const
 Fill the output stream (ASCII).

Static Public Member Functions

static const CLIDclassID ()

Protected Types

typedef Containers::key_traits<
key_type
traits
 definition of the container key traits to be made friend

Protected Member Functions

unsigned long addRef ()
 Add reference to object (Increase reference counter).
unsigned long release ()
 Release reference. If the reference count is ZERO, delete the object.
void setKey (const key_type &key)
 Set object key.

Protected Attributes

key_type m_key
 Object Key; It's initial value is not determined.
long m_refCount
 Reference counter.
bool m_hasKey
 Boolean to indicate wether a key was already assigned.

Private Member Functions

 KeyedObject (const KeyedObject &copy)
 NOBODY may copy these objects.

Friends

struct GaudiDict::KeyedObjectDict< KEY >
struct Containers::key_traits< key_type >
 Allow the container traits to access full object properties.
std::ostream & operator<< (std::ostream &s, const ContainedObject &obj)
 Output operator (ASCII).

Detailed Description

template<class KEY>
class KeyedObject< KEY >

Definition of the templated KeyedObject class.

This object, which is of the basic containedObject type allows to be identified by key.

This implementation uses a reference count mechanism for insertion into multiple containers; Once the reference count is NULL, the object will automatically be deleted.

Author:
M.Frank CERN/LHCb
Version:
1.0

Definition at line 29 of file KeyedObject.h.


Member Typedef Documentation

template<class KEY>
typedef KEY KeyedObject< KEY >::key_type

Definition of the key-type to access object.

Definition at line 33 of file KeyedObject.h.

template<class KEY>
typedef Containers::key_traits<key_type> KeyedObject< KEY >::traits [protected]

definition of the container key traits to be made friend

Definition at line 37 of file KeyedObject.h.


Constructor & Destructor Documentation

template<class KEY>
KeyedObject< KEY >::KeyedObject (  )  [inline]

Standard Constructor. The object key is preset to the invalid value.

Definition at line 62 of file KeyedObject.h.

00062 : m_refCount(0), m_hasKey(false) {                             }

template<class KEY>
KeyedObject< KEY >::KeyedObject ( const key_type kval  )  [inline]

Standard Constructor accepting the object's key.

The key must be valid and cannot be changed later.

Definition at line 66 of file KeyedObject.h.

00066 :m_key(kval),m_refCount(0),m_hasKey(true) { }

template<class KEY>
KeyedObject< KEY >::~KeyedObject (  )  [inline, virtual]

Standard destructor.

Definition at line 92 of file KeyedObject.h.

00093 {
00094   ObjectContainerBase* p = const_cast<ObjectContainerBase*>(parent());
00095   if ( p )  {
00096     setParent(0);
00097     p->remove(this);
00098   }
00099 }

template<class KEY>
KeyedObject< KEY >::KeyedObject ( const KeyedObject< KEY > &  copy  )  [inline, private]

NOBODY may copy these objects.

Definition at line 80 of file KeyedObject.h.

00080 : ContainedObject(copy) {               }


Member Function Documentation

template<class KEY>
unsigned long KeyedObject< KEY >::addRef (  )  [inline, protected]

Add reference to object (Increase reference counter).

Definition at line 103 of file KeyedObject.h.

00103                                        {
00104   return ++m_refCount; 
00105 }

template<class KEY>
unsigned long KeyedObject< KEY >::release (  )  [inline, protected]

Release reference. If the reference count is ZERO, delete the object.

Definition at line 109 of file KeyedObject.h.

00109                                         {
00110   long cnt = --m_refCount;
00111   if ( cnt <= 0 )  {
00112     delete this;
00113   }
00114   return cnt;
00115 }

template<class KEY>
void KeyedObject< KEY >::setKey ( const key_type key  )  [inline, protected]

Set object key.

The key for consistency reasons can be set only once for the object. Any attempt to redefine the key results in an exception.

Definition at line 122 of file KeyedObject.h.

00122                                                  {
00123   if ( !m_hasKey )   {
00124     m_key = key;
00125     m_hasKey = true;
00126     return;
00127   }
00128   Containers::cannotAssignObjectKey();
00129 }

template<class KEY>
const key_type& KeyedObject< KEY >::key (  )  const [inline]

Retrieve Key of the object.

Definition at line 70 of file KeyedObject.h.

00070 {                     return m_key;    }

template<class KEY>
bool KeyedObject< KEY >::hasKey (  )  const [inline]

Check if the object has a key assigned or not.

Definition at line 72 of file KeyedObject.h.

00072 {                     return m_hasKey; }  

template<class KEY>
virtual long KeyedObject< KEY >::index (  )  const [inline, virtual]

Distance in the parent container.

Reimplemented from ContainedObject.

Definition at line 73 of file KeyedObject.h.

00073 {    return traits::identifier(m_key); }

template<class KEY>
StreamBuffer & KeyedObject< KEY >::serialize ( StreamBuffer s  )  const [inline, virtual]

Serialize the object for writing.

Reimplemented from ContainedObject.

Definition at line 133 of file KeyedObject.h.

00133                                                                  {
00134   return ContainedObject::serialize(s) << traits::identifier(m_key);
00135 }

template<class KEY>
StreamBuffer & KeyedObject< KEY >::serialize ( StreamBuffer s  )  [inline, virtual]

Serialize the object for reading.

Reimplemented from ContainedObject.

Definition at line 139 of file KeyedObject.h.

00139                                                            {
00140   long k;
00141   ContainedObject::serialize(s) >> k;
00142   m_key = traits::makeKey(k);
00143   m_hasKey = true;
00144   return s;
00145 }

virtual const CLID& ContainedObject::clID (  )  const [inline, virtual, inherited]

Retrieve pointer to class identifier.

Definition at line 46 of file ContainedObject.h.

00046 { return ContainedObject::classID(); }

static const CLID& ContainedObject::classID (  )  [inline, static, inherited]

Definition at line 47 of file ContainedObject.h.

00047 { return CLID_ContainedObject; }

const ObjectContainerBase* ContainedObject::parent (  )  const [inline, inherited]

Access to parent object.

Definition at line 50 of file ContainedObject.h.

00050 { return m_parent;        }

void ContainedObject::setParent ( ObjectContainerBase value  )  [inline, inherited]

Update parent member.

Definition at line 52 of file ContainedObject.h.

00052 { m_parent = value;       }

virtual std::ostream& ContainedObject::fillStream ( std::ostream &  s  )  const [inline, virtual, inherited]

Fill the output stream (ASCII).

Definition at line 64 of file ContainedObject.h.

00064 { return s; }


Friends And Related Function Documentation

template<class KEY>
friend struct GaudiDict::KeyedObjectDict< KEY > [friend]

Definition at line 30 of file KeyedObject.h.

template<class KEY>
friend struct Containers::key_traits< key_type > [friend]

Allow the container traits to access full object properties.

Definition at line 42 of file KeyedObject.h.

std::ostream& operator<< ( std::ostream &  s,
const ContainedObject obj 
) [friend, inherited]

Output operator (ASCII).

Definition at line 66 of file ContainedObject.h.

00066                                                                               {
00067     return obj.fillStream(s);
00068   }


Member Data Documentation

template<class KEY>
key_type KeyedObject< KEY >::m_key [protected]

Object Key; It's initial value is not determined.

Definition at line 46 of file KeyedObject.h.

template<class KEY>
long KeyedObject< KEY >::m_refCount [protected]

Reference counter.

Definition at line 48 of file KeyedObject.h.

template<class KEY>
bool KeyedObject< KEY >::m_hasKey [protected]

Boolean to indicate wether a key was already assigned.

Definition at line 50 of file KeyedObject.h.


The documentation for this class was generated from the following file:
| Classes | Job Modules | Data Objects | Services | Algorithms | Tools | Packages | Directories | Tracs |

Generated on Mon Apr 11 19:57:12 2011 for GaudiKernel by doxygen 1.4.7