/* === C L A S S E S & S T R U C T S ======================================= */
namespace synfig {
-
+
class UniqueIDLessThan;
-
+
/*! \class UniqueID
** \brief \todo
*/
class UniqueID
{
friend class UniqueIDLessThan;
-
+
int id_;
-
+
explicit UniqueID(int id_):id_(id_) { }
-
+
static int next_id();
-
+
public:
-
+
//! Returns the internal unique identifier for this object.
/*! The return value from this isn't really useful for
** much other than debug output. Nonetheless, that is
** one step above useless, so here it is. */
const int &get_uid()const { return id_; }
-
+
UniqueID():id_(next_id()) { }
-
+
void make_unique() { id_=next_id(); }
-
+
static const UniqueID nil() { return UniqueID(0); }
-
+
operator bool()const { return static_cast<bool>(id_); }
void mimic(const UniqueID& x) { id_=x.id_; }
-
+
bool operator==(const UniqueID &rhs)const { return id_==rhs.id_; }
bool operator!=(const UniqueID &rhs)const { return id_!=rhs.id_; }
bool operator<(const UniqueID &rhs)const { return id_<rhs.id_; }