Dillo
|
Instances of classes, which are sub classes of this class, may be identified at run-time. More...
#include <identity.hh>
Classes | |
class | Class |
Public Member Functions | |
IdentifiableObject () | |
void | intoStringBuffer (misc::StringBuffer *sb) |
Store a textual representation of the object in a misc::StringBuffer. More... | |
int | getClassId () |
Returns the class identifier. More... | |
const char * | getClassName () |
Return the name, under which the class of this object was registered. More... | |
bool | instanceOf (int otherClassId) |
Returns, whether this class is an instance of the class, given by otherClassId, or of a sub class of this class. More... | |
Public Member Functions inherited from lout::object::Object | |
virtual | ~Object () |
The destructor is defined as virtual (but not abstract), so that destruction of Object's works properly. More... | |
virtual bool | equals (Object *other) |
Returns, whether two objects are equal. More... | |
virtual int | hashValue () |
Return a hash value for the object. More... | |
virtual Object * | clone () |
Return an exact copy of the object. More... | |
const char * | toString () |
Use object::Object::intoStringBuffer to return a textual representation of the object. More... | |
virtual size_t | sizeOf () |
Return the number of bytes, this object totally uses. More... | |
Protected Member Functions | |
void | registerName (const char *className, int *classId) |
This method must be called in the constructor for the sub class. See class comment for details. More... | |
Private Attributes | |
int | classId |
Static Private Attributes | |
static container::typed::HashTable < object::ConstString, Class > * | classesByName |
static container::typed::Vector < Class > * | classesById |
static Class * | currentlyConstructedClass |
Instances of classes, which are sub classes of this class, may be identified at run-time.
Since e.g. dw::Textblock is a sub class of IdentifiableObject, and implemented in the correct way (as described below), for any given IdentifiableObject the following test can be done:
isATextblock is true, when o is an instance of dw::Textblock, or of a sub class of dw::Textblock. Otherwise, isATextblock is false.
It is also possible to get the class identifier of an identity::IdentifiableObject, e.g.
would result in true, if o is an instance of dw::Textblock, but not an instance of a sub class of dw::Textblock.
Each direct or indirect sub class of IdentifiableObject must
After this, class::CLASS_ID refers to a number, which denotes the class. (If this is still -1, since the class has not yet been instantiated, any test will fail, which is correct.)
If there are some classes like this:
and first, an instance of A, and then an instance of C is created, there will be the following calls of functions and constructors:
From this, the class hierarchy above can easily constructed, and stored in identity::IdentifiableObject::classesByName and in identity::IdentifiableObject::classesById. See the code for details.
N.b. Multiple inheritance is not supported, the construction of the tree would become confused.
lout::identity::IdentifiableObject::IdentifiableObject | ( | ) |
|
inline |
Returns the class identifier.
This is rarely used, rather, tests with identity::IdentifiableObject::instanceOf are done.
References classId.
|
inline |
Return the name, under which the class of this object was registered.
References lout::identity::IdentifiableObject::Class::className, and lout::container::typed::Vector< T >::get().
Referenced by dw::core::Iterator::intoStringBuffer(), and dw::core::Content::intoStringBuffer().
bool lout::identity::IdentifiableObject::instanceOf | ( | int | otherClassId | ) |
Returns, whether this class is an instance of the class, given by otherClassId, or of a sub class of this class.
References lout::identity::IdentifiableObject::Class::parent.
Referenced by dw::Textblock::addWidget(), dw::oof::OOFPosRelMgr::calcWidgetRefSize(), dw::Table::getCellRef(), and dw::oof::OOFAwareWidget::isOOFContainer().
|
virtual |
Store a textual representation of the object in a misc::StringBuffer.
This is used by object::Object::toString.
Reimplemented from lout::object::Object.
References lout::misc::StringBuffer::append(), and lout::misc::StringBuffer::appendPointer().
Referenced by dw::Textblock::TextblockIterator::highlight(), and dw::Textblock::TextblockIterator::unhighlight().
|
protected |
This method must be called in the constructor for the sub class. See class comment for details.
References lout::identity::IdentifiableObject::Class::id.
Referenced by dw::AlignedTableCell::AlignedTableCell(), dw::AlignedTextblock::AlignedTextblock(), dw::ListItem::ListItem(), dw::RegardingBorder::RegardingBorder(), dw::Ruler::Ruler(), and dw::SimpleTableCell::SimpleTableCell().
|
staticprivate |
|
staticprivate |
|
private |
Referenced by getClassId().
|
staticprivate |