synfig-core  1.0.3
uniqueid.h
Go to the documentation of this file.
1 /* === S Y N F I G ========================================================= */
21 /* ========================================================================= */
22 
23 /* === S T A R T =========================================================== */
24 
25 #ifndef __SYNFIG_UNIQUEID_H
26 #define __SYNFIG_UNIQUEID_H
27 
28 /* === H E A D E R S ======================================================= */
29 
30 /* === M A C R O S ========================================================= */
31 
32 /* === T Y P E D E F S ===================================================== */
33 
34 /* === C L A S S E S & S T R U C T S ======================================= */
35 
36 namespace synfig {
37 
38 class UniqueIDLessThan;
39 
43 class UniqueID
44 {
45  friend class UniqueIDLessThan;
46 
47  int id_;
48 
49  explicit UniqueID(int id_):id_(id_) { }
50 
51  static int next_id();
52 
53 public:
54 
56 
59  const int &get_uid()const { return id_; }
60 
61  UniqueID():id_(next_id()) { }
62 
63  void make_unique() { id_=next_id(); }
64 
65  static const UniqueID nil() { return UniqueID(0); }
66 
67  operator bool()const { return static_cast<bool>(id_); }
68 
69  void mimic(const UniqueID& x) { id_=x.id_; }
70 
71  bool operator==(const UniqueID &rhs)const { return id_==rhs.id_; }
72  bool operator!=(const UniqueID &rhs)const { return id_!=rhs.id_; }
73  bool operator<(const UniqueID &rhs)const { return id_<rhs.id_; }
74 }; // END of class UniqueID
75 
80 {
81 public:
82  bool operator()(const UniqueID &lhs, const UniqueID &rhs)const
83  { return lhs.id_<rhs.id_; }
84 };
85 
86 
87 }; // END of namespace synfig
88 
89 /* === E N D =============================================================== */
90 
91 #endif