diff options
Diffstat (limited to 'odb/semantics/relational/changeset.hxx')
-rw-r--r-- | odb/semantics/relational/changeset.hxx | 53 |
1 files changed, 52 insertions, 1 deletions
diff --git a/odb/semantics/relational/changeset.hxx b/odb/semantics/relational/changeset.hxx index 76fd683..27c80fe 100644 --- a/odb/semantics/relational/changeset.hxx +++ b/odb/semantics/relational/changeset.hxx @@ -11,6 +11,43 @@ namespace semantics { namespace relational { + class model; + class changeset; + + class alters_model: public edge + { + public: + typedef relational::model model_type; + typedef relational::changeset changeset_type; + + model_type& + model () const {return *model_;} + + changeset_type& + changeset () const {return *changeset_;} + + public: + alters_model () : model_ (0), changeset_ (0) {} + + void + set_left_node (changeset_type& c) + { + assert (changeset_ == 0); + changeset_ = &c; + } + + void + set_right_node (model_type& m) + { + assert (model_ == 0); + model_ = &m; + } + + protected: + model_type* model_; + changeset_type* changeset_; + }; + class changeset: public qscope { public: @@ -19,8 +56,14 @@ namespace semantics version_type version () const {return version_;} + // Returns model to which this changeset applies (as opposed to the + // ultimate base model). Note that it may not be set. + // + model& + base_model () const {return alters_model_->model ();} + public: - changeset (version_type v): version_ (v) {} + changeset (version_type v): version_ (v), alters_model_ (0) {} changeset (changeset const&, qscope& base, graph&); changeset (xml::parser&, qscope& base, graph&); @@ -31,11 +74,19 @@ namespace semantics serialize (xml::serializer&) const; public: + virtual void + add_edge_left (alters_model& am) + { + assert (alters_model_ == 0); + alters_model_ = &am; + } + using qscope::add_edge_left; using qscope::add_edge_right; private: version_type version_; + alters_model* alters_model_; }; } } |