00001 /* Basis for the functions 00002 */ 00003 00004 #ifndef fncbasis_hh 00005 #define fncbasis_hh 00006 00007 #include "basics/outputOperator.hh" 00008 #include "space/space.hh" 00009 00010 namespace concepts { 00011 00012 // ************************************************************** Function ** 00013 00017 template<class F> 00018 class Function : public OutputOperator { 00019 public: 00021 template<class G> 00022 inline Function(const Space<G>& spc) : dim_(spc.dim()) {} 00023 inline Function(const uint dim) : dim_(dim) {} 00024 00026 virtual Function<F>& operator=(const Function<F>& fnc) = 0; 00027 00029 virtual F& operator()(uint i) = 0; 00031 virtual F operator()(uint i) const = 0; 00032 00034 virtual Function<F>& operator+=(const Function<F>& fnc); 00036 virtual Function<F>& operator+=(F c); 00037 00039 virtual Function<F>& operator-=(const Function<F>& fnc); 00041 virtual Function<F>& operator-=(F c); 00042 00044 virtual Function<F>& operator*=(F a); 00045 00047 virtual Function<F>& add(const Function<F>& fnc, F a); 00048 00050 uint dim() const { return dim_; } 00051 protected: 00052 virtual std::ostream& info(std::ostream& os) const; 00054 const uint dim_; 00055 }; 00056 00057 } // namespace concepts 00058 00059 #endif // fncbasis_hh