#ifndef EOLIAN_CXX_LIST_HH #define EOLIAN_CXX_LIST_HH #include "grammar/generator.hpp" namespace efl { namespace eolian { namespace grammar { template struct list_generator { list_generator(G g, S s) : g(g), s(s) {} template bool generate(OutputIterator sink, Attribute const& attribute, Context const& context) const { auto generator = as_generator(g); auto separator = as_generator(s); bool first = true; for(auto&& c : attribute) { if(!first) if(!separator.generate(sink, attributes::unused, context)) return false; if(!generator.generate(sink, c, context)) return false; first = false; } return true; } G g; S s; }; template struct is_eager_generator > : std::true_type {}; namespace type_traits { template struct attributes_needed > : std::integral_constant {}; } template typename std::enable_if::value && grammar::is_generator::value, list_generator>::type operator%(G g, S s) { return list_generator{g, s}; } } } } #endif