[Compbench-devel] CompBenchmarks++/libcompbenchmarks/CEL CEL-Array.cpp, 1.1, 1.2 CEL-Array.h, 1.1,
Brought to you by:
xfred
From: Frederic T. <xf...@us...> - 2007-03-08 17:09:21
|
Update of /cvsroot/compbench/CompBenchmarks++/libcompbenchmarks/CEL In directory sc8-pr-cvs4.sourceforge.net:/tmp/cvs-serv25061 Modified Files: CEL-Array.cpp CEL-Array.h CEL-Atom.cpp CEL-Atom.h Log Message: Array are (implicitly) localy defined in blocks, function, and containers. Index: CEL-Array.cpp =================================================================== RCS file: /cvsroot/compbench/CompBenchmarks++/libcompbenchmarks/CEL/CEL-Array.cpp,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -d -r1.1 -r1.2 *** CEL-Array.cpp 5 Mar 2007 20:32:39 -0000 1.1 --- CEL-Array.cpp 8 Mar 2007 17:09:17 -0000 1.2 *************** *** 8,72 **** #include <CEL/CEL-Array.h> - #include <stdlib.h> using namespace CBM; - typedef struct { - std::string name; - std::vector<std::string> value; - } celArray_t; - - std::vector<celArray_t*> celArrays; - - void CBM::CELArrayDone(void) - { - int i; - int n = celArrays.size(); - std::vector<celArray_t*> ncelArrays; - celArray_t *A; - - for(i=0; i<n; i++) { - A=celArrays[i]; - delete(A); - } - celArrays=ncelArrays; - - } - - celArray_t *celArrayGet(std::string _name) - { - int i; - int n = celArrays.size(); - celArray_t *A; - - for(i=0; i<n; i++) { - A=celArrays[i]; - if (A->name==_name) - return(A); - } - return(0); - } - - std::string celArrayRemove(std::string _name) - { - celArray_t *ca = celArrayGet(_name); - celArray_t *A; - std::vector<celArray_t*> ncelArrays; - int i; - int n = celArrays.size(); - - if (!ca) - return("0"); - - for(i=0; i<n; i++) { - A=celArrays[i]; - if (A!=ca) - ncelArrays.push_back(A); - } - celArrays=ncelArrays; - delete(ca); - return("1"); - } - CelArray::CelArray() : CelAtom() --- 8,14 ---- *************** *** 94,98 **** CelAtom *N; std::string name; - celArray_t *ca; if (n!=1) --- 36,39 ---- *************** *** 103,113 **** name=N->Evaluate(); ! ca=celArrayGet(name); ! if (!ca) { ! ca=new celArray_t; ! celArrays.push_back(ca); ! } ! ca->name=name; ! return("1"); } --- 44,48 ---- name=N->Evaluate(); ! varOwner()->ArrayDef(name); return("1"); } *************** *** 136,140 **** std::string name; std::string value; - celArray_t *ca; if (n!=2) --- 71,74 ---- *************** *** 147,157 **** value=V->Evaluate(); ! ca=celArrayGet(name); ! if (!ca) { ! ca=new celArray_t; ! celArrays.push_back(ca); ! } ! ca->name=name; ! ca->value.push_back(value); return("1"); } --- 81,86 ---- value=V->Evaluate(); ! varOwner()->ArrayAdd(name, value); ! return("1"); } *************** *** 161,166 **** } - - CelArraySize::CelArraySize() : CelArray() --- 90,93 ---- *************** *** 176,183 **** { int n = childs.size(); - std::string r; CelAtom *N; - char tmp[32]; - celArray_t *ca; std::string name; --- 103,107 ---- *************** *** 189,199 **** name=N->Evaluate(); ! ca=celArrayGet(name); ! if (!ca) { ! return("0"); ! } ! sprintf(tmp, "%d", ca->value.size()); ! r=tmp; ! return(r); } --- 113,117 ---- name=N->Evaluate(); ! return(varOwner()->ArraySize(name)); } *************** *** 219,225 **** CelAtom *I; std::string is; - int i; - - celArray_t *ca; if (n!=2) --- 137,140 ---- *************** *** 229,242 **** I=childs[1]; is=I->Evaluate(); - i=atoi(is.c_str()); ! ca=celArrayGet(N->Evaluate()); ! if (ca) { ! if ((i>=0) && ((unsigned) i<ca->value.size())) ! return(ca->value[i]); ! else ! return("0"); ! } else ! return("0"); } --- 144,150 ---- I=childs[1]; is=I->Evaluate(); ! return(varOwner()->ArrayGet(N->Evaluate(), ! is)); } *************** *** 266,270 **** N=childs[0]; ! return(celArrayRemove(N->Evaluate())); } --- 174,178 ---- N=childs[0]; ! return(varOwner()->ArrayUndef(N->Evaluate())); } Index: CEL-Atom.h =================================================================== RCS file: /cvsroot/compbench/CompBenchmarks++/libcompbenchmarks/CEL/CEL-Atom.h,v retrieving revision 1.3 retrieving revision 1.4 diff -C2 -d -r1.3 -r1.4 *** CEL-Atom.h 7 Mar 2007 18:00:21 -0000 1.3 --- CEL-Atom.h 8 Mar 2007 17:09:18 -0000 1.4 *************** *** 18,21 **** --- 18,27 ---- std::string value; } celVar_t; + + + typedef struct { + std::string name; + std::vector<std::string> value; + } celArray_t; /** \brief ? */ *************** *** 23,28 **** private: std::vector<celVar_t*> celVars; ! void varDone(void); protected: --- 29,36 ---- private: std::vector<celVar_t*> celVars; + std::vector<celArray_t*> celArrays; ! virtual void varDone(void); ! virtual void arrayDone(void); protected: *************** *** 44,49 **** --- 52,66 ---- virtual void VarSet(std::string _name, std::string _value); + virtual celArray_t *ArrayDef(std::string _name); + virtual void ArrayAdd(std::string _name, std::string _value); + virtual celVar_t *VarGet(std::string _name); + virtual celArray_t *ArrayGet(std::string _name); + virtual std::string ArrayGet(std::string _name, + std::string _index); + virtual std::string ArraySize(std::string _name); + virtual std::string VarUndef(std::string _name); + virtual std::string ArrayUndef(std::string _name); virtual void add(CelAtom *_atom); Index: CEL-Array.h =================================================================== RCS file: /cvsroot/compbench/CompBenchmarks++/libcompbenchmarks/CEL/CEL-Array.h,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -d -r1.1 -r1.2 *** CEL-Array.h 5 Mar 2007 20:32:39 -0000 1.1 --- CEL-Array.h 8 Mar 2007 17:09:17 -0000 1.2 *************** *** 13,18 **** namespace CBM { - void CELArrayDone(void); - /** \brief ? */ --- 13,16 ---- Index: CEL-Atom.cpp =================================================================== RCS file: /cvsroot/compbench/CompBenchmarks++/libcompbenchmarks/CEL/CEL-Atom.cpp,v retrieving revision 1.3 retrieving revision 1.4 diff -C2 -d -r1.3 -r1.4 *** CEL-Atom.cpp 7 Mar 2007 18:00:21 -0000 1.3 --- CEL-Atom.cpp 8 Mar 2007 17:09:18 -0000 1.4 *************** *** 8,11 **** --- 8,13 ---- #include <CEL/CEL-Atom.h> + #include <stdlib.h> + using namespace CBM; *************** *** 29,32 **** --- 31,49 ---- } + void CelAtom::arrayDone(void) + { + int i; + int n = celArrays.size(); + std::vector<celArray_t*> ncelArrays; + celArray_t *A; + + for(i=0; i<n; i++) { + A=celArrays[i]; + delete(A); + } + celArrays=ncelArrays; + } + + void CelAtom::indent(std::string& str, int _indent) *************** *** 89,92 **** --- 106,134 ---- } + celArray_t *CelAtom::ArrayDef(std::string _name) + { + celArray_t *ca; + + ca=ArrayGet(_name); + if (!ca) { + ca=new celArray_t; + celArrays.push_back(ca); + } + ca->name=_name; + + return(ca); + } + + void CelAtom::ArrayAdd(std::string _name, std::string _value) + { + celArray_t *ca; + + ca=ArrayGet(_name); + if (!ca) + ca=ArrayDef(_name); + + ca->value.push_back(_value); + } + celVar_t *CelAtom::VarGet(std::string _name) { *************** *** 103,106 **** --- 145,197 ---- } + celArray_t *CelAtom::ArrayGet(std::string _name) + { + int i; + int n = celArrays.size(); + celArray_t *A; + + for(i=0; i<n; i++) { + A=celArrays[i]; + if (A->name==_name) + return(A); + } + return(0); + } + + std::string CelAtom::ArrayGet(std::string _name, + std::string _index) + { + int i; + celArray_t *ca; + + i=atoi(_index.c_str()); + + ca=ArrayGet(_name); + if (ca) { + if ((i>=0) && ((unsigned) i<ca->value.size())) + return(ca->value[i]); + else + return("0"); + } else + return("0"); + } + + std::string CelAtom::ArraySize(std::string _name) + { + celArray_t *ca; + char tmp[32]; + std::string r; + + ca=ArrayGet(_name); + + if (!ca) + return("0"); + + sprintf(tmp, "%d", ca->value.size()); + r=tmp; + + return(r); + } + std::string CelAtom::VarUndef(std::string _name) { *************** *** 124,127 **** --- 215,239 ---- } + std::string CelAtom::ArrayUndef(std::string _name) + { + celArray_t *ca = ArrayGet(_name); + celArray_t *A; + std::vector<celArray_t*> ncelArrays; + int i; + int n = celArrays.size(); + + if (!ca) + return("0"); + + for(i=0; i<n; i++) { + A=celArrays[i]; + if (A!=ca) + ncelArrays.push_back(A); + } + celArrays=ncelArrays; + delete(ca); + return("1"); + } + void CelAtom::add(CBM::CelAtom *_atom) { *************** *** 185,188 **** --- 297,301 ---- { varDone(); + arrayDone(); } |