Merge pull request #19583 from hyarion/refactor/base-type

Refactor Base::Type
This commit is contained in:
Chris Hennes
2025-03-17 00:03:22 -05:00
committed by GitHub
23 changed files with 174 additions and 159 deletions

View File

@@ -57,11 +57,11 @@ App::PropertyData App::Extension::propertyData;
void App::Extension::init()
{
assert(Extension::classTypeId == Base::Type::badType() && "don't init() twice!");
assert(Extension::classTypeId.isBad() && "don't init() twice!");
/* Set up entry in the type system. */
Extension::classTypeId =
Base::Type::createType(Base::Type::badType(), "App::Extension", Extension::create);
Base::Type::createType(Base::Type::BadType, "App::Extension", Extension::create);
}
using namespace App;
@@ -194,11 +194,11 @@ void Extension::initExtensionSubclass(Base::Type& toInit,
Base::Type::instantiationMethod method)
{
// don't init twice!
assert(toInit == Base::Type::badType());
assert(toInit.isBad());
// get the parent class
Base::Type parentType(Base::Type::fromName(ParentName));
// forgot init parent!
assert(parentType != Base::Type::badType());
assert(!parentType.isBad());
// create the new type
toInit = Base::Type::createType(parentType, ClassName, method);

View File

@@ -59,7 +59,7 @@ private: \
#define EXTENSION_TYPESYSTEM_SOURCE_P(_class_) \
Base::Type _class_::getExtensionClassTypeId(void) { return _class_::classTypeId; } \
Base::Type _class_::getExtensionTypeId(void) const { return _class_::classTypeId; } \
Base::Type _class_::classTypeId = Base::Type::badType(); \
Base::Type _class_::classTypeId = Base::Type::BadType; \
void * _class_::create(void){\
return new _class_ ();\
}
@@ -68,7 +68,7 @@ void * _class_::create(void){\
#define EXTENSION_TYPESYSTEM_SOURCE_ABSTRACT_P(_class_) \
Base::Type _class_::getExtensionClassTypeId(void) { return _class_::classTypeId; } \
Base::Type _class_::getExtensionTypeId(void) const { return _class_::classTypeId; } \
Base::Type _class_::classTypeId = Base::Type::badType(); \
Base::Type _class_::classTypeId = Base::Type::BadType; \
void * _class_::create(void){return 0;}
/// define to implement a subclass of Base::BaseClass
@@ -79,7 +79,7 @@ void _class_::init(void){\
}
#define EXTENSION_TYPESYSTEM_SOURCE_TEMPLATE(_class_) \
template<> Base::Type _class_::classTypeId = Base::Type::badType(); \
template<> Base::Type _class_::classTypeId = Base::Type::BadType; \
template<> Base::Type _class_::getExtensionClassTypeId(void) { return _class_::classTypeId; } \
template<> Base::Type _class_::getExtensionTypeId(void) const { return _class_::classTypeId; } \
template<> void * _class_::create(void){\

View File

@@ -363,7 +363,7 @@ Base::Type ProjectFile::getTypeId(const std::string& name) const
// <Object type="Mesh::MeshFeature" name="Mesh" />
// <Objects/>
if (!xmlDocument) {
return Base::Type::badType();
return Base::Type::BadType;
}
DOMNodeList* nodes = xmlDocument->getElementsByTagName(XStrLiteral("Objects").unicodeForm());
@@ -388,7 +388,7 @@ Base::Type ProjectFile::getTypeId(const std::string& name) const
}
}
return Base::Type::badType();
return Base::Type::BadType;
}
std::list<ProjectFile::PropertyFile> ProjectFile::getPropertyFiles(const std::string& name) const

View File

@@ -382,7 +382,7 @@ void _class_::init(void){\
}
#define TYPESYSTEM_SOURCE_TEMPLATE(_class_) \
template<> Base::Type _class_::classTypeId = Base::Type::badType(); \
template<> Base::Type _class_::classTypeId = Base::Type::BadType; \
template<> Base::Type _class_::getClassTypeId(void) { return _class_::classTypeId; } \
template<> Base::Type _class_::getTypeId(void) const { return _class_::classTypeId; } \
template<> void * _class_::create(void){\

View File

@@ -3453,17 +3453,10 @@ unsigned int PropertyPersistentObject::getMemSize() const
void PropertyPersistentObject::setValue(const char* type)
{
if (!type) {
type = "";
}
if (type[0]) {
Base::Type::importModule(type);
Base::Type t = Base::Type::fromName(type);
if (!Base::Tools::isNullOrEmpty(type)) {
Base::Type t = Base::Type::getTypeIfDerivedFrom(type, Persistence::getClassTypeId());
if (t.isBad()) {
throw Base::TypeError("Invalid type");
}
if (!t.isDerivedFrom(Persistence::getClassTypeId())) {
throw Base::TypeError("Type must be derived from Base::Persistence");
throw Base::TypeError("Invalid type or type must be derived from Base::Persistence");
}
if (_pObject && _pObject->getTypeId() == t) {
return;