00001 00008 /***************************************************************************** 00009 ** Ifdefs 00010 *****************************************************************************/ 00011 00012 #ifndef ECL_STREAMS_MANIPULATOR_HPP_ 00013 #define ECL_STREAMS_MANIPULATOR_HPP_ 00014 00015 /***************************************************************************** 00016 ** Includes 00017 *****************************************************************************/ 00018 00019 #include <ecl/config/macros.hpp> 00020 #include <ecl/concepts/devices.hpp> 00021 #include "../macros.hpp" 00022 00023 /***************************************************************************** 00024 ** Namespaces 00025 *****************************************************************************/ 00026 00027 namespace ecl { 00028 00029 /***************************************************************************** 00030 ** Forwarding 00031 *****************************************************************************/ 00032 00033 namespace interfaces { 00034 template <typename Device, bool OutputDevice> class ECL_PUBLIC OutputTextStream; 00035 } 00036 00037 /***************************************************************************** 00038 ** Interface [Manipulator] 00039 *****************************************************************************/ 00091 template <typename Derived> 00092 class ecl_streams_PUBLIC Manipulator { 00093 public: 00108 template <typename ODevice> 00109 void insert (interfaces::OutputTextStream<ODevice,true>& ostream) { 00110 ecl_compile_time_concept_check(OutputCharDeviceConcept<ODevice>); 00111 static_cast<Derived*>(this)->action(ostream); 00112 } 00113 00114 virtual ~Manipulator() {} 00115 }; 00116 00117 } // namespace ecl 00118 00119 #endif /* ECL_STREAMS_MANIPULATOR_HPP_ */