1 /*---------------------------------------------------------------------\
3 | |__ / \ / / . \ . \ |
8 \---------------------------------------------------------------------*/
9 /** \file zypp/base/ProvideNumericId.h
12 #ifndef ZYPP_BASE_PROVIDENUMERICID_H
13 #define ZYPP_BASE_PROVIDENUMERICID_H
15 ///////////////////////////////////////////////////////////////////
17 { /////////////////////////////////////////////////////////////////
18 ///////////////////////////////////////////////////////////////////
20 { /////////////////////////////////////////////////////////////////
22 ///////////////////////////////////////////////////////////////////
24 // CLASS NAME : ProvideNumericId
26 /** Base class for objects providing a numeric Id.
27 * The ctor creates a NumericId from some static counter.
30 * struct Foo : public base::ProvideNumericId<Foo,unsigned>
33 * foo.numericId(); // returns foo's NumericId.
36 template<class _Derived, class _NumericIdType>
37 struct ProvideNumericId
40 /** \return The objects numeric Id. */
41 _NumericIdType numericId() const
42 { return _numericId; }
47 : _numericId( nextId() )
50 ProvideNumericId( const ProvideNumericId & /*rhs*/ )
51 : _numericId( nextId() )
54 ProvideNumericId & operator=( const ProvideNumericId & /*rhs*/ )
61 static _NumericIdType nextId()
63 static _NumericIdType _staticCounter = 0;
64 return ++_staticCounter;
67 const _NumericIdType _numericId;
69 ///////////////////////////////////////////////////////////////////
71 /////////////////////////////////////////////////////////////////
73 ///////////////////////////////////////////////////////////////////
74 /////////////////////////////////////////////////////////////////
76 ///////////////////////////////////////////////////////////////////
77 #endif // ZYPP_BASE_PROVIDENUMERICID_H