From: Gert van Valkenhoef Date: Wed, 16 Nov 2011 20:00:43 +0000 (+0000) Subject: Split up fold X-Git-Url: https://deadsoftware.ru/gitweb?p=odcread.git;a=commitdiff_plain;h=985a0a951617a4a82935bc23590c4b3c0c3679c0 Split up fold --- diff --git a/fold/Make.inc b/fold/Make.inc index 8b7c74e..3020661 100644 --- a/fold/Make.inc +++ b/fold/Make.inc @@ -1 +1 @@ -SRCS += fold/fold.cc +SRCS += $(wildcard fold/*.cc) diff --git a/fold/accept.cc b/fold/accept.cc new file mode 100644 index 0000000..19e3944 --- /dev/null +++ b/fold/accept.cc @@ -0,0 +1,14 @@ +#include "fold/module.ih" + +namespace odc { + +void Fold::accept(Visitor &visitor) const { + if (d_hidden == 0) { // right part + visitor.foldRight(); + } else { // left part + visitor.foldLeft(d_collapsed); + d_hidden->accept(visitor); + } +} + +} // namespace odc diff --git a/fold/fold.cc b/fold/fold.cc index 9a0195f..62421f3 100644 --- a/fold/fold.cc +++ b/fold/fold.cc @@ -2,65 +2,20 @@ namespace odc { -const std::string View::TYPENAME("Views.View^"); -const TypeProxy View::PROXY; - -View::View(INTEGER id) : Store(id) {} - -const std::string &View::getTypeName() const { - return TYPENAME; -} - -void View::internalize(Reader &reader) { - Store::internalize(reader); - if (reader.isCancelled()) return; - reader.readVersion(0, 0); -} - const std::string Fold::TYPENAME("StdFolds.Fold^"); const TypeProxy Fold::PROXY; Fold::Fold(INTEGER id) : View(id) {} -const std::string &Fold::getTypeName() const { - return TYPENAME; -} - -void Fold::internalize(Reader &reader) { - View::internalize(reader); - if (reader.isCancelled()) return; - reader.readVersion(0, 0); - if (reader.isCancelled()) return; -// rd.ReadXInt(xint);fold.leftSide := xint = 0; - reader.readSInt(); -// rd.ReadXInt(xint); fold.collapsed := xint = 0; - SHORTINT c = reader.readSInt(); - d_collapsed = (c == 0); -// rd.ReadXString(fold.label); - d_label = new SHORTCHAR[32]; - reader.readSString(d_label); // the label -// rd.ReadStore(store); - d_hidden = reader.readStore(); // the hidden part -// IF store # NIL THEN fold.hidden := store(TextModels.Model); Stores.Join(fold.hidden, fold) -// ELSE fold.hidden := NIL -// END; -// fold.leftSide := store # NIL -} - -std::string Fold::toString() { - if (d_hidden == 0) { - return std::string("Fold(right)"); +Fold::~Fold() { + if (d_hidden != 0) { + delete d_hidden; } - return std::string("Fold(left) \"") + std::string(d_label) + std::string("\" { ") + d_hidden->toString() + std::string(" }"); + delete d_label; } -void Fold::accept(Visitor &visitor) const { - if (d_hidden == 0) { // right part - visitor.foldRight(); - } else { // left part - visitor.foldLeft(d_collapsed); - d_hidden->accept(visitor); - } +const std::string &Fold::getTypeName() const { + return TYPENAME; } } // namespace odc diff --git a/fold/fold.h b/fold/fold.h index 3725b47..628caca 100644 --- a/fold/fold.h +++ b/fold/fold.h @@ -42,6 +42,7 @@ namespace odc { virtual const std::string &getTypeName() const; Fold(INTEGER id); + ~Fold(); /** * Calls super and reads the version and checks that its in the allowed range. * Then reads the state of the Fold, including the hidden part. diff --git a/fold/internalize.cc b/fold/internalize.cc new file mode 100644 index 0000000..92d9357 --- /dev/null +++ b/fold/internalize.cc @@ -0,0 +1,27 @@ +#include "fold/module.ih" + +namespace odc { + +void Fold::internalize(Reader &reader) { + View::internalize(reader); + if (reader.isCancelled()) return; + reader.readVersion(0, 0); + if (reader.isCancelled()) return; + + // indicates left/right side, but this is also determined by the presense + // of a hidden part (so this field unused by BlackBox) + reader.readSInt(); + + // whether the view is collapsed + SHORTINT c = reader.readSInt(); + d_collapsed = (c == 0); + + // label of the fold (not sure of its use) + d_label = new SHORTCHAR[32]; + reader.readSString(d_label); + + // the hidden part (NULL indicates this is a right side) + d_hidden = reader.readStore(); +} + +} // namespace odc diff --git a/fold/toString.cc b/fold/toString.cc new file mode 100644 index 0000000..7437b57 --- /dev/null +++ b/fold/toString.cc @@ -0,0 +1,12 @@ +#include "fold/module.ih" + +namespace odc { + +std::string Fold::toString() { + if (d_hidden == 0) { + return std::string("Fold(right)"); + } + return std::string("Fold(left) \"") + std::string(d_label) + std::string("\" { ") + d_hidden->toString() + std::string(" }"); +} + +} // namespace odc diff --git a/fold/view.cc b/fold/view.cc new file mode 100644 index 0000000..0114360 --- /dev/null +++ b/fold/view.cc @@ -0,0 +1,20 @@ +#include "fold/module.ih" + +namespace odc { + +const std::string View::TYPENAME("Views.View^"); +const TypeProxy View::PROXY; + +View::View(INTEGER id) : Store(id) {} + +const std::string &View::getTypeName() const { + return TYPENAME; +} + +void View::internalize(Reader &reader) { + Store::internalize(reader); + if (reader.isCancelled()) return; + reader.readVersion(0, 0); +} + +} // namespace odc