index 381cca7907670fe4565ad135eae331d52aa6319d..da8434060bf2af7999e2440fb45e85fb33efaef6 100644 (file)
--- a/store.h
+++ b/store.h
#include <oberon.h>
#include <domain.h>
+#include <typeregister.h>
+
+#include <string>
+#include <vector>
namespace odc {
+ class Reader; // forward decl
+
+ class TypePath : public std::vector<std::string> {
+ public:
+ std::string toString() const;
+ };
/**
* TYPE Store
* Stores are used as base types for all objects that must be both extensible and persistent.
*/
class Store {
+ private:
+ static const std::string TYPENAME;
+ static const TypeProxy<Store> PROXY;
+
+ INTEGER d_id;
+
public:
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 STORE = 0x82; // (* general store *)
static const SHORTCHAR ELEM = 0x83; // (* elem store *)
static const SHORTCHAR NEWLINK = 0x84; // (* link to another non-elem store in same file *)
+
+ Store(INTEGER id);
+
+ 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
* NEW
* 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)
* 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
* s1 = s guaranteed
*/
// FIXME
+
+ virtual std::string toString();
+
+ private:
+ void calcTypePath(TypePath * out, const std::string &name) const;
+ };
+
+ class Elem : public Store {
+ private:
+ static const std::string TYPENAME;
+ static const TypeProxy<Elem> 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<Model> 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<ContainerModel> 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_