Panda3D
Loading...
Searching...
No Matches
typeRegistryNode.I
Go to the documentation of this file.
1/**
2 * PANDA 3D SOFTWARE
3 * Copyright (c) Carnegie Mellon University. All rights reserved.
4 *
5 * All use of this software is subject to the terms of the revised BSD
6 * license. You should have received a copy of this license along
7 * with this source code in a file named "LICENSE."
8 *
9 * @file typeRegistryNode.I
10 * @author drose
11 * @date 2001-08-06
12 */
13
14/**
15 * Returns the Python type object associated with this node.
16 */
17INLINE PyObject *TypeRegistryNode::
18get_python_type() const {
19 if (_python_type != nullptr || _parent_classes.empty()) {
20 return _python_type;
21 } else {
22 // Recurse through parent classes.
23 return r_get_python_type();
24 }
25}
26
27/**
28 *
29 */
30INLINE TypeRegistryNode::Inherit::
31Inherit() {
32 _top = nullptr;
33 _mask = 0;
34 _bits = 0;
35}
36
37/**
38 *
39 */
40INLINE TypeRegistryNode::Inherit::
41Inherit(TypeRegistryNode *top, int bit_count,
42 TypeRegistryNode::SubtreeMaskType bits) {
43 assert(bit_count < (int)(sizeof(SubtreeMaskType) * 8));
44 _top = top;
45
46 // Build a bitmask consisting of bit_count low-order bits.
47 _mask = ((SubtreeMaskType)1 << bit_count) - 1;
48
49 // There shouldn't be anything but zeroes after bit_count bits.
50 assert((bits & ~_mask) == 0);
51 _bits = bits;
52}
53
54/**
55 *
56 */
57INLINE TypeRegistryNode::Inherit::
58Inherit(const TypeRegistryNode::Inherit &copy) :
59 _top(copy._top),
60 _mask(copy._mask),
61 _bits(copy._bits)
62{
63}
64
65/**
66 *
67 */
68INLINE void TypeRegistryNode::Inherit::
69operator = (const TypeRegistryNode::Inherit &copy) {
70 _top = copy._top;
71 _mask = copy._mask;
72 _bits = copy._bits;
73}
74
75/**
76 *
77 */
78INLINE bool TypeRegistryNode::Inherit::
79operator < (const Inherit &other) const {
80 return _top < other._top;
81}
82
83/**
84 * Assuming the two Inherit objects share the same subtree top, this returns
85 * true if the bitmasks indicate that child inherits from base, or false
86 * otherwise.
87 */
88INLINE bool TypeRegistryNode::Inherit::
89is_derived_from(const TypeRegistryNode::Inherit &child,
90 const TypeRegistryNode::Inherit &base) {
91 assert(child._top == base._top);
92
93 // Child derives from base if and only if its subtree mask contains more
94 // bits (or the same number of bits), and the n low-order subtree bits that
95 // are in common are identical.
96 return ((child._mask & base._mask) == base._mask &&
97 (child._bits & base._mask) == base._bits);
98}
This is a single entry in the TypeRegistry.
PyObject * get_python_type() const
Returns the Python type object associated with this node.