extend PBD::ID API to allow construction and operator== using uint64_t

This is theoretically dangerous, because a PBD::ID is supposed to be unique, and this new constructor
cannot guarantee that. However, the same danger already exists with the std::string-based constructor
This commit is contained in:
Paul Davis
2017-05-05 12:18:06 +01:00
parent 417f63a29e
commit ccd19ed061
2 changed files with 14 additions and 2 deletions

View File

@@ -34,8 +34,9 @@ uint64_t ID::_counter = 0;
void
ID::init ()
{
if (!counter_lock)
if (!counter_lock) {
counter_lock = new Glib::Threads::Mutex;
}
}
ID::ID ()
@@ -50,14 +51,21 @@ ID::ID (const ID& other)
ID::ID (string str)
{
/* danger, will robinson: could result in non-unique ID */
string_assign (str);
}
ID::ID (uint64_t n)
{
/* danger, will robinson: could result in non-unique ID */
_id = n;
}
void
ID::reset ()
{
Glib::Threads::Mutex::Lock lm (*counter_lock);
_id = _counter++;
_id = ++_counter;
}
bool

View File

@@ -35,6 +35,7 @@ class LIBPBD_API ID {
ID ();
ID (std::string);
ID (const ID&);
ID (uint64_t);
void reset ();
@@ -47,6 +48,9 @@ class LIBPBD_API ID {
}
bool operator== (const std::string&) const;
bool operator== (uint64_t n) const {
return _id == n;
}
ID& operator= (std::string);
ID& operator= (const ID&);