Poor man's RTTI is mostly gone.
Some checks failed
CI / ubuntu-latest-html-tests (push) Has been cancelled
CI / ubuntu-latest-no-tls (push) Has been cancelled
CI / ubuntu-latest-mbedtls2 (push) Has been cancelled
CI / ubuntu-latest-openssl-3 (push) Has been cancelled
CI / ubuntu-latest-with-old-std (push) Has been cancelled
CI / ubuntu-20-04-openssl-1-1 (push) Has been cancelled
CI / alpine-mbedtls-3_6_0 (push) Has been cancelled
CI / macOS-13-openssl-1-1 (push) Has been cancelled
CI / macOS-13-openssl-3 (push) Has been cancelled
CI / freebsd-14-openssl-3 (push) Has been cancelled
CI / windows-mbedtls (push) Has been cancelled
Some checks failed
CI / ubuntu-latest-html-tests (push) Has been cancelled
CI / ubuntu-latest-no-tls (push) Has been cancelled
CI / ubuntu-latest-mbedtls2 (push) Has been cancelled
CI / ubuntu-latest-openssl-3 (push) Has been cancelled
CI / ubuntu-latest-with-old-std (push) Has been cancelled
CI / ubuntu-20-04-openssl-1-1 (push) Has been cancelled
CI / alpine-mbedtls-3_6_0 (push) Has been cancelled
CI / macOS-13-openssl-1-1 (push) Has been cancelled
CI / macOS-13-openssl-3 (push) Has been cancelled
CI / freebsd-14-openssl-3 (push) Has been cancelled
CI / windows-mbedtls (push) Has been cancelled
I'm keeping the type-index to name mapping, for now.
This commit is contained in:
@ -24,47 +24,7 @@
|
||||
namespace lout {
|
||||
namespace identity {
|
||||
|
||||
// ------------------------
|
||||
// IdentifiableObject
|
||||
// ------------------------
|
||||
|
||||
using namespace object;
|
||||
using namespace container::typed;
|
||||
|
||||
IdentifiableObject::Class::Class (IdentifiableObject::Class *parent, const std::type_index id,
|
||||
const char *className)
|
||||
: id( (std::intptr_t) id.name() )
|
||||
{
|
||||
this->parent = parent;
|
||||
this->className = className;
|
||||
}
|
||||
|
||||
void IdentifiableObject::Class::intoStringBuffer(misc::StringBuffer *sb)
|
||||
{
|
||||
sb->append ("<class ");
|
||||
sb->append (className);
|
||||
sb->append (" (");
|
||||
sb->appendInt (id);
|
||||
sb->append (")");
|
||||
|
||||
if (parent) {
|
||||
sb->append (", parent: ");
|
||||
parent->intoStringBuffer (sb);
|
||||
}
|
||||
|
||||
sb->append (">");
|
||||
}
|
||||
|
||||
std::map< std::string, std::unique_ptr< IdentifiableObject::Class > > IdentifiableObject::classesByName;
|
||||
|
||||
std::map< std::intptr_t, IdentifiableObject::Class * > IdentifiableObject::classesById;
|
||||
|
||||
IdentifiableObject::Class *IdentifiableObject::currentlyConstructedClass;
|
||||
|
||||
IdentifiableObject::IdentifiableObject ()
|
||||
{
|
||||
currentlyConstructedClass = NULL;
|
||||
}
|
||||
std::map< std::type_index, std::string > IdentifiableObject::classNames;
|
||||
|
||||
void IdentifiableObject::intoStringBuffer(misc::StringBuffer *sb)
|
||||
{
|
||||
@ -76,23 +36,12 @@ void IdentifiableObject::intoStringBuffer(misc::StringBuffer *sb)
|
||||
}
|
||||
|
||||
/**
|
||||
* \brief This method must be called in the constructor for the sub class.
|
||||
* See class comment for details.
|
||||
* Register a name for a class.
|
||||
*/
|
||||
void IdentifiableObject::registerName (const char *className, const std::type_index index, std::intptr_t *classId)
|
||||
void
|
||||
IdentifiableObject::registerName( const char *const className, const std::type_index index )
|
||||
{
|
||||
if (not classesByName.contains( className )) {
|
||||
classesByName.emplace( className,
|
||||
std::make_unique< Class >( currentlyConstructedClass, index, className ) );
|
||||
auto *const klass= classesByName.at( className ).get();
|
||||
classesById[ klass->id ]= klass;
|
||||
*classId = klass->id;
|
||||
}
|
||||
Class *const klass = classesByName.at( className ).get();
|
||||
|
||||
this->classId = klass->id;
|
||||
*classId = klass->id;
|
||||
currentlyConstructedClass = klass;
|
||||
classNames.insert( { index, className } );
|
||||
}
|
||||
|
||||
} // namespace identity
|
||||
|
||||
Reference in New Issue
Block a user