X-Git-Url: https://deadsoftware.ru/gitweb?a=blobdiff_plain;f=store.h;h=66e58b0cae59d4dd6d0d093c5cccbcf1d3d74b71;hb=cf035fa1849a5e65c0d636ce2718bc2c85994680;hp=039354d5b5c120737498795f9267a65babea13ca;hpb=32b22b42cd974e98e8a56f5ac39a51c8990ef57c;p=odcread.git diff --git a/store.h b/store.h index 039354d..66e58b0 100644 --- a/store.h +++ b/store.h @@ -3,11 +3,13 @@ #include #include +#include #include #include namespace odc { + class Reader; // forward decl class TypePath : public std::vector { public: @@ -23,6 +25,9 @@ namespace odc { */ class Store { private: + static const std::string TYPENAME; + static const TypeProxy PROXY; + INTEGER d_id; public: @@ -39,6 +44,25 @@ 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. + */ + virtual const std::string &getTypeName() const; + /** + * Get the TypePath to this object's type. + * @see TypePath + */ + void getTypePath(TypePath *path) const; /** * PROCEDURE (s: Store) Domain (): Domain @@ -46,7 +70,7 @@ namespace odc { * A store may be associated with a domain. This is done by the procedure InitDomain, which assigns a domain to the store. * Domain may be called by arbitrary clients. */ - Domain* getDomain(); + //Domain* getDomain(); /** * PROCEDURE (s: Store) CopyFrom- (source: Store) @@ -72,7 +96,7 @@ namespace odc { * source.Domain() = NIL guaranteed * source is not yet initialized guaranteed */ -// void internalize(Reader &reader) { + virtual void internalize(Reader &reader); // PROCEDURE (s: Store) Internalize- (VAR rd: Reader), NEW, EXTENSIBLE; // VAR thisVersion: INTEGER; // BEGIN @@ -105,9 +129,77 @@ namespace odc { */ // FIXME - virtual std::string toString() = 0; + virtual std::string toString(); + virtual std::string toPlainText(); + + private: + void calcTypePath(TypePath * out, const std::string &name) const; }; + class Elem : public Store { + private: + static const std::string TYPENAME; + 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. + */ + virtual const std::string &getTypeName() const; + + virtual void internalize(Reader &reader); + }; + + class Model : public Elem { + private: + static const std::string TYPENAME; + 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. + */ + virtual const std::string &getTypeName() const; + + virtual void internalize(Reader &reader); + }; + + class ContainerModel : public Model { + private: + static const std::string TYPENAME; + static const TypeProxy PROXY; + + public: + ContainerModel(INTEGER id); + static const std::string &getType(); + static const std::string *getSuper(); + virtual const std::string &getTypeName() const; + virtual void internalize(Reader &reader); + }; } #endif // _STORE_H_