X-Git-Url: https://deadsoftware.ru/gitweb?a=blobdiff_plain;f=textmodel.h;h=8eb26eb47d419c2a2d2b7d5e30765161e4898d91;hb=20254ed23eb75d8c3832b807ea97616fd684976e;hp=92d387a61b5596595b4dd985c9f1c36692671755;hpb=d7f2452e20b04d1559b7bdd3aa49b6fbf7d0abaf;p=odcread.git diff --git a/textmodel.h b/textmodel.h index 92d387a..8eb26eb 100644 --- a/textmodel.h +++ b/textmodel.h @@ -9,19 +9,30 @@ namespace odc { class TextModel : public ContainerModel { private: - static const std::string TYPENAME; - static const TypeProxy PROXY; + static const TypeProxy PROXY; public: - TextModel(INTEGER id); - static const std::string &getType(); - static const std::string *getSuper(); + static const std::string TYPENAME; virtual const std::string &getTypeName() const; + + TextModel(INTEGER id); + /** + * Just calls super and reads the version and checks that its in the allowed range. + */ virtual void internalize(Reader &reader); }; + /** + * A TextPiece is just a component of an StdTextModel. + * It has a certain length in bytes, which is known construction time (due + * to meta-data in the StdTextModel header) and contents which are read + * later. + */ class TextPiece { public: + /** + * The number of bytes that will be read. + */ const size_t d_len; TextPiece(size_t len); virtual void read(Reader &reader) = 0; @@ -29,6 +40,10 @@ namespace odc { virtual void accept(Visitor &visitor) const = 0; }; + /** + * TextPiece consisting of 16-bit characters. + * Not sure of the encoding. + */ class LongPiece : public TextPiece { private: CHAR *d_buf; @@ -37,10 +52,17 @@ namespace odc { ~LongPiece(); virtual void read(Reader &reader); virtual std::string toString() const; - virtual std::string getText() const; + /** + * Return the text contained in this piece. + * Currently just casting the buffer to wchar_t* and hoping for the best. + */ + virtual std::wstring getText() const; virtual void accept(Visitor &visitor) const; }; + /** + * TextPiece consisting of 8-bit characters. + */ class ShortPiece : public TextPiece { private: SHORTCHAR *d_buf; @@ -53,26 +75,38 @@ namespace odc { virtual void accept(Visitor &visitor) const; }; + /** + * TextPiece that embeds a View. + */ class ViewPiece : public TextPiece { Store *d_view; public: ViewPiece(Store *view); + ~ViewPiece(); virtual void read(Reader &reader); virtual std::string toString() const; virtual void accept(Visitor &visitor) const; }; + /** + * Default implementation of a TextModel. + * Essentially it is a series of TextPieces. + */ class StdTextModel : public TextModel { private: - static const std::string TYPENAME; - static const TypeProxy PROXY; + static const TypeProxy PROXY; std::vector d_pieces; public: - StdTextModel(INTEGER id); - static const std::string &getType(); - static const std::string *getSuper(); + static const std::string TYPENAME; virtual const std::string &getTypeName() const; + + StdTextModel(INTEGER id); + /** + * Calls super and reads the version and checks that its in the allowed range. + * Then the text model meta-data is read, including information on all the pieces. + * After reading the meta-data, the pieces themselves are read. + */ virtual void internalize(Reader &reader); virtual std::string toString();