libzypp 17.31.23
providenumericid.h
Go to the documentation of this file.
1/*---------------------------------------------------------------------\
2| ____ _ __ __ ___ |
3| |__ / \ / / . \ . \ |
4| / / \ V /| _/ _/ |
5| / /__ | | | | | | |
6| /_____||_| |_| |_| |
7| |
8\---------------------------------------------------------------------*/
12#ifndef ZYPP_CORE_BASE_PROVIDENUMERICID_H
13#define ZYPP_CORE_BASE_PROVIDENUMERICID_H
14
16namespace zypp
17{
19 namespace base
20 {
21
23 //
24 // CLASS NAME : ProvideNumericId
25 //
44 template<class TDerived, class TNumericIdType>
46 {
47 public:
49 TNumericIdType numericId() const
50 { return _numericId; }
51
52 protected:
55 : _numericId( nextId() )
56 {}
59 : _numericId( nextId() )
60 {}
63 { return *this; }
66 : _numericId( rhs._numericId )
67 { /*rhs._numericId = 0;*/ }
70 { if ( &rhs != this ) { _numericId = rhs._numericId; /*rhs._numericId = 0;*/ } return *this; }
73 {}
74 protected:
78 ProvideNumericId( const void *const )
79 : _numericId( 0 )
80 {}
81 private:
83 static TNumericIdType nextId()
84 {
85 static TNumericIdType _staticCounter = 0;
86 // Assert not returning 0
87 return ++_staticCounter;
88 }
90 const TNumericIdType _numericId;
91 };
93
95 } // namespace base
98} // namespace zypp
100#endif // ZYPP_CORE_BASE_PROVIDENUMERICID_H
Easy-to use interface to the ZYPP dependency resolver.
Definition: CodePitfalls.doc:2
Base class for objects providing a numeric Id.
const TNumericIdType _numericId
static TNumericIdType nextId()
Provide the next Id to use.
ProvideNumericId(const void *const)
No-Id ctor (0).
TNumericIdType numericId() const
ProvideNumericId(const ProvideNumericId &)
Copy ctor.
ProvideNumericId & operator=(ProvideNumericId &&rhs)
Move Assign.
ProvideNumericId(ProvideNumericId &&rhs)
Move ctor.
ProvideNumericId & operator=(const ProvideNumericId &)
Assign.