Go to the documentation of this file.00001
00004 #ifndef vectorformula_hh
00005 #define vectorformula_hh
00006
00007 #include <vector>
00008 #include "toolbox/sharedPointer.hh"
00009 #include "elementFormula.hh"
00010
00011 namespace concepts {
00012
00013
00014
00015
00020 template<typename F, int dim>
00021 class VectorFormula : public Formula< Point<F, dim> >
00022 {
00023 public:
00024 typedef Point<F, dim> value_type;
00025 typedef RCP<const concepts::Formula<F> > EntryFormulaRCP;
00026
00027 VectorFormula<F,dim>() : formulas_()
00028 {
00029 for(int i=0; i < dim; ++i)
00030 formulas_.push_back(EntryFormulaRCP());
00031 }
00032
00037 VectorFormula<F,dim>(const std::vector< EntryFormulaRCP >& formulas)
00038 : formulas_(formulas)
00039 {
00040 conceptsAssert(formulas_.size() == dim, concepts::Assertion());
00041 }
00042
00047 Point<F, dim> operator() (const Real p, const Real t = 0.0) const
00048 {
00049 Point<F, dim> ret;
00050 for (int i=0; i < dim; ++i) {
00051 ret[i] = formulas_[i] ? (*formulas_[i])(p, t) : F(0);
00052 }
00053 return ret;
00054 }
00055
00056 Point<F, dim> operator() (const Real2d& p, const Real t = 0.0) const
00057 {
00058 Point<F, dim> ret;
00059 for (int i=0; i < dim; ++i) {
00060 ret[i] = formulas_[i] ? (*formulas_[i])(p, t) : F(0);
00061 }
00062 return ret;
00063 }
00064
00065 Point<F, dim> operator() (const Real3d& p, const Real t = 0.0) const
00066 {
00067 Point<F, dim> ret;
00068 for (int i=0; i < dim; ++i) {
00069 ret[i] = formulas_[i] ? (*formulas_[i])(p, t) : F(0);
00070 }
00071 return ret;
00072 }
00073
00075 virtual VectorFormula<F,dim>* clone() const
00076 {
00077 return new VectorFormula<F, dim>(*this);
00078 }
00079
00080 #if 0
00081 VectorFormula<F,dim>( const VectorFormula<F,dim>& other)
00082 : formulas_(other.formulas_)
00083 { }
00084 #endif
00085
00086 virtual ~VectorFormula() { }
00087
00088 const std::vector< EntryFormulaRCP >& getFormulas()
00089 {
00090 return formulas_;
00091 }
00092
00093 EntryFormulaRCP& operator[](int i)
00094 {
00095 conceptsAssert(i < dim, concepts::Assertion());
00096
00097 return formulas_[i];
00098 }
00099
00100 protected:
00101 std::vector< EntryFormulaRCP > formulas_;
00102
00103 virtual std::ostream& info(std::ostream& os) const {
00104 os << "VectorFormula([";
00105 for (int i=0; i < dim; ++i) {
00106 if (formulas_[i])
00107 os << *formulas_[i];
00108 else
00109 os << "0";
00110 if (i < dim - 1)
00111 os << ", ";
00112 }
00113 return os << "])";
00114 }
00115 };
00116
00117
00118 }
00119
00120
00121 #endif // vectorformula_hh