|
|
@@ -31,7 +31,7 @@
|
|
|
// static init time, and we must use the arrow syntax to force
|
|
|
// initialization of the interrogatedb_cat category.
|
|
|
|
|
|
-MutexImpl TypeRegistry::_lock;
|
|
|
+MutexImpl *TypeRegistry::_lock = NULL;
|
|
|
TypeRegistry *TypeRegistry::_global_pointer = NULL;
|
|
|
|
|
|
|
|
|
@@ -48,7 +48,7 @@ TypeRegistry *TypeRegistry::_global_pointer = NULL;
|
|
|
////////////////////////////////////////////////////////////////////
|
|
|
bool TypeRegistry::
|
|
|
register_type(TypeHandle &type_handle, const string &name) {
|
|
|
- _lock.lock();
|
|
|
+ _lock->lock();
|
|
|
|
|
|
if (type_handle != TypeHandle::none()) {
|
|
|
// Here's a type that was already registered. Just make sure
|
|
|
@@ -56,7 +56,7 @@ register_type(TypeHandle &type_handle, const string &name) {
|
|
|
TypeRegistryNode *rnode = look_up(type_handle, NULL);
|
|
|
if (&type_handle == &rnode->_ref) {
|
|
|
// No problem.
|
|
|
- _lock.release();
|
|
|
+ _lock->release();
|
|
|
nassertr(rnode->_name == name, false);
|
|
|
return false;
|
|
|
}
|
|
|
@@ -86,7 +86,7 @@ register_type(TypeHandle &type_handle, const string &name) {
|
|
|
_derivations_fresh = false;
|
|
|
|
|
|
type_handle = new_handle;
|
|
|
- _lock.release();
|
|
|
+ _lock->release();
|
|
|
return true;
|
|
|
}
|
|
|
TypeRegistryNode *rnode = (*ri).second;
|
|
|
@@ -102,7 +102,7 @@ register_type(TypeHandle &type_handle, const string &name) {
|
|
|
|
|
|
if (type_handle == rnode->_handle) {
|
|
|
// No problem.
|
|
|
- _lock.release();
|
|
|
+ _lock->release();
|
|
|
return false;
|
|
|
}
|
|
|
// But wait--the type_handle has changed! We kept a reference to
|
|
|
@@ -113,7 +113,7 @@ register_type(TypeHandle &type_handle, const string &name) {
|
|
|
interrogatedb_cat->error()
|
|
|
<< "Reregistering " << name << "\n";
|
|
|
type_handle == rnode->_handle;
|
|
|
- _lock.release();
|
|
|
+ _lock->release();
|
|
|
return false;
|
|
|
}
|
|
|
|
|
|
@@ -129,7 +129,7 @@ register_type(TypeHandle &type_handle, const string &name) {
|
|
|
|
|
|
type_handle = rnode->_handle;
|
|
|
}
|
|
|
- _lock.release();
|
|
|
+ _lock->release();
|
|
|
return false;
|
|
|
}
|
|
|
|
|
|
@@ -144,7 +144,7 @@ register_type(TypeHandle &type_handle, const string &name) {
|
|
|
////////////////////////////////////////////////////////////////////
|
|
|
TypeHandle TypeRegistry::
|
|
|
register_dynamic_type(const string &name) {
|
|
|
- _lock.lock();
|
|
|
+ _lock->lock();
|
|
|
|
|
|
NameRegistry::iterator ri;
|
|
|
ri = _name_registry.find(name);
|
|
|
@@ -172,14 +172,14 @@ register_dynamic_type(const string &name) {
|
|
|
_name_registry[name] = rnode;
|
|
|
_derivations_fresh = false;
|
|
|
|
|
|
- _lock.release();
|
|
|
+ _lock->release();
|
|
|
return *new_handle;
|
|
|
}
|
|
|
|
|
|
// Return the TypeHandle previously obtained.
|
|
|
TypeRegistryNode *rnode = (*ri).second;
|
|
|
TypeHandle handle = rnode->_handle;
|
|
|
- _lock.release();
|
|
|
+ _lock->release();
|
|
|
return handle;
|
|
|
}
|
|
|
|
|
|
@@ -193,7 +193,7 @@ register_dynamic_type(const string &name) {
|
|
|
////////////////////////////////////////////////////////////////////
|
|
|
void TypeRegistry::
|
|
|
record_derivation(TypeHandle child, TypeHandle parent) {
|
|
|
- _lock.lock();
|
|
|
+ _lock->lock();
|
|
|
|
|
|
TypeRegistryNode *cnode = look_up(child, NULL);
|
|
|
nassertv(cnode != (TypeRegistryNode *)NULL);
|
|
|
@@ -212,7 +212,7 @@ record_derivation(TypeHandle child, TypeHandle parent) {
|
|
|
_derivations_fresh = false;
|
|
|
}
|
|
|
|
|
|
- _lock.release();
|
|
|
+ _lock->release();
|
|
|
}
|
|
|
|
|
|
////////////////////////////////////////////////////////////////////
|
|
|
@@ -226,7 +226,7 @@ record_derivation(TypeHandle child, TypeHandle parent) {
|
|
|
////////////////////////////////////////////////////////////////////
|
|
|
void TypeRegistry::
|
|
|
record_alternate_name(TypeHandle type, const string &name) {
|
|
|
- _lock.lock();
|
|
|
+ _lock->lock();
|
|
|
|
|
|
TypeRegistryNode *rnode = look_up(type, (TypedObject *)NULL);
|
|
|
if (rnode != (TypeRegistryNode *)NULL) {
|
|
|
@@ -239,7 +239,7 @@ record_alternate_name(TypeHandle type, const string &name) {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- _lock.release();
|
|
|
+ _lock->release();
|
|
|
}
|
|
|
|
|
|
////////////////////////////////////////////////////////////////////
|
|
|
@@ -251,7 +251,7 @@ record_alternate_name(TypeHandle type, const string &name) {
|
|
|
////////////////////////////////////////////////////////////////////
|
|
|
TypeHandle TypeRegistry::
|
|
|
find_type(const string &name) const {
|
|
|
- _lock.lock();
|
|
|
+ _lock->lock();
|
|
|
|
|
|
TypeHandle handle;
|
|
|
NameRegistry::const_iterator ri;
|
|
|
@@ -259,7 +259,7 @@ find_type(const string &name) const {
|
|
|
if (ri != _name_registry.end()) {
|
|
|
handle = (*ri).second->_handle;
|
|
|
}
|
|
|
- _lock.release();
|
|
|
+ _lock->release();
|
|
|
|
|
|
return handle;
|
|
|
}
|
|
|
@@ -277,11 +277,11 @@ find_type(const string &name) const {
|
|
|
////////////////////////////////////////////////////////////////////
|
|
|
string TypeRegistry::
|
|
|
get_name(TypeHandle type, TypedObject *object) const {
|
|
|
- _lock.lock();
|
|
|
+ _lock->lock();
|
|
|
TypeRegistryNode *rnode = look_up(type, object);
|
|
|
nassertr(rnode != (TypeRegistryNode *)NULL, "");
|
|
|
string name = rnode->_name;
|
|
|
- _lock.release();
|
|
|
+ _lock->release();
|
|
|
|
|
|
return name;
|
|
|
}
|
|
|
@@ -307,7 +307,7 @@ get_name(TypeHandle type, TypedObject *object) const {
|
|
|
bool TypeRegistry::
|
|
|
is_derived_from(TypeHandle child, TypeHandle base,
|
|
|
TypedObject *child_object) {
|
|
|
- _lock.lock();
|
|
|
+ _lock->lock();
|
|
|
|
|
|
const TypeRegistryNode *child_node = look_up(child, child_object);
|
|
|
const TypeRegistryNode *base_node = look_up(base, (TypedObject *)NULL);
|
|
|
@@ -316,7 +316,7 @@ is_derived_from(TypeHandle child, TypeHandle base,
|
|
|
freshen_derivations();
|
|
|
|
|
|
bool result = TypeRegistryNode::is_derived_from(child_node, base_node);
|
|
|
- _lock.release();
|
|
|
+ _lock->release();
|
|
|
return result;
|
|
|
}
|
|
|
|
|
|
@@ -329,10 +329,10 @@ is_derived_from(TypeHandle child, TypeHandle base,
|
|
|
////////////////////////////////////////////////////////////////////
|
|
|
int TypeRegistry::
|
|
|
get_num_root_classes() {
|
|
|
- _lock.lock();
|
|
|
+ _lock->lock();
|
|
|
freshen_derivations();
|
|
|
int num_roots = _root_classes.size();
|
|
|
- _lock.release();
|
|
|
+ _lock->release();
|
|
|
return num_roots;
|
|
|
}
|
|
|
|
|
|
@@ -344,13 +344,13 @@ get_num_root_classes() {
|
|
|
////////////////////////////////////////////////////////////////////
|
|
|
TypeHandle TypeRegistry::
|
|
|
get_root_class(int n) {
|
|
|
- _lock.lock();
|
|
|
+ _lock->lock();
|
|
|
freshen_derivations();
|
|
|
TypeHandle handle;
|
|
|
if (n >= 0 && n < get_num_root_classes()) {
|
|
|
handle = _root_classes[n]->_handle;
|
|
|
}
|
|
|
- _lock.release();
|
|
|
+ _lock->release();
|
|
|
|
|
|
return handle;
|
|
|
}
|
|
|
@@ -373,11 +373,11 @@ get_root_class(int n) {
|
|
|
////////////////////////////////////////////////////////////////////
|
|
|
int TypeRegistry::
|
|
|
get_num_parent_classes(TypeHandle child, TypedObject *child_object) const {
|
|
|
- _lock.lock();
|
|
|
+ _lock->lock();
|
|
|
TypeRegistryNode *rnode = look_up(child, child_object);
|
|
|
nassertr(rnode != (TypeRegistryNode *)NULL, 0);
|
|
|
int num_parents = rnode->_parent_classes.size();
|
|
|
- _lock.release();
|
|
|
+ _lock->release();
|
|
|
return num_parents;
|
|
|
}
|
|
|
|
|
|
@@ -390,14 +390,14 @@ get_num_parent_classes(TypeHandle child, TypedObject *child_object) const {
|
|
|
////////////////////////////////////////////////////////////////////
|
|
|
TypeHandle TypeRegistry::
|
|
|
get_parent_class(TypeHandle child, int index) const {
|
|
|
- _lock.lock();
|
|
|
+ _lock->lock();
|
|
|
TypeHandle handle;
|
|
|
TypeRegistryNode *rnode = look_up(child, (TypedObject *)NULL);
|
|
|
nassertr(rnode != (TypeRegistryNode *)NULL, TypeHandle::none());
|
|
|
if (index >= 0 && index < (int)rnode->_parent_classes.size()) {
|
|
|
handle = rnode->_parent_classes[index]->_handle;
|
|
|
}
|
|
|
- _lock.release();
|
|
|
+ _lock->release();
|
|
|
return handle;
|
|
|
}
|
|
|
|
|
|
@@ -415,11 +415,11 @@ get_parent_class(TypeHandle child, int index) const {
|
|
|
////////////////////////////////////////////////////////////////////
|
|
|
int TypeRegistry::
|
|
|
get_num_child_classes(TypeHandle child, TypedObject *child_object) const {
|
|
|
- _lock.lock();
|
|
|
+ _lock->lock();
|
|
|
TypeRegistryNode *rnode = look_up(child, child_object);
|
|
|
nassertr(rnode != (TypeRegistryNode *)NULL, 0);
|
|
|
int num_children = rnode->_child_classes.size();
|
|
|
- _lock.release();
|
|
|
+ _lock->release();
|
|
|
return num_children;
|
|
|
}
|
|
|
|
|
|
@@ -432,14 +432,14 @@ get_num_child_classes(TypeHandle child, TypedObject *child_object) const {
|
|
|
////////////////////////////////////////////////////////////////////
|
|
|
TypeHandle TypeRegistry::
|
|
|
get_child_class(TypeHandle child, int index) const {
|
|
|
- _lock.lock();
|
|
|
+ _lock->lock();
|
|
|
TypeHandle handle;
|
|
|
TypeRegistryNode *rnode = look_up(child, (TypedObject *)NULL);
|
|
|
nassertr(rnode != (TypeRegistryNode *)NULL, TypeHandle::none());
|
|
|
if (index >= 0 && index < (int)rnode->_child_classes.size()) {
|
|
|
handle = rnode->_child_classes[index]->_handle;
|
|
|
}
|
|
|
- _lock.release();
|
|
|
+ _lock->release();
|
|
|
return handle;
|
|
|
}
|
|
|
|
|
|
@@ -460,7 +460,7 @@ get_child_class(TypeHandle child, int index) const {
|
|
|
TypeHandle TypeRegistry::
|
|
|
get_parent_towards(TypeHandle child, TypeHandle base,
|
|
|
TypedObject *child_object) {
|
|
|
- _lock.lock();
|
|
|
+ _lock->lock();
|
|
|
TypeHandle handle;
|
|
|
const TypeRegistryNode *child_node = look_up(child, child_object);
|
|
|
const TypeRegistryNode *base_node = look_up(base, NULL);
|
|
|
@@ -468,7 +468,7 @@ get_parent_towards(TypeHandle child, TypeHandle base,
|
|
|
base_node != (TypeRegistryNode *)NULL, TypeHandle::none());
|
|
|
freshen_derivations();
|
|
|
handle = TypeRegistryNode::get_parent_towards(child_node, base_node);
|
|
|
- _lock.release();
|
|
|
+ _lock->release();
|
|
|
return handle;
|
|
|
}
|
|
|
|
|
|
@@ -486,7 +486,8 @@ get_parent_towards(TypeHandle child, TypeHandle base,
|
|
|
////////////////////////////////////////////////////////////////////
|
|
|
void TypeRegistry::
|
|
|
reregister_types() {
|
|
|
- _lock.lock();
|
|
|
+ init_lock();
|
|
|
+ _lock->lock();
|
|
|
HandleRegistry::iterator ri;
|
|
|
TypeRegistry *reg = ptr();
|
|
|
for (ri = reg->_handle_registry.begin();
|
|
|
@@ -498,7 +499,7 @@ reregister_types() {
|
|
|
<< "Reregistering " << rnode->_name << "\n";
|
|
|
}
|
|
|
}
|
|
|
- _lock.release();
|
|
|
+ _lock->release();
|
|
|
}
|
|
|
|
|
|
|
|
|
@@ -511,7 +512,7 @@ reregister_types() {
|
|
|
////////////////////////////////////////////////////////////////////
|
|
|
void TypeRegistry::
|
|
|
write(ostream &out) const {
|
|
|
- _lock.lock();
|
|
|
+ _lock->lock();
|
|
|
// Recursively write out the tree, starting from each node that has
|
|
|
// no parent.
|
|
|
HandleRegistry::const_iterator hi;
|
|
|
@@ -523,7 +524,7 @@ write(ostream &out) const {
|
|
|
write_node(out, 2, root);
|
|
|
}
|
|
|
}
|
|
|
- _lock.release();
|
|
|
+ _lock->release();
|
|
|
}
|
|
|
|
|
|
////////////////////////////////////////////////////////////////////
|
|
|
@@ -534,7 +535,8 @@ write(ostream &out) const {
|
|
|
////////////////////////////////////////////////////////////////////
|
|
|
TypeRegistry *TypeRegistry::
|
|
|
ptr() {
|
|
|
- _lock.lock();
|
|
|
+ init_lock();
|
|
|
+ _lock->lock();
|
|
|
if (_global_pointer == NULL) {
|
|
|
#ifdef NOTIFY_DEBUG
|
|
|
if (interrogatedb_cat->is_spam()) {
|
|
|
@@ -544,7 +546,7 @@ ptr() {
|
|
|
#endif
|
|
|
init_global_pointer();
|
|
|
}
|
|
|
- _lock.release();
|
|
|
+ _lock->release();
|
|
|
return _global_pointer;
|
|
|
}
|
|
|
|