Changeset 3562


Ignore:
Timestamp:
Mar 24, 2008, 8:28:16 PM (13 years ago)
Author:
orlov
Message:
  • Functions for initializing expressions by subexpression, parenthesizing or concatenation.
Location:
to-imperative/trunk/opents/samples
Files:
2 edited

Legend:

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

    r3487 r3562  
    1 /* $Id: trefal.tcc 3443 2008-02-26 14:48:57Z yura $ */
     1/* $Id$ */
    22/* vim: set syntax=cpp shiftwidth=4 expandtab tabstop=4: */
    33
     
    3434                for (unsigned i = 0; i < length; i++)
    3535                    new (p++) Term(*q++);
    36 
    3736        }
    3837
     
    5958        };
    6059
    61         void init (const char* str, size_t len)
    62         {
     60        void init_str (const char* str, size_t len) {
    6361            assert(!terms);
    6462            terms = new Term[len];
    6563            extDataSize() = len * sizeof(Term);
    66             for (int i = 0; i < len; i++) {
     64            for (unsigned i = 0; i < len; i++) {
    6765                terms[i].type = Term::CHAR;
    6866                terms[i].c = str[i];
     67                ((Expr&)terms[i].e).init(0);
     68            }
     69        }
     70
     71        void init_subexpr (const Expr& e, size_t start, size_t len) {
     72            assert(!terms);
     73            terms = new Term[len];
     74            extDataSize() = len * sizeof(Term);
     75            copyFrom(e, start, len);
     76        }
     77
     78        void init_paren (const TExpr& te) {
     79            assert(!terms);
     80            terms = new Term[1];
     81            extDataSize() = sizeof(Term);
     82            terms->type = Term::EXPR;
     83            terms->e = te;
     84        }
     85
     86        void init_concat (const Expr** exprs, size_t num) {
     87            assert(!terms);
     88            size_t len = 0;
     89            for (unsigned i = 0; i < num; i++)
     90                len += exprs[i]->get_len();
     91            terms = new Term[len];
     92            extDataSize() = len * sizeof(Term);
     93            Term* p = terms;
     94            for (unsigned i = 0; i < num; i++) {
     95                const Term* q = *exprs[i];
     96                for (unsigned j = 0; j < exprs[i]->get_len(); j++)
     97                    *p++ = *q++;
    6998            }
    7099        }
     
    99128            p->type = Term::EXPR;
    100129            p->e = *this;
     130            return e;
    101131        }
    102132
     
    110140
    111141        bool symbol_at (size_t pos) {
    112             return operator[](pos).type != Term.EXPR;
     142            return ((Term *)*this)[pos].type != Term::EXPR;
    113143        }
    114144
  • to-imperative/trunk/opents/samples/trefal.tcc

    r3487 r3562  
    22/* vim: set syntax=cpp shiftwidth=4 expandtab tabstop=4: */
    33
    4 #include "trefal.hcc"
     4#include "trefal.hh"
    55
    66tfun int insert (TExpr e, TExpr s, tout Expr out) {
Note: See TracChangeset for help on using the changeset viewer.