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