00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031 #include "SundanceListExpr.hpp"
00032 #include "Teuchos_TimeMonitor.hpp"
00033
00034 using namespace Sundance;
00035 using namespace Sundance;
00036
00037 using namespace Sundance;
00038 using namespace Teuchos;
00039
00040 static Time& appendToListTimer()
00041 {
00042 static RCP<Time> rtn
00043 = TimeMonitor::getNewTimer("append to list");
00044 return *rtn;
00045 }
00046
00047 ListExpr::ListExpr()
00048 : ExprBase(), elements_()
00049 {;}
00050
00051 ListExpr::ListExpr(const Array<Expr>& elements)
00052 : ExprBase(), elements_(elements)
00053 {;}
00054
00055 void ListExpr::append(const Expr& expr)
00056 {
00057 TimeMonitor timer(appendToListTimer());
00058 elements_.append(expr);
00059 }
00060
00061 Expr ListExpr::flatten() const
00062 {
00063 Expr rtn = new ListExpr();
00064
00065 for (int i=0; i<this->size(); i++)
00066 {
00067 Expr e = element(i).flatten();
00068 for (int j=0; j<e.size(); j++)
00069 {
00070 rtn.append(e[j]);
00071 }
00072 }
00073
00074 return rtn;
00075 }
00076
00077 Expr ListExpr::join(const Expr& other) const
00078 {
00079 Expr rtn = new ListExpr(elements_);
00080
00081 for (int i=0; i<other.size(); i++)
00082 {
00083 rtn.append(other[i]);
00084 }
00085
00086 return rtn;
00087 }
00088
00089 int ListExpr::size() const
00090 {
00091 return elements_.size();
00092 }
00093
00094 int ListExpr::totalSize() const
00095 {
00096 int rtn = 0;
00097
00098 for (int i=0; i<this->size(); i++)
00099 {
00100 rtn += elements_[i].totalSize();
00101 }
00102
00103 return rtn;
00104 }
00105
00106 std::ostream& ListExpr::toText(std::ostream& os, bool paren) const
00107 {
00108 os << "{";
00109 for (int i=0; i<elements_.size(); i++)
00110 {
00111 elements_[i].ptr()->toText(os, paren);
00112 if (i < elements_.size()-1) os << ", ";
00113 }
00114 os << "}";
00115 return os;
00116 }
00117
00118
00119 XMLObject ListExpr::toXML() const
00120 {
00121 XMLObject rtn("ListExpr");
00122 for (int i=0; i<elements_.length(); i++)
00123 {
00124 rtn.addChild(elements_[i].toXML());
00125 }
00126 return rtn;
00127 }
00128
00129