/*============================================================================= Copyright (c) 2011-2019 Bolero MURAKAMI https://github.com/bolero-MURAKAMI/Sprout Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) =============================================================================*/ #ifndef SPROUT_BRAINFUCK_OOK_HPP #define SPROUT_BRAINFUCK_OOK_HPP #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include namespace sprout { namespace brainfuck { namespace ook { // // to_brainfuck // template inline SPROUT_CONSTEXPR sprout::pair::type, bool> to_brainfuck(InputIterator first, InputIterator last, Result const& result) { return sprout::brainfuck::detail::parsed_to_brainfuck( sprout::weed::parse( first, last, *sprout::weed::lim::static_size>( sprout::weed::replace('>') ["Ook." >> *sprout::weed::space_ >> "Ook?"] | sprout::weed::replace('>') ["Ook?" >> *sprout::weed::space_ >> "Ook."] | sprout::weed::replace('>') ["Ook." >> *sprout::weed::space_ >> "Ook."] | sprout::weed::replace('>') ["Ook!" >> *sprout::weed::space_ >> "Ook!"] | sprout::weed::replace('>') ["Ook!" >> *sprout::weed::space_ >> "Ook."] | sprout::weed::replace('>') ["Ook." >> *sprout::weed::space_ >> "Ook!"] | sprout::weed::replace('>') ["Ook!" >> *sprout::weed::space_ >> "Ook?"] | sprout::weed::replace('>') ["Ook?" >> *sprout::weed::space_ >> "Ook!"] | sprout::weed::replace(' ') [sprout::weed::char_] ) ), result ); } // // exec_range // template inline SPROUT_CONSTEXPR typename sprout::fixed::results::algorithm::type exec_range(BidirectionalRangeSource const& source, Output const& output, InputRangeInput const& input) { typedef typename sprout::container_construct_traits::copied_type copied_type; return sprout::brainfuck::exec_range( sprout::brainfuck::ook::to_brainfuck(sprout::begin(source), sprout::end(source), sprout::pit()).first, output, input ); } template inline SPROUT_CONSTEXPR typename sprout::fixed::results::algorithm::type exec_range(BidirectionalRangeSource const& source, Output const& output) { typedef typename sprout::container_construct_traits::copied_type copied_type; return sprout::brainfuck::exec_range( sprout::brainfuck::ook::to_brainfuck(sprout::begin(source), sprout::end(source), sprout::pit()).first, output ); } template inline SPROUT_CONSTEXPR typename sprout::fixed::results::algorithm< sprout::array::value_type, BufferSize> >::type exec_range(BidirectionalRangeSource const& source) { typedef typename sprout::container_construct_traits::copied_type copied_type; return sprout::brainfuck::exec_range( sprout::brainfuck::ook::to_brainfuck(sprout::begin(source), sprout::end(source), sprout::pit()).first ); } } // namespace ook } // namespace brainfuck } // namespace sprout #endif // #ifndef SPROUT_BRAINFUCK_OOK_HPP