Panda3D
Public Member Functions | Static Public Member Functions | Public Attributes | List of all members
TypeRegistry Class Reference

The TypeRegistry class maintains all the assigned TypeHandles in a given system. More...

Inheritance diagram for TypeRegistry:

Public Member Functions

 __init__ (const TypeRegistry)
 
TypeHandle findType (str name)
 Looks for a previously-registered type of the given name. More...
 
TypeHandle findTypeById (int id)
 Looks for a previously-registered type with the given id number (as returned by TypeHandle::get_index()). More...
 
TypeHandle getChildClass (TypeHandle child, int index)
 Returns the nth child class of this type. More...
 
str getName (TypeHandle type, TypedObject object)
 Returns the name of the indicated type. More...
 
int getNumChildClasses (TypeHandle child, TypedObject child_object)
 Returns the number of child classes that the indicated type is known to have. More...
 
int getNumParentClasses (TypeHandle child, TypedObject child_object)
 Returns the number of parent classes that the indicated type is known to have. More...
 
int getNumRootClasses ()
 Returns the number of root classes–that is, classes that do not inherit from any other classes–known in the system. More...
 
int getNumTypehandles ()
 Returns the total number of unique TypeHandles in the system. More...
 
TypeHandle getParentClass (TypeHandle child, int index)
 Returns the nth parent class of this type. More...
 
TypeHandle getParentTowards (TypeHandle child, TypeHandle base, TypedObject child_object)
 Returns the parent of the indicated child class that is in a direct line of inheritance to the indicated ancestor class. More...
 
TypeHandle getRootClass (int n)
 Returns the nth root class in the system. More...
 
list getRootClasses ()
 
TypeHandle getTypehandle (int n)
 Returns the nth TypeHandle in the system. More...
 
list getTypehandles ()
 
bool isDerivedFrom (TypeHandle child, TypeHandle base, TypedObject child_object)
 Returns true if the first type is derived from the second type, false otherwise. More...
 
 recordAlternateName (TypeHandle type, str name)
 Indicates an alternate name for the same type. More...
 
 recordDerivation (TypeHandle child, TypeHandle parent)
 Records that the type referenced by child inherits directly from the type referenced by parent. More...
 
 recordPythonType (TypeHandle type, object python_type)
 Records the given Python type pointer in the type registry for the benefit of interrogate. More...
 
TypeHandle registerDynamicType (str name)
 Registers a new type on-the-fly, presumably at runtime. More...
 
 write (Ostream out)
 Makes an attempt to format the entire TypeRegistry in a nice way that shows the derivation tree as intelligently as possible. More...
 

Static Public Member Functions

static TypeRegistry ptr ()
 Returns the pointer to the global TypeRegistry object. More...
 
static reregisterTypes ()
 Walks through the TypeRegistry tree and makes sure that each type that was previously registered is still registered. More...
 

Public Attributes

TypeHandle root_classes []
 
TypeHandle typehandles []
 

Detailed Description

The TypeRegistry class maintains all the assigned TypeHandles in a given system.

There should be only one TypeRegistry class during the lifetime of the application. It will be created on the local heap initially, and it should be migrated to shared memory as soon as shared memory becomes available.

Member Function Documentation

◆ __init__()

__init__ ( const  TypeRegistry)

◆ findType()

TypeHandle findType ( str  name)

Looks for a previously-registered type of the given name.

Returns its TypeHandle if it exists, or TypeHandle::none() if there is no such type.

◆ findTypeById()

TypeHandle findTypeById ( int  id)

Looks for a previously-registered type with the given id number (as returned by TypeHandle::get_index()).

Returns its TypeHandle if it exists, or TypeHandle::none() if there is no such type.

◆ getChildClass()

TypeHandle getChildClass ( TypeHandle  child,
int  index 
)

Returns the nth child class of this type.

The index should be in the range 0 <= index < get_num_child_classes().

◆ getName()

str getName ( TypeHandle  type,
TypedObject  object 
)

Returns the name of the indicated type.

The "object" pointer is an optional pointer to the TypedObject class that owns this TypeHandle. It is only used in case the TypeHandle is inadvertantly undefined.

◆ getNumChildClasses()

int getNumChildClasses ( TypeHandle  child,
TypedObject  child_object 
)

