diff --git a/dw/alignedtablecell.cc b/dw/alignedtablecell.cc index 04d0701..4e8f07f 100644 --- a/dw/alignedtablecell.cc +++ b/dw/alignedtablecell.cc @@ -27,13 +27,13 @@ using namespace lout; namespace dw { -int AlignedTableCell::CLASS_ID = -1; +std::intptr_t AlignedTableCell::CLASS_ID = -1; AlignedTableCell::AlignedTableCell (AlignedTableCell *ref, bool limitTextWidth): AlignedTextblock (limitTextWidth) { DBG_OBJ_CREATE ("dw::AlignedTableCell"); - registerName ("dw::AlignedTableCell", &CLASS_ID); + registerName ("dw::AlignedTableCell", typeid(*this), &CLASS_ID); /** \bug ignoreLine1OffsetSometimes does not work? */ //ignoreLine1OffsetSometimes = true; diff --git a/dw/alignedtablecell.hh b/dw/alignedtablecell.hh index 820256c..ad235d9 100644 --- a/dw/alignedtablecell.hh +++ b/dw/alignedtablecell.hh @@ -33,7 +33,7 @@ protected: void setMaxValue (int maxValue, int value); public: - static int CLASS_ID; + static std::intptr_t CLASS_ID; AlignedTableCell(AlignedTableCell *ref, bool limitTextWidth); ~AlignedTableCell(); diff --git a/dw/alignedtextblock.cc b/dw/alignedtextblock.cc index 2f530d6..81fa51d 100644 --- a/dw/alignedtextblock.cc +++ b/dw/alignedtextblock.cc @@ -58,13 +58,13 @@ void AlignedTextblock::List::unref(int pos) delete this; } -int AlignedTextblock::CLASS_ID = -1; +std::intptr_t AlignedTextblock::CLASS_ID = -1; AlignedTextblock::AlignedTextblock (bool limitTextWidth): Textblock (limitTextWidth) { DBG_OBJ_CREATE ("dw::AlignedTextblock"); - registerName ("dw::AlignedTextblock", &CLASS_ID); + registerName ("dw::AlignedTextblock", typeid(*this), &CLASS_ID); } void AlignedTextblock::setRefTextblock (AlignedTextblock *ref) diff --git a/dw/alignedtextblock.hh b/dw/alignedtextblock.hh index c0b392d..a499ad9 100644 --- a/dw/alignedtextblock.hh +++ b/dw/alignedtextblock.hh @@ -51,7 +51,7 @@ protected: void updateValue (); public: - static int CLASS_ID; + static std::intptr_t CLASS_ID; ~AlignedTextblock(); }; diff --git a/dw/image.cc b/dw/image.cc index 2c4f632..df04615 100644 --- a/dw/image.cc +++ b/dw/image.cc @@ -131,12 +131,12 @@ int ImageMapsList::link (object::Object *key, int x, int y) // ---------------------------------------------------------------------- -int Image::CLASS_ID = -1; +std::intptr_t Image::CLASS_ID = -1; Image::Image(const char *altText) { DBG_OBJ_CREATE ("dw::Image"); - registerName ("dw::Image", &CLASS_ID); + registerName ("dw::Image", typeid(*this), &CLASS_ID); this->altText = altText ? dStrdup (altText) : NULL; altTextWidth = -1; // not yet calculated buffer = NULL; diff --git a/dw/image.hh b/dw/image.hh index fab660b..b1d8e7d 100644 --- a/dw/image.hh +++ b/dw/image.hh @@ -145,7 +145,7 @@ protected: //core::Iterator *iterator (Content::Type mask, bool atEnd); public: - static int CLASS_ID; + static std::intptr_t CLASS_ID; Image(const char *altText); ~Image(); diff --git a/dw/listitem.cc b/dw/listitem.cc index a720630..23aa5e0 100644 --- a/dw/listitem.cc +++ b/dw/listitem.cc @@ -25,13 +25,13 @@ namespace dw { -int ListItem::CLASS_ID = -1; +std::intptr_t ListItem::CLASS_ID = -1; ListItem::ListItem (ListItem *ref, bool limitTextWidth): AlignedTextblock (limitTextWidth) { DBG_OBJ_CREATE ("dw::ListItem"); - registerName ("dw::ListItem", &CLASS_ID); + registerName ("dw::ListItem", typeid(*this), &CLASS_ID); setRefTextblock (ref); } diff --git a/dw/listitem.hh b/dw/listitem.hh index eca052f..e0b7780 100644 --- a/dw/listitem.hh +++ b/dw/listitem.hh @@ -13,7 +13,7 @@ protected: void setMaxValue (int maxValue, int value); public: - static int CLASS_ID; + static std::intptr_t CLASS_ID; ListItem(ListItem *ref, bool limitTextWidth); ~ListItem(); diff --git a/dw/oofawarewidget.cc b/dw/oofawarewidget.cc index 139d3a6..d92bff4 100644 --- a/dw/oofawarewidget.cc +++ b/dw/oofawarewidget.cc @@ -38,12 +38,12 @@ const char *OOFAwareWidget::OOFM_NAME[NUM_OOFM] = { "FLOATS", "ABSOLUTE", "RELATIVE", "FIXED" }; -int OOFAwareWidget::CLASS_ID = -1; +std::intptr_t OOFAwareWidget::CLASS_ID = -1; OOFAwareWidget::OOFAwareWidget () { DBG_OBJ_CREATE ("dw::oof::OOFAwareWidget"); - registerName ("dw::oof::OOFAwareWidget", &CLASS_ID); + registerName ("dw::oof::OOFAwareWidget", typeid(*this), &CLASS_ID); for (int i = 0; i < NUM_OOFM; i++) { oofContainer[i] = NULL; diff --git a/dw/oofawarewidget.hh b/dw/oofawarewidget.hh index 5e67ad0..76f4412 100644 --- a/dw/oofawarewidget.hh +++ b/dw/oofawarewidget.hh @@ -195,7 +195,7 @@ public: SL_START, SL_BACKGROUND, SL_SC_BOTTOM, SL_IN_FLOW, SL_OOF_REF, SL_OOF_CONT, SL_SC_TOP, SL_END }; - static int CLASS_ID; + static std::intptr_t CLASS_ID; OOFAwareWidget (); ~OOFAwareWidget (); diff --git a/dw/regardingborder.cc b/dw/regardingborder.cc index c3f04bc..c5ba83c 100644 --- a/dw/regardingborder.cc +++ b/dw/regardingborder.cc @@ -23,12 +23,12 @@ namespace dw { -int RegardingBorder::CLASS_ID = -1; +std::intptr_t RegardingBorder::CLASS_ID = -1; RegardingBorder::RegardingBorder () { DBG_OBJ_CREATE ("dw::RegardingBorder"); - registerName ("dw::RegardingBorder", &CLASS_ID); + registerName ("dw::RegardingBorder", typeid(*this), &CLASS_ID); } RegardingBorder::~RegardingBorder () diff --git a/dw/regardingborder.hh b/dw/regardingborder.hh index e2348c9..cfb2aad 100644 --- a/dw/regardingborder.hh +++ b/dw/regardingborder.hh @@ -13,7 +13,7 @@ namespace dw { class RegardingBorder: public oof::OOFAwareWidget { public: - static int CLASS_ID; + static std::intptr_t CLASS_ID; RegardingBorder (); ~RegardingBorder (); diff --git a/dw/ruler.cc b/dw/ruler.cc index 0de6bc6..ae7cc06 100644 --- a/dw/ruler.cc +++ b/dw/ruler.cc @@ -26,12 +26,12 @@ namespace dw { -int Ruler::CLASS_ID = -1; +std::intptr_t Ruler::CLASS_ID = -1; Ruler::Ruler () { DBG_OBJ_CREATE ("dw::Ruler"); - registerName ("dw::Ruler", &CLASS_ID); + registerName ("dw::Ruler", typeid(*this), &CLASS_ID); } Ruler::~Ruler () diff --git a/dw/ruler.hh b/dw/ruler.hh index 74e163f..b6c7cc9 100644 --- a/dw/ruler.hh +++ b/dw/ruler.hh @@ -30,7 +30,7 @@ protected: core::GettingWidgetAtPointContext *context); public: - static int CLASS_ID; + static std::intptr_t CLASS_ID; Ruler (); ~Ruler (); diff --git a/dw/simpletablecell.cc b/dw/simpletablecell.cc index 3b37d8b..4beb111 100644 --- a/dw/simpletablecell.cc +++ b/dw/simpletablecell.cc @@ -27,13 +27,13 @@ using namespace lout; namespace dw { -int SimpleTableCell::CLASS_ID = -1; +std::intptr_t SimpleTableCell::CLASS_ID = -1; SimpleTableCell::SimpleTableCell (bool limitTextWidth): Textblock (limitTextWidth) { DBG_OBJ_CREATE ("dw::SimpleTableCell"); - registerName ("dw::SimpleTableCell", &CLASS_ID); + registerName ("dw::SimpleTableCell", typeid(*this), &CLASS_ID); } SimpleTableCell::~SimpleTableCell() diff --git a/dw/simpletablecell.hh b/dw/simpletablecell.hh index dc5ccaf..ed3525c 100644 --- a/dw/simpletablecell.hh +++ b/dw/simpletablecell.hh @@ -24,7 +24,7 @@ protected: bool adjustExtraSpaceWhenCorrectingRequisitionByOOF (); public: - static int CLASS_ID; + static std::intptr_t CLASS_ID; SimpleTableCell (bool limitTextWidth); ~SimpleTableCell (); diff --git a/dw/table.cc b/dw/table.cc index edf5f96..14213d8 100644 --- a/dw/table.cc +++ b/dw/table.cc @@ -29,12 +29,12 @@ using namespace lout; namespace dw { bool Table::adjustTableMinWidth = true; -int Table::CLASS_ID = -1; +std::intptr_t Table::CLASS_ID = -1; Table::Table(bool limitTextWidth) { DBG_OBJ_CREATE ("dw::Table"); - registerName ("dw::Table", &CLASS_ID); + registerName ("dw::Table", typeid(*this), &CLASS_ID); setButtonSensitive(false); this->limitTextWidth = limitTextWidth; diff --git a/dw/table.hh b/dw/table.hh index 1db9468..866ff85 100644 --- a/dw/table.hh +++ b/dw/table.hh @@ -492,7 +492,7 @@ protected: void removeChild (Widget *child); public: - static int CLASS_ID; + static std::intptr_t CLASS_ID; inline static void setAdjustTableMinWidth (bool adjustTableMinWidth) { Table::adjustTableMinWidth = adjustTableMinWidth; } diff --git a/dw/textblock.cc b/dw/textblock.cc index e7ae70e..78b1a9b 100644 --- a/dw/textblock.cc +++ b/dw/textblock.cc @@ -43,7 +43,7 @@ using namespace lout::unicode; namespace dw { -int Textblock::CLASS_ID = -1; +std::intptr_t Textblock::CLASS_ID = -1; Textblock::WordImgRenderer::WordImgRenderer (Textblock *textblock, int wordNo) @@ -206,7 +206,7 @@ void Textblock::setStretchabilityFactor (int stretchabilityFactor) Textblock::Textblock (bool limitTextWidth, bool treatAsInline) { DBG_OBJ_CREATE ("dw::Textblock"); - registerName ("dw::Textblock", &CLASS_ID); + registerName ("dw::Textblock", typeid(*this), &CLASS_ID); setButtonSensitive(true); hasListitemValue = false; diff --git a/dw/textblock.hh b/dw/textblock.hh index 6ec8469..30d18d8 100644 --- a/dw/textblock.hh +++ b/dw/textblock.hh @@ -864,7 +864,7 @@ protected: int getGeneratorRest (int oofmIndex); public: - static int CLASS_ID; + static std::intptr_t CLASS_ID; static void setPenaltyHyphen (int penaltyHyphen); static void setPenaltyHyphen2 (int penaltyHyphen2); diff --git a/dw/ui.cc b/dw/ui.cc index 3364cc4..9fd6add 100644 --- a/dw/ui.cc +++ b/dw/ui.cc @@ -32,12 +32,12 @@ namespace ui { using namespace lout; using namespace lout::object; -int Embed::CLASS_ID = -1; +std::intptr_t Embed::CLASS_ID = -1; Embed::Embed(Resource *resource) { DBG_OBJ_CREATE ("dw::core::ui::Embed"); - registerName ("dw::core::ui::Embed", &CLASS_ID); + registerName ("dw::core::ui::Embed", typeid(*this), &CLASS_ID); this->resource = resource; resource->setEmbed (this); DBG_OBJ_ASSOC_CHILD (resource); diff --git a/dw/ui.hh b/dw/ui.hh index 14c7268..46bde3b 100644 --- a/dw/ui.hh +++ b/dw/ui.hh @@ -251,7 +251,7 @@ protected: bool buttonPressImpl (core::EventButton *event); public: - static int CLASS_ID; + static std::intptr_t CLASS_ID; Embed(Resource *resource); ~Embed(); diff --git a/dw/widget.cc b/dw/widget.cc index 8eda39e..27e53d6 100644 --- a/dw/widget.cc +++ b/dw/widget.cc @@ -73,12 +73,12 @@ void Widget::WidgetImgRenderer::draw (int x, int y, int width, int height) // ---------------------------------------------------------------------- bool Widget::adjustMinWidth = true; -int Widget::CLASS_ID = -1; +std::intptr_t Widget::CLASS_ID = -1; Widget::Widget () { DBG_OBJ_CREATE ("dw::core::Widget"); - registerName ("dw::core::Widget", &CLASS_ID); + registerName ("dw::core::Widget", typeid(*this), &CLASS_ID); DBG_OBJ_ASSOC_CHILD (&requisitionParams); DBG_OBJ_ASSOC_CHILD (&extremesParams); diff --git a/dw/widget.hh b/dw/widget.hh index 63425e9..9dbd9cd 100644 --- a/dw/widget.hh +++ b/dw/widget.hh @@ -458,7 +458,7 @@ private: public: - static int CLASS_ID; + static std::intptr_t CLASS_ID; inline static void setAdjustMinWidth (bool adjustMinWidth) { Widget::adjustMinWidth = adjustMinWidth; } diff --git a/lout/identity.cc b/lout/identity.cc index 08f3722..db63f1a 100644 --- a/lout/identity.cc +++ b/lout/identity.cc @@ -31,11 +31,11 @@ namespace identity { using namespace object; using namespace container::typed; -IdentifiableObject::Class::Class (IdentifiableObject::Class *parent, int id, +IdentifiableObject::Class::Class (IdentifiableObject::Class *parent, const std::type_index id, const char *className) + : id( (std::intptr_t) id.name() ) { this->parent = parent; - this->id = id; this->className = className; } @@ -57,7 +57,7 @@ void IdentifiableObject::Class::intoStringBuffer(misc::StringBuffer *sb) std::map< std::string, std::unique_ptr< IdentifiableObject::Class > > IdentifiableObject::classesByName; -std::vector< IdentifiableObject::Class * > IdentifiableObject::classesById; +std::map< std::intptr_t, IdentifiableObject::Class * > IdentifiableObject::classesById; IdentifiableObject::Class *IdentifiableObject::currentlyConstructedClass; @@ -79,13 +79,13 @@ void IdentifiableObject::intoStringBuffer(misc::StringBuffer *sb) * \brief This method must be called in the constructor for the sub class. * See class comment for details. */ -void IdentifiableObject::registerName (const char *className, int *classId) +void IdentifiableObject::registerName (const char *className, const std::type_index index, std::intptr_t *classId) { if (not classesByName.contains( className )) { classesByName.emplace( className, - std::make_unique< Class >( currentlyConstructedClass, classesById.size(), className ) ); + std::make_unique< Class >( currentlyConstructedClass, index, className ) ); auto *const klass= classesByName.at( className ).get(); - classesById.push_back( klass ); + classesById[ klass->id ]= klass; *classId = klass->id; } Class *const klass = classesByName.at( className ).get(); @@ -99,7 +99,7 @@ void IdentifiableObject::registerName (const char *className, int *classId) * \brief Returns, whether this class is an instance of the class, given by * \em otherClassId, or of a sub class of this class. */ -bool IdentifiableObject::instanceOf (int otherClassId) +bool IdentifiableObject::instanceOf (std::intptr_t otherClassId) { if (otherClassId == -1) // Other class has not been registered yet, while it should have been, diff --git a/lout/identity.hh b/lout/identity.hh index 3a14056..aea9952 100644 --- a/lout/identity.hh +++ b/lout/identity.hh @@ -2,6 +2,7 @@ #define __LOUT_OBJECTX_HH__ #include +#include #include #include @@ -106,22 +107,22 @@ private: { public: Class *parent; - int id; + std::intptr_t id; const char *className; - Class (Class *parent, int id, const char *className); + Class (Class *parent, std::type_index id, const char *className); void intoStringBuffer(misc::StringBuffer *sb); }; static std::map< std::string, std::unique_ptr< Class > > classesByName; - static std::vector< Class * > classesById; + static std::map< std::intptr_t, Class * > classesById; static Class *currentlyConstructedClass; - int classId; + std::intptr_t classId; protected: - void registerName (const char *className, int *classId); + void registerName (const char *className, std::type_index index, std::intptr_t *classId); public: IdentifiableObject (); @@ -134,7 +135,7 @@ public: * This is rarely used, rather, tests with * identity::IdentifiableObject::instanceOf are done. */ - int getClassId () { return classId; } + std::intptr_t getClassId () { return classId; } /** * \brief Return the name, under which the class of this object was @@ -142,7 +143,7 @@ public: */ const char *getClassName() { return classesById.at( classId )->className; } - bool instanceOf (int otherClassId); + bool instanceOf (std::intptr_t otherClassId); }; } // namespace identity