X-Git-Url: https://deadsoftware.ru/gitweb?a=blobdiff_plain;f=store.h;h=a77febecbe6bb3514fc1a3b07e6a9ae8e835c858;hb=2466c23751f131a07432df964658c2de90315e7b;hp=66e58b0cae59d4dd6d0d093c5cccbcf1d3d74b71;hpb=cf035fa1849a5e65c0d636ce2718bc2c85994680;p=odcread.git diff --git a/store.h b/store.h index 66e58b0..a77febe 100644 --- a/store.h +++ b/store.h @@ -4,6 +4,7 @@ #include #include #include +#include #include #include @@ -25,12 +26,12 @@ namespace odc { */ class Store { private: - static const std::string TYPENAME; - static const TypeProxy PROXY; + static const TopTypeProxy PROXY; INTEGER d_id; public: + static const std::string TYPENAME; static const SHORTCHAR NEWBASE = 0xF0; // (* new base type (level = 0), i.e. not yet in dict *) static const SHORTCHAR NEWEXT = 0xF1; // (* new extension type (level = 1), i.e. not yet in dict *) static const SHORTCHAR OLDTYPE = 0xF2; // (* old type, i.e. already in dict *) @@ -44,16 +45,6 @@ namespace odc { INTEGER getId(); - /** - * Get the TypeName of this object. - * @see TypeRegister - */ - static const std::string &getType(); - /** - * Get the TypeName of the supertype of this object. Return 0 pointer if no supertype. - * @see TypeRegister - */ - static const std::string *getSuper(); /** * Get the TypeName for this object. */ @@ -62,7 +53,7 @@ namespace odc { * Get the TypePath to this object's type. * @see TypePath */ - void getTypePath(TypePath *path) const; + TypePath getTypePath() const; /** * PROCEDURE (s: Store) Domain (): Domain @@ -96,7 +87,7 @@ namespace odc { * source.Domain() = NIL guaranteed * source is not yet initialized guaranteed */ - virtual void internalize(Reader &reader); + virtual void internalize(Reader &reader); // PROCEDURE (s: Store) Internalize- (VAR rd: Reader), NEW, EXTENSIBLE; // VAR thisVersion: INTEGER; // BEGIN @@ -130,74 +121,49 @@ namespace odc { // FIXME virtual std::string toString(); - virtual std::string toPlainText(); + + /** + * Receiving end of the Visitor pattern. + */ + virtual void accept(Visitor &visitor) const; private: - void calcTypePath(TypePath * out, const std::string &name) const; + void calcTypePath(TypePath *out, const std::string &name) const; }; class Elem : public Store { private: - static const std::string TYPENAME; - static const TypeProxy PROXY; + static const TypeProxy PROXY; public: - Elem(INTEGER id); - - /** - * Get the TypeName of this object. - * @see TypeRegister - */ - static const std::string &getType(); - /** - * Get the TypeName of the supertype of this object. Return 0 pointer if no supertype. - * @see TypeRegister - */ - static const std::string *getSuper(); - /** - * Get the TypeName for this object. - */ + static const std::string TYPENAME; virtual const std::string &getTypeName() const; + Elem(INTEGER id); virtual void internalize(Reader &reader); }; class Model : public Elem { private: - static const std::string TYPENAME; - static const TypeProxy PROXY; + static const TypeProxy PROXY; public: - Model(INTEGER id); - - /** - * Get the TypeName of this object. - * @see TypeRegister - */ - static const std::string &getType(); - /** - * Get the TypeName of the supertype of this object. Return 0 pointer if no supertype. - * @see TypeRegister - */ - static const std::string *getSuper(); - /** - * Get the TypeName for this object. - */ + static const std::string TYPENAME; virtual const std::string &getTypeName() const; + Model(INTEGER id); virtual void internalize(Reader &reader); }; class ContainerModel : public Model { private: - static const std::string TYPENAME; - static const TypeProxy PROXY; + static const TypeProxy PROXY; public: - ContainerModel(INTEGER id); - static const std::string &getType(); - static const std::string *getSuper(); + static const std::string TYPENAME; virtual const std::string &getTypeName() const; + + ContainerModel(INTEGER id); virtual void internalize(Reader &reader); }; }