From 2a5b3632fb49452adb6ecedb9c678909341ef662 Mon Sep 17 00:00:00 2001 From: Andreas Stöckel Date: Wed, 15 Apr 2015 20:40:01 +0200 Subject: Derive structure entities and annotation entities from common base class to allow resolution for both --- src/core/model/Document.cpp | 32 +++++++++++++++++++++++++++----- 1 file changed, 27 insertions(+), 5 deletions(-) (limited to 'src/core/model/Document.cpp') diff --git a/src/core/model/Document.cpp b/src/core/model/Document.cpp index 411a755..3a076c4 100644 --- a/src/core/model/Document.cpp +++ b/src/core/model/Document.cpp @@ -598,7 +598,7 @@ bool StructureNode::doValidate(Logger &logger) const StructureNode::StructureNode(Manager &mgr, std::string name, Handle parent, const std::string &fieldName) - : Node(mgr, std::move(name), parent) + : DocumentNode(mgr, std::move(name), parent) { if (parent->isa(&RttiTypes::StructuredEntity)) { parent.cast()->addStructureNode(this, fieldName); @@ -611,7 +611,7 @@ StructureNode::StructureNode(Manager &mgr, std::string name, StructureNode::StructureNode(Manager &mgr, std::string name, Handle parent, size_t fieldIdx) - : Node(mgr, std::move(name), parent) + : DocumentNode(mgr, std::move(name), parent) { if (parent->isa(&RttiTypes::StructuredEntity)) { parent.cast()->addStructureNode(this, fieldIdx); @@ -622,6 +622,12 @@ StructureNode::StructureNode(Manager &mgr, std::string name, } } +StructureNode::StructureNode(Manager &mgr, std::string name, + Handle parent) + : DocumentNode(mgr, std::move(name), parent) +{ +} + /* Class StructuredEntity */ StructuredEntity::StructuredEntity(Manager &mgr, Handle doc, @@ -641,6 +647,13 @@ StructuredEntity::StructuredEntity(Manager &mgr, Handle parent, { } +void StructuredEntity::doResolve(ResolutionState &state) +{ + for (const auto &field : getFields()) { + continueResolveComposita(field, field.getIndex(), state); + } +} + bool StructuredEntity::doValidate(Logger &logger) const { bool valid = true; @@ -732,7 +745,7 @@ AnnotationEntity::AnnotationEntity(Manager &mgr, Handle parent, Handle descriptor, Handle start, Handle end, Variant attributes, std::string name) - : Node(mgr, std::move(name), parent), + : DocumentNode(mgr, std::move(name), parent), DocumentEntity(this, descriptor, attributes) { if (parent != nullptr) { @@ -742,6 +755,13 @@ AnnotationEntity::AnnotationEntity(Manager &mgr, Handle parent, setEnd(end); } +void AnnotationEntity::doResolve(ResolutionState &state) +{ + for (const auto &field : getFields()) { + continueResolveComposita(field, field.getIndex(), state); + } +} + bool AnnotationEntity::doValidate(Logger &logger) const { bool valid = true; @@ -986,8 +1006,10 @@ namespace RttiTypes { const Rtti Document = RttiBuilder("Document") .parent(&RootNode) .composedOf({&AnnotationEntity, &StructuredEntity}); +const Rtti DocumentNode = + RttiBuilder("DocumentNode").parent(&Node); const Rtti StructureNode = - RttiBuilder("StructureNode").parent(&Node); + RttiBuilder("StructureNode").parent(&DocumentNode); const Rtti StructuredEntity = RttiBuilder("StructuredEntity") .parent(&StructureNode) @@ -997,7 +1019,7 @@ const Rtti DocumentPrimitive = RttiBuilder( const Rtti Anchor = RttiBuilder("Anchor").parent(&StructureNode); const Rtti AnnotationEntity = RttiBuilder("AnnotationEntity") - .parent(&Node) + .parent(&DocumentNode) .composedOf({&StructuredEntity, &DocumentPrimitive, &Anchor}); } } -- cgit v1.2.3