#ifndef SPROUT_COMPOST_FORMATS_EFFECTED_LEFT_HPP #define SPROUT_COMPOST_FORMATS_EFFECTED_LEFT_HPP #include #include #include #include #include namespace sprout { namespace compost { namespace formats { // // effect_left_holder // template class effect_left_holder { public: typedef Adaptor adaptor_type; private: adaptor_type adaptor_; public: explicit SPROUT_CONSTEXPR effect_left_holder(adaptor_type const& adaptor) : adaptor_(adaptor) {} SPROUT_CONSTEXPR adaptor_type const& adaptor() const { return adaptor_; } }; // // effected_left_cannel_forwarder // class effected_left_cannel_forwarder { public: template SPROUT_CONSTEXPR sprout::compost::formats::effect_left_holder operator()(Adaptor const& adaptor) const { return sprout::compost::formats::effect_left_holder(adaptor); } }; // // effected_left_cannel // namespace { SPROUT_STATIC_CONSTEXPR sprout::compost::formats::effected_left_cannel_forwarder effected_left_cannel = {}; } // anonymous-namespace // // operator| // template inline SPROUT_CONSTEXPR auto operator|(Range&& lhs, sprout::compost::formats::effect_left_holder const& rhs) -> decltype( sprout::lvalue_forward(lhs) | sprout::compost::formats::left_channel | rhs.adaptor() | sprout::compost::formats::stereo(sprout::lvalue_forward(lhs) | sprout::compost::formats::right_channel) ) { return sprout::lvalue_forward(lhs) | sprout::compost::formats::left_channel | rhs.adaptor() | sprout::compost::formats::stereo(sprout::lvalue_forward(lhs) | sprout::compost::formats::right_channel) ; } } // namespace formats using sprout::compost::formats::effected_left_cannel; } // namespace compost } // namespace sprout #endif // #ifndef SPROUT_COMPOST_FORMATS_EFFECTED_LEFT_HPP