Changeset 3487


Ignore:
Timestamp:
Mar 11, 2008, 2:02:30 PM (13 years ago)
Author:
orlov
Message:
  • Additional methods in Expr.
Location:
to-imperative/trunk/opents/samples
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • to-imperative/trunk/opents/samples/trefal.hh

    r3474 r3487  
    66#define DBG fprintf(stderr,"%d: %d\n",ts::myRank,__LINE__)
    77
    8 struct Expr;
     8class Expr;
    99
    1010typedef ts::TVar<Expr> TExpr;
     
    1919};
    2020
    21 struct Expr : private ts::TExtData
     21class Expr : private ts::TExtData
    2222{
    2323    private:
     
    4343            } else {
    4444                Term* p = *this;
    45                 size_t length = getLength();
     45                size_t length = get_len();
    4646                for (unsigned i = 0; i < length; i++)
    4747                    p++->~Term();
     
    5959        };
    6060
     61        void init (const char* str, size_t len)
     62        {
     63            assert(!terms);
     64            terms = new Term[len];
     65            extDataSize() = len * sizeof(Term);
     66            for (int i = 0; i < len; i++) {
     67                terms[i].type = Term::CHAR;
     68                terms[i].c = str[i];
     69            }
     70        }
     71
    6172        operator const Term* () const { return terms ? terms : (Term*)extData(); }
    6273        operator       Term* ()       { return terms ? terms : (Term*)extData(); }
    6374
    6475        Expr (const Expr& e) : terms(0) {
    65             copyFrom(e, 0, e.getLength());
     76            copyFrom(e, 0, e.get_len());
    6677        }
    6778
     
    6980            if (this != &e) {
    7081                clear();
    71                 init(e.getLength());
    72                 copyFrom(e, 0, e.getLength());
     82                init(e.get_len());
     83                copyFrom(e, 0, e.get_len());
    7384            }
    7485            return *this;
     
    8293        }
    8394
    84         size_t getLength () const {
     95        Expr operator() () const {
     96            Expr e;
     97            e.init(1);
     98            Term* p = (Term *)e;
     99            p->type = Term::EXPR;
     100            p->e = *this;
     101        }
     102
     103        size_t get_len () const {
    85104            return extDataSize() / sizeof(Term);
    86105        }
     
    88107        Term& operator[] (int i) {
    89108            return ((Term *)*this)[i];
     109        }
     110
     111        bool symbol_at (size_t pos) {
     112            return operator[](pos).type != Term.EXPR;
    90113        }
    91114
     
    103126        case Term::CHAR: os << t.c; break;
    104127        case Term::INT:  os << t.i; break;
    105         case Term::EXPR: os << (Expr &)(t.e); break;
     128        case Term::EXPR: os << (Expr &)t.e; break;
    106129    }
    107130    return os;
     
    111134    os << "(";
    112135    Term* p = e;
    113     for (unsigned i = 0; i < e.getLength(); i++)
     136    for (unsigned i = 0; i < e.get_len(); i++)
    114137        os << (i > 0 ? " " : "") << p[i];
    115138    os << ")";
     
    141164
    142165std::istream& operator>> (std::istream& is, Expr& e) {
    143     int buffer_size = 10;
     166    int buffer_size = 20;
    144167    Term* buffer = new Term[buffer_size];
    145168    char c;
     
    164187Expr operator+ (const Expr& e1, const Expr& e2) {
    165188    Expr e;
    166     e.init(e1.getLength() + e2.getLength());
     189    e.init(e1.get_len() + e2.get_len());
    167190    Term* p = e;
    168191    const Term* q = e1;
    169     for (unsigned i = 0; i < e1.getLength(); i++)
     192    for (unsigned i = 0; i < e1.get_len(); i++)
    170193        new (p++) Term(*q++);
    171194    q = e2;
    172     for (unsigned i = 0; i < e2.getLength(); i++)
     195    for (unsigned i = 0; i < e2.get_len(); i++)
    173196        new (p++) Term(*q++);
    174197    return e;
  • to-imperative/trunk/opents/samples/trefal.tcc

    r3461 r3487  
    66tfun int insert (TExpr e, TExpr s, tout Expr out) {
    77    Expr& x = (Expr&) e;
    8     if (x.getLength() == 0) {
     8    if (x.get_len() == 0) {
    99        out = (Expr&) s;
    1010    } else {
     
    1212        TExpr z;
    1313        Expr& o = (Expr&) z;
    14         o.init(x.getLength());
     14        o.init(x.get_len());
    1515        Term* q = o;
    16         for (unsigned i = 0; i < x.getLength(); i++, p++, q++)
     16        for (unsigned i = 0; i < x.get_len(); i++, p++, q++)
    1717            if (p->type == Term::EXPR) {
    1818                q->type = Term::EXPR;
Note: See TracChangeset for help on using the changeset viewer.