Skip to content

File model_definition_node.hpp

File List > backends > cxx > include > zmbt > mapping > model_definition_node.hpp

Go to the documentation of this file

#ifndef ZMBT_MAPPING_MODEL_DEFINITION_NODE_HPP_
#define ZMBT_MAPPING_MODEL_DEFINITION_NODE_HPP_

#include "zmbt/mapping/model_definition.hpp"


namespace zmbt {
namespace mapping {


class ModelDefinition::BaseTransition
{
  detail::DefinitionHelper mapping_;

  public:
    virtual ~BaseTransition() { };

  protected:

    BaseTransition(detail::DefinitionHelper && m) : mapping_{m} {}
    BaseTransition() : BaseTransition(detail::DefinitionHelper{}) {}
    BaseTransition(BaseTransition const&) = delete;
    BaseTransition(BaseTransition&&) = default;

    detail::DefinitionHelper& state()
    {
        return mapping_;
    }

    template <class Target>
    Target transit_to()
    {
        return Target(std::move(mapping_));
    }
};


class ModelDefinition::N_Term : protected virtual ModelDefinition::BaseTransition
{
  private:
    friend class ModelDefinition;
    N_Term(detail::DefinitionHelper&& m) : ModelDefinition::BaseTransition(std::move(m))
    {
    }
    N_Term(N_Term const&) = delete;
    N_Term(N_Term&&) = default;

  public:
  N_Term() : N_Term(detail::DefinitionHelper{}) {}
    virtual ~N_Term()
    {
    }
};

}  // namespace mapping
}  // namespace zmbt

#endif