X-Git-Url: https://deadsoftware.ru/gitweb?a=blobdiff_plain;f=store.cc;h=c2fd5b4d8696e62da10f8b04b6d4e08488a2a003;hb=98bcd76b4c284676f55d754879dee9bda1898924;hp=82e20e67c7c1e0dac7cb4a1358706e811057af19;hpb=32b22b42cd974e98e8a56f5ac39a51c8990ef57c;p=odcread.git diff --git a/store.cc b/store.cc index 82e20e6..c2fd5b4 100644 --- a/store.cc +++ b/store.cc @@ -1,4 +1,8 @@ #include +#include + +#include + namespace odc { @@ -20,14 +24,114 @@ std::string TypePath::toString() const { return join(begin(), end(), std::string("->")); } +const std::string Store::TYPENAME("Stores.Store^"); +const TypeProxy Store::PROXY; + Store::Store(INTEGER id): d_id(id) {} INTEGER Store::getId() { return d_id; } -Domain* Store::getDomain() { +const std::string &Store::getType() { + return Store::TYPENAME; +} + +const std::string *Store::getSuper() { return 0; } +const std::string &Store::getTypeName() const { + return Store::getType(); +} + +void Store::getTypePath(TypePath *out) const { + return calcTypePath(out, getTypeName()); +} + +void Store::calcTypePath(TypePath *path, const std::string &name) const { + const std::string *super = TypeRegister::getInstance().get(name)->getSuper(); + if (super != 0) { + calcTypePath(path, *super); + } + path->push_back(name); +} + +void Store::internalize(Reader &reader) { + reader.readVersion(0, 0); } + +std::string Store::toString() { + return getTypeName(); +} + +const std::string Elem::TYPENAME("Stores.Elem^"); +const TypeProxy Elem::PROXY; + +Elem::Elem(INTEGER id) : Store(id) {} + +const std::string &Elem::getType() { + return TYPENAME; +} + +const std::string *Elem::getSuper() { + return &Store::getType(); +} + +const std::string &Elem::getTypeName() const { + return getType(); +} + +void Elem::internalize(Reader &reader) { + Store::internalize(reader); + if (reader.isCancelled()) return; + reader.readVersion(0, 0); +} + +const std::string Model::TYPENAME("Models.Model^"); +const TypeProxy Model::PROXY; + +Model::Model(INTEGER id) : Elem(id) {} + +const std::string &Model::getType() { + return TYPENAME; +} + +const std::string *Model::getSuper() { + return &Elem::getType(); +} + +const std::string &Model::getTypeName() const { + return getType(); +} + +void Model::internalize(Reader &reader) { + Elem::internalize(reader); + if (reader.isCancelled()) return; + reader.readVersion(0, 0); +} + +const std::string ContainerModel::TYPENAME("Containers.Model^"); +const TypeProxy ContainerModel::PROXY; + +ContainerModel::ContainerModel(INTEGER id) : Model(id) {} + +const std::string &ContainerModel::getType() { + return TYPENAME; +} + +const std::string *ContainerModel::getSuper() { + return &Model::getType(); +} + +const std::string &ContainerModel::getTypeName() const { + return getType(); +} + +void ContainerModel::internalize(Reader &reader) { + Model::internalize(reader); + if (reader.isCancelled()) return; + reader.readVersion(0, 0); +} + +} // namespace odc