Returns the number of child classes that the indicated type is known to have.

This may then be used to index into get_child_class().

The "object" pointer is an optional pointer to the TypedObject class that owns this TypeHandle. It is only used in case the TypeHandle is inadvertantly undefined.

◆ getNumParentClasses()

int getNumParentClasses ( TypeHandle  child,
TypedObject  child_object 
)

Returns the number of parent classes that the indicated type is known to have.

This may then be used to index into get_parent_class(). The result will be 0 if this class does not inherit from any other classes, 1 if normal, single inheritance is in effect, or greater than one if multiple inheritance is in effect.

The "object" pointer is an optional pointer to the TypedObject class that owns this TypeHandle. It is only used in case the TypeHandle is inadvertantly undefined.

◆ getNumRootClasses()

int getNumRootClasses ( )

Returns the number of root classes–that is, classes that do not inherit from any other classes–known in the system.

◆ getNumTypehandles()

int getNumTypehandles ( )

Returns the total number of unique TypeHandles in the system.

◆ getParentClass()

TypeHandle getParentClass ( TypeHandle  child,
int  index 
)

Returns the nth parent class of this type.

The index should be in the range 0 <= index < get_num_parent_classes().

◆ getParentTowards()

TypeHandle getParentTowards ( TypeHandle  child,
TypeHandle  base,
TypedObject  child_object 
)

Returns the parent of the indicated child class that is in a direct line of inheritance to the indicated ancestor class.

This is useful in the presence of multiple inheritance to try to determine what properties an unknown type may have.

The "object" pointer is an optional pointer to the TypedObject class that owns this TypeHandle. It is only used in case the TypeHandle is inadvertantly undefined.

◆ getRootClass()

TypeHandle getRootClass ( int  n)

Returns the nth root class in the system.

See get_num_root_classes().

◆ getRootClasses()

list getRootClasses ( )

◆ getTypehandle()

TypeHandle getTypehandle ( int  n)

Returns the nth TypeHandle in the system.

See get_num_typehandles().

◆ getTypehandles()

list getTypehandles ( )

◆ isDerivedFrom()

bool isDerivedFrom ( TypeHandle  child,
TypeHandle  base,
TypedObject  child_object 
)

Returns true if the first type is derived from the second type, false otherwise.

The "child_object" pointer is an optional pointer to the TypedObject class that owns the child TypeHandle. It is only used in case the TypeHandle is inadvertently undefined.

This function definition follows the definitions for look_up() and freshen_derivations() just to maximize the chance the the compiler will be able to inline the above functions. Yeah, a compiler shouldn't care, but there's a big different between "shouldn't" and "doesn't".

◆ ptr()

static TypeRegistry ptr ( )
static

Returns the pointer to the global TypeRegistry object.

◆ recordAlternateName()

recordAlternateName ( TypeHandle  type,
str  name 
)

Indicates an alternate name for the same type.

This is particularly useful when a type has changed names, since the type is stored in a Bam file by name; setting the original name as the alternate will allow the type to be correctly read from old Bam files.

◆ recordDerivation()

recordDerivation ( TypeHandle  child,
TypeHandle  parent 
)

Records that the type referenced by child inherits directly from the type referenced by parent.

In the event of multiple inheritance, this should be called once for each parent class.

◆ recordPythonType()

recordPythonType ( TypeHandle  type,
object  python_type 
)

Records the given Python type pointer in the type registry for the benefit of interrogate.

◆ registerDynamicType()

TypeHandle registerDynamicType ( str  name)

Registers a new type on-the-fly, presumably at runtime.

A new TypeHandle is returned if the typename was not seen before; otherwise the same TypeHandle that was last used for this typename is returned.

◆ reregisterTypes()

static reregisterTypes ( )
static

Walks through the TypeRegistry tree and makes sure that each type that was previously registered is still registered.

This seems to get broken in certain circumstances when compiled against libc5–it is as if the static initializer stomps on the _type_handle values of each class after they've been registered.

◆ write()

write ( Ostream  out)

Makes an attempt to format the entire TypeRegistry in a nice way that shows the derivation tree as intelligently as possible.

Member Data Documentation

◆ root_classes

TypeHandle root_classes[]

◆ typehandles

TypeHandle typehandles[]