libzypp  17.28.8
ProvideNumericId.h
Go to the documentation of this file.
1 /*---------------------------------------------------------------------\
2 | ____ _ __ __ ___ |
3 | |__ / \ / / . \ . \ |
4 | / / \ V /| _/ _/ |
5 | / /__ | | | | | | |
6 | /_____||_| |_| |_| |
7 | |
8 \---------------------------------------------------------------------*/
12 #ifndef ZYPP_BASE_PROVIDENUMERICID_H
13 #define ZYPP_BASE_PROVIDENUMERICID_H
14 
16 namespace 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_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 & operator=(ProvideNumericId &&rhs)
Move Assign.
ProvideNumericId(const void *const)
No-Id ctor (0).
TNumericIdType numericId() const
ProvideNumericId(const ProvideNumericId &)
Copy ctor.
ProvideNumericId & operator=(const ProvideNumericId &)
Assign.
ProvideNumericId(ProvideNumericId &&rhs)
Move ctor.