diff --git a/store.cc b/store.cc
index ba0842508d6bf15218d54ce4f6c54a84748c529d..4bbabf83591858e3106d1a1fd5cd4767240d3362 100644 (file)
--- a/store.cc
+++ b/store.cc
#include <store.h>
#include <reader.h>
#include <store.h>
#include <reader.h>
+#include <visitor.h>
#include <iostream>
#include <iostream>
const std::string Store::TYPENAME("Stores.Store^");
const TypeProxy<Store> Store::PROXY;
const std::string Store::TYPENAME("Stores.Store^");
const TypeProxy<Store> Store::PROXY;
-TypePath *Store::s_typePath = 0;
Store::Store(INTEGER id): d_id(id) {}
Store::Store(INTEGER id): d_id(id) {}
return Store::getType();
}
return Store::getType();
}
-const TypePath &Store::getTypePath() const {
- if (s_typePath == 0) {
- s_typePath = calcTypePath(getTypeName());
- }
- return *s_typePath;
+void Store::getTypePath(TypePath *out) const {
+ return calcTypePath(out, getTypeName());
}
}
-TypePath *Store::calcTypePath(const std::string &name) const {
+void Store::calcTypePath(TypePath *path, const std::string &name) const {
const std::string *super = TypeRegister::getInstance().get(name)->getSuper();
const std::string *super = TypeRegister::getInstance().get(name)->getSuper();
- TypePath *path;
if (super != 0) {
if (super != 0) {
- path = calcTypePath(*super);
- } else {
- path = new TypePath();
+ calcTypePath(path, *super);
}
path->push_back(name);
}
path->push_back(name);
- return path;
}
void Store::internalize(Reader &reader) {
}
void Store::internalize(Reader &reader) {
return getTypeName();
}
return getTypeName();
}
+void Store::accept(Visitor &visitor) const {}
+
const std::string Elem::TYPENAME("Stores.Elem^");
const TypeProxy<Elem> Elem::PROXY;
const std::string Elem::TYPENAME("Stores.Elem^");
const TypeProxy<Elem> Elem::PROXY;
}
void Elem::internalize(Reader &reader) {
}
void Elem::internalize(Reader &reader) {
- Store::internalize(reader); // just being explicit
+ Store::internalize(reader);
+ if (reader.isCancelled()) return;
+ reader.readVersion(0, 0);
}
const std::string Model::TYPENAME("Models.Model^");
}
const std::string Model::TYPENAME("Models.Model^");
void Model::internalize(Reader &reader) {
Elem::internalize(reader);
void Model::internalize(Reader &reader) {
Elem::internalize(reader);
+ if (reader.isCancelled()) return;
reader.readVersion(0, 0);
}
reader.readVersion(0, 0);
}
void ContainerModel::internalize(Reader &reader) {
Model::internalize(reader);
void ContainerModel::internalize(Reader &reader) {
Model::internalize(reader);
+ if (reader.isCancelled()) return;
reader.readVersion(0, 0);
}
reader.readVersion(0, 0);
}
-const std::string TextModel::TYPENAME("TextModels.Model^");
-const TypeProxy<TextModel> TextModel::PROXY;
-
-TextModel::TextModel(INTEGER id) : ContainerModel(id) {}
-
-const std::string &TextModel::getType() {
- return TYPENAME;
-}
-
-const std::string *TextModel::getSuper() {
- return &ContainerModel::getType();
-}
-
-const std::string &TextModel::getTypeName() const {
- return getType();
-}
-
-void TextModel::internalize(Reader &reader) {
- ContainerModel::internalize(reader);
- reader.readVersion(0, 0);
-}
-
-const std::string StdTextModel::TYPENAME("TextModels.StdModel^");
-const TypeProxy<StdTextModel> StdTextModel::PROXY;
-
-StdTextModel::StdTextModel(INTEGER id) : TextModel(id) {}
-
-const std::string &StdTextModel::getType() {
- return TYPENAME;
-}
-
-const std::string *StdTextModel::getSuper() {
- return &TextModel::getType();
-}
-
-const std::string &StdTextModel::getTypeName() const {
- return getType();
-}
-
-void StdTextModel::internalize(Reader &reader) {
- TextModel::internalize(reader);
- reader.readVersion(0, 1);
-
-// PROCEDURE (t: StdModel) Internalize (VAR rd: Stores.Reader);
-// VAR u, un: Run; sp: Piece; lp: LPiece; v: ViewRef;
-// org, len: INTEGER; ano: BYTE; thisVersion: INTEGER;
-// attr: Attributes; dict: AttrDict;
-// BEGIN
-// ASSERT(t.Domain() = NIL, 20); ASSERT(t.len = 0, 21);
-// t.Internalize^(rd); IF rd.cancelled THEN RETURN END;
-// rd.ReadVersion(minVersion, maxStdModelVersion, thisVersion);
-// IF rd.cancelled THEN RETURN END;
-// StdInit(t);
-// dict.len := 0; u := t.trailer;
-// rd.ReadInt(len); org := rd.Pos() + len;
-// rd.ReadByte(ano);
-// WHILE ano # -1 DO
-// IF ano = dict.len THEN
-// ReadAttr(rd, attr); Stores.Join(t, attr);
-// IF dict.len < dictSize THEN dict.attr[dict.len] := attr; INC(dict.len) END
-// ELSE
-// attr := dict.attr[ano]
-// END;
-// rd.ReadInt(len);
-// IF len > 0 THEN (* piece *)
-// NEW(sp); sp.len := len; sp.attr := attr;
-// sp.file := rd.rider.Base(); sp.org := org; un := sp;
-// INC(org, len)
-// ELSIF len < 0 THEN (* longchar piece *)
-// len := -len; ASSERT(~ODD(len), 100);
-// NEW(lp); lp.len := len DIV 2; lp.attr := attr;
-// lp.file := rd.rider.Base(); lp.org := org; un := lp;
-// INC(org, len)
-// ELSE (* len = 0 => embedded view *)
-// NEW(v); v.len := 1; v.attr := attr;
-// rd.ReadInt(v.w); rd.ReadInt(v.h); Views.ReadView(rd, v.view);
-// v.view.InitContext(NewContext(v, t));
-// un := v; INC(org)
-// END;
-// INC(t.len, un.len); u.next := un; un.prev := u; u := un;
-// rd.ReadByte(ano)
-// END;
-// rd.SetPos(org);
-// u.next := t.trailer; t.trailer.prev := u
-// END Internalize;
-//
-}
-
-
-
} // namespace odc
} // namespace odc