summaryrefslogtreecommitdiff
path: root/src/core/model/Document.hpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/core/model/Document.hpp')
-rw-r--r--src/core/model/Document.hpp30
1 files changed, 22 insertions, 8 deletions
diff --git a/src/core/model/Document.hpp b/src/core/model/Document.hpp
index b4ee429..15d002c 100644
--- a/src/core/model/Document.hpp
+++ b/src/core/model/Document.hpp
@@ -144,6 +144,12 @@ class DocumentEntity {
friend StructureNode;
private:
+ /*
+ * this is a rather dirty method that should not be used in other cases:
+ * We store a pointer to the Node instance that inherits from
+ * DocumentEntity.
+ */
+ const Node *subInst;
Owned<Descriptor> descriptor;
const Variant attributes;
std::vector<NodeVector<StructureNode>> fields;
@@ -156,10 +162,7 @@ private:
protected:
void addStructureNode(Handle<StructureNode> s,
- const std::string &fieldName = "")
- {
- fields[getFieldDescriptorIndex(fieldName, true)].push_back(s);
- }
+ const std::string &fieldName = "");
bool doValidate(Logger &logger) const;
@@ -169,7 +172,7 @@ public:
* from Node. Therefore we need to have a handle to the subclass Node
* instance to create NodeVectors and Owned references.
*
- * @param owner is a handle to the subclass instance
+ * @param subInst is a handle to the subclass instance
* (e.g. StructuredEntity), such that the fields vectors
* and the descriptor reference can be obtained.
* @param descriptor is the Descriptor for this DocumentEntity, which will
@@ -177,7 +180,7 @@ public:
* @param attributes is a Map Variant adhering to the attribute StructType
* in the given descriptor.
*/
- DocumentEntity(Handle<Node> owner, Handle<Descriptor> descriptor,
+ DocumentEntity(Handle<Node> subInst, Handle<Descriptor> descriptor,
Variant attributes = {});
/**
@@ -498,6 +501,8 @@ public:
*
*/
class AnnotationEntity : public Node, public DocumentEntity {
+ friend DocumentEntity;
+
private:
Owned<Anchor> start;
Owned<Anchor> end;
@@ -573,7 +578,11 @@ public:
/**
* Sets the root StructuredEntity of this Document.
*/
- void setRoot(Handle<StructuredEntity> root) { this->root = acquire(root); };
+ void setRoot(Handle<StructuredEntity> root)
+ {
+ invalidate();
+ this->root = acquire(root);
+ };
/**
* Returns the root StructuredEntity of this Document.
@@ -606,13 +615,18 @@ public:
/**
* Adds a Domain reference to this Document.
*/
- void addDomain(Handle<Domain> d) { domains.push_back(d); }
+ void addDomain(Handle<Domain> d)
+ {
+ invalidate();
+ domains.push_back(d);
+ }
/**
* Adds multiple Domain references to this Document.
*/
void addDomains(const std::vector<Handle<Domain>> &d)
{
+ invalidate();
domains.insert(domains.end(), d.begin(), d.end());
}