From b6dbad5183f64368909d1e1e42ddcb323bc6e61c Mon Sep 17 00:00:00 2001 From: Andreas Stöckel Date: Tue, 6 Jan 2015 13:24:12 +0100 Subject: Using RttiBuilder to construct Rtti information --- src/core/model/Document.cpp | 28 +++++++++++++++------------- src/core/model/Domain.cpp | 20 ++++++++++++-------- src/core/model/Typesystem.cpp | 39 +++++++++++++++++++++------------------ 3 files changed, 48 insertions(+), 39 deletions(-) diff --git a/src/core/model/Document.cpp b/src/core/model/Document.cpp index b700ba4..f40e452 100644 --- a/src/core/model/Document.cpp +++ b/src/core/model/Document.cpp @@ -191,19 +191,21 @@ Rooted DocumentPrimitive::buildEntity( } namespace RttiTypes { -const Rtti Document{ - "Document", {&Node}, {&AnnotationEntity, &StructuredEntity}}; -const Rtti DocumentEntity{"DocumentEntity", {&Node}}; -const Rtti AnnotationEntity{ - "AnnotationEntity", {&DocumentEntity}, {&StructuredEntity}}; -const Rtti StructuredEntity{ - "StructuredEntity", - {&DocumentEntity}, - {&StructuredEntity, &Anchor, &DocumentPrimitive}}; -const Rtti DocumentPrimitive{"DocumentPrimitive", - {&StructuredEntity}}; -const Rtti Anchor{"Anchor", - {&StructuredEntity}}; +const Rtti DocumentEntity = + RttiBuilder("DocumentEntity").parent(&Node); +const Rtti Document = + RttiBuilder("Document").parent(&Node).composedOf( + {&AnnotationEntity, &StructuredEntity}); +const Rtti AnnotationEntity = + RttiBuilder("AnnotationEntity").parent(&DocumentEntity).composedOf( + &StructuredEntity); +const Rtti StructuredEntity = + RttiBuilder("StructuredEntity").parent(&DocumentEntity).composedOf( + {&StructuredEntity, &Anchor, &DocumentPrimitive}); +const Rtti DocumentPrimitive = + RttiBuilder("DocumentPrimitive").parent(&StructuredEntity); +const Rtti Anchor = + RttiBuilder("Anchor").parent(&StructuredEntity); } } diff --git a/src/core/model/Domain.cpp b/src/core/model/Domain.cpp index f9e2a55..e2aaba4 100644 --- a/src/core/model/Domain.cpp +++ b/src/core/model/Domain.cpp @@ -82,14 +82,18 @@ void Domain::doResolve(std::vector> &res, /* Type registrations */ namespace RttiTypes { -const Rtti FieldDescriptor{"FieldDescriptor", {&Node}}; -const Rtti Descriptor{"Descriptor", {&Node}}; -const Rtti StructuredClass{ - "StructuredClass", {&Descriptor}, {&FieldDescriptor}}; -const Rtti AnnotationClass{"AnnotationClass", - {&Descriptor}}; -const Rtti Domain{ - "Domain", {&Node}, {&StructuredClass, &AnnotationClass}}; +const Rtti FieldDescriptor = + RttiBuilder("FieldDescriptor").parent(&Node); +const Rtti Descriptor = + RttiBuilder("Descriptor").parent(&Node); +const Rtti StructuredClass = + RttiBuilder("StructuredClass").parent(&Descriptor).composedOf( + &FieldDescriptor); +const Rtti AnnotationClass = + RttiBuilder("AnnotationClass").parent(&Descriptor); +const Rtti Domain = + RttiBuilder("Domain").parent(&Node).composedOf( + {&StructuredClass, &AnnotationClass}); } } diff --git a/src/core/model/Typesystem.cpp b/src/core/model/Typesystem.cpp index 2945635..a852294 100644 --- a/src/core/model/Typesystem.cpp +++ b/src/core/model/Typesystem.cpp @@ -438,24 +438,27 @@ SystemTypesystem::SystemTypesystem(Manager &mgr) /* RTTI type registrations */ namespace RttiTypes { -const Rtti Type{"Type", {&Node}}; -const Rtti StringType{"StringType", {&Type}}; -const Rtti IntType{"IntType", {&Type}}; -const Rtti DoubleType{"DoubleType", {&Type}}; -const Rtti BoolType{"BoolType", {&Type}}; -const Rtti EnumType{"EnumType", {&Type}}; -const Rtti StructType{"StructType", {&Type}, {&Attribute}}; -const Rtti ArrayType{"ArrayType", {&Type}}; -const Rtti UnknownType{"UnknownType", {&Type}}; -const Rtti Constant{"Constant", {&Node}}; -const Rtti Attribute{"Attribute", {&Node}}; -const Rtti Typesystem{ - "Typesystem", - {&Node}, - {&StringType, &IntType, &DoubleType, &BoolType, &EnumType, &StructType, - &Constant}}; -const Rtti SystemTypesystem{"SystemTypesystem", - {&Typesystem}}; +const Rtti Type = RttiBuilder("Type").parent(&Node); +const Rtti StringType = + RttiBuilder("StringType").parent(&Type); +const Rtti IntType = RttiBuilder("IntType").parent(&Type); +const Rtti DoubleType = + RttiBuilder("DoubleType").parent(&Type); +const Rtti BoolType = RttiBuilder("BoolType").parent(&Type); +const Rtti EnumType = RttiBuilder("EnumType").parent(&Type); +const Rtti StructType = + RttiBuilder("StructType").parent(&Type).composedOf(&Attribute); +const Rtti ArrayType = RttiBuilder("ArrayType").parent(&Type); +const Rtti UnknownType = + RttiBuilder("UnknownType").parent(&Type); +const Rtti Constant = RttiBuilder("Constant").parent(&Node); +const Rtti Attribute = RttiBuilder("Attribute").parent(&Node); +const Rtti Typesystem = + RttiBuilder("Typesystem").parent(&Node).composedOf( + {&StringType, &IntType, &DoubleType, &BoolType, &EnumType, &StructType, + &Constant}); +const Rtti SystemTypesystem = + RttiBuilder("SystemTypesystem").parent(&Typesystem); } } -- cgit v1.2.3