X-Git-Url: https://deadsoftware.ru/gitweb?p=odcread.git;a=blobdiff_plain;f=fold.cc;h=b88d24b66a303e2b0602e755cfd01c6cbcdff707;hp=b416401ede108ab39c71e3c7ab11c64de0560a00;hb=41d9c65ec79728a8771cd2288dfc3458569c6801;hpb=51b3593cbfb33c1d7b4b588f3841c3c405e3a215 diff --git a/fold.cc b/fold.cc index b416401..b88d24b 100644 --- a/fold.cc +++ b/fold.cc @@ -4,20 +4,12 @@ namespace odc { const std::string View::TYPENAME("Views.View^"); -const TypeProxy View::PROXY; +const TypeProxy View::PROXY; View::View(INTEGER id) : Store(id) {} -const std::string &View::getType() { - return TYPENAME; -} - -const std::string *View::getSuper() { - return &Store::getType(); -} - const std::string &View::getTypeName() const { - return getType(); + return TYPENAME; } void View::internalize(Reader &reader) { @@ -27,20 +19,12 @@ void View::internalize(Reader &reader) { } const std::string Fold::TYPENAME("StdFolds.Fold^"); -const TypeProxy Fold::PROXY; +const TypeProxy Fold::PROXY; Fold::Fold(INTEGER id) : View(id) {} -const std::string &Fold::getType() { - return TYPENAME; -} - -const std::string *Fold::getSuper() { - return &View::getType(); -} - const std::string &Fold::getTypeName() const { - return getType(); + return TYPENAME; } void Fold::internalize(Reader &reader) { @@ -51,7 +35,8 @@ void Fold::internalize(Reader &reader) { // rd.ReadXInt(xint);fold.leftSide := xint = 0; reader.readSInt(); // rd.ReadXInt(xint); fold.collapsed := xint = 0; - reader.readSInt(); + SHORTINT c = reader.readSInt(); + d_collapsed = (c == 0); // rd.ReadXString(fold.label); d_label = new SHORTCHAR[32]; reader.readSString(d_label); // the label @@ -67,7 +52,16 @@ std::string Fold::toString() { if (d_hidden == 0) { return std::string("Fold(right)"); } - return std::string("Fold(left)") + std::string(" { ") + d_hidden->toString() + std::string(" }"); + return std::string("Fold(left) \"") + std::string(d_label) + std::string("\" { ") + d_hidden->toString() + std::string(" }"); +} + +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