00001 00008 /***************************************************************************** 00009 ** Ifdefs 00010 *****************************************************************************/ 00011 00012 #ifndef ECL_CONTAINERS_STENCIL_FORMATTERS_HPP_ 00013 #define ECL_CONTAINERS_STENCIL_FORMATTERS_HPP_ 00014 00015 /***************************************************************************** 00016 ** Includes 00017 *****************************************************************************/ 00018 00019 #include <cmath> 00020 #include <ecl/config/macros.hpp> 00021 #include <ecl/formatters/common.hpp> 00022 #include <ecl/formatters/number.hpp> 00023 #include <ecl/formatters/floats.hpp> 00024 #include <ecl/mpl/enable_if.hpp> 00025 #include <ecl/type_traits/fundamental_types.hpp> 00026 #include "../common/formatters.hpp" 00027 00028 /***************************************************************************** 00029 ** Namespaces 00030 *****************************************************************************/ 00031 00032 namespace ecl 00033 { 00034 00035 /***************************************************************************** 00036 ** Forward Declarations 00037 *****************************************************************************/ 00038 00039 template<typename Container> 00040 class Stencil; 00041 00042 /***************************************************************************** 00043 ** Namespaces 00044 *****************************************************************************/ 00045 00046 namespace formatters 00047 { 00048 00049 /***************************************************************************** 00050 ** Using 00051 *****************************************************************************/ 00052 00071 template<typename ValueType, typename Container, typename Enable = void> 00072 class ECL_PUBLIC StencilFormatter 00073 { 00074 public: 00075 virtual ~StencilFormatter() 00076 {} 00083 const ecl::Stencil< Container >& operator()(const ecl::Stencil< Container > &stencil) { 00084 return stencil; 00085 } 00086 //ecl::Stencil< Container >& operator()(const ecl::Stencil< Container > &stencil) { return stencil;} // this was the old version - couldn't do in place format(xxx.stencil()) commands 00087 }; 00088 00089 /***************************************************************************** 00090 ** Specialisations 00091 *****************************************************************************/ 00092 00102 template <typename ValueType, typename Container> 00103 class ECL_PUBLIC StencilFormatter< ValueType, Container, typename ecl::enable_if< ecl::is_float<ValueType> >::type > : public FloatContainerFormatter< ecl::Stencil< Container > > 00104 { 00105 public: 00114 StencilFormatter(const int p=2, const int w=-1) : FloatContainerFormatter< ecl::Stencil< Container > >(p,w) {}; 00115 virtual ~StencilFormatter() 00116 {} 00117 }; 00118 00119 } // namespace formatters 00120 } // namespace ecl 00121 00122 #endif /* ECL_CONTAINERS_STENCIL_FORMATTERS_HPP_ */