dogen::formatters::artefact enum_header_formatter:: format(const context& ctx, const yarn::element& e) const { const auto id(e.name().id()); assistant a(ctx, archetype_location(), true/*requires_header_guard*/, id); const auto& ye(a.as<yarn::enumeration>(static_artefact(), e)); { auto sbf(a.make_scoped_boilerplate_formatter()); { const auto ns(a.make_namespaces(ye.name())); auto snf(a.make_scoped_namespace_formatter(ns)); a.stream() << std::endl; a.stream() << "class " << ye.name().simple() << "_generator {" << std::endl; a.stream() << "public:" << std::endl; a.stream() << " " << ye.name().simple() << "_generator();" << std::endl; a.stream() << std::endl; a.stream() << "public:" << std::endl; a.stream() << " typedef " << a.get_qualified_name(ye.name()) << " result_type;" << std::endl; a.stream() << std::endl; a.stream() << "public:" << std::endl; a.stream() << " static void populate(const unsigned int position, result_type& v);" << std::endl; a.stream() << " static result_type create(const unsigned int position);" << std::endl; a.stream() << " result_type operator()();" << std::endl; a.stream() << std::endl; a.stream() << "private:" << std::endl; a.stream() << " unsigned int position_;" << std::endl; a.stream() << "};" << std::endl; a.stream() << std::endl; } // snf a.stream() << std::endl; } // sbf return a.make_artefact(); }
dogen::formatters::artefact enum_header_formatter:: format(const context& ctx, const yarn::element& e) const { const auto id(e.name().id()); assistant a(ctx, archetype_location(), true/*requires_header_guard*/, id); const auto& ye(a.as<yarn::enumeration>(static_artefact(), e)); { auto sbf(a.make_scoped_boilerplate_formatter()); { const auto ns(a.make_namespaces(e.name())); auto snf(a.make_scoped_namespace_formatter(ns)); a.stream() << std::endl; a.comment(e.documentation()); a.stream() << "enum class " << ye.name().simple() << " : " << a.get_qualified_name(ye.underlying_type()) << " {" << std::endl; dogen::formatters::sequence_formatter sf(ye.enumerators().size()); for (const auto& en : ye.enumerators()) { a.stream() << " " << en.name() << " = " << en.value() << sf.postfix() << a.comment_inline(en.documentation()) << std::endl; sf.next(); } a.stream() << "};" << std::endl; a.stream() << std::endl; } // snf a.stream() << std::endl; } // sbf return a.make_artefact(); }
dogen::formatters::artefact exception_header_formatter:: format(const context& ctx, const yarn::element& e) const { const auto id(e.name().id()); assistant a(ctx, archetype_location(), true/*requires_header_guard*/, id); const auto& ye(a.as<yarn::exception>(static_artefact(), e)); { auto sbf(a.make_scoped_boilerplate_formatter()); { const auto ns(a.make_namespaces(ye.name())); auto snf(a.make_scoped_namespace_formatter(ns)); a.stream() << std::endl; a.comment(ye.documentation()); a.stream() << "class " << ye.name().simple() << " : public virtual std::exception, public virtual boost::exception {" << std::endl; a.stream() << "public:" << std::endl; a.stream() << " " << ye.name().simple() << "() = default;" << std::endl; a.stream() << " ~" << ye.name().simple() << "() noexcept = default;" << std::endl; a.stream() << std::endl; a.stream() << "public:" << std::endl; a.stream() << " " << ye.name().simple() << "(const std::string& message) : message_(message) { }" << std::endl; a.stream() << std::endl; a.stream() << "public:" << std::endl; a.stream() << " const char* what() const noexcept { return(message_.c_str()); }" << std::endl; a.stream() << std::endl; a.stream() << "private:" << std::endl; a.stream() << " const std::string message_;" << std::endl; a.stream() << "};" << std::endl; a.stream() << std::endl; } // snf a.stream() << std::endl; } // sbf return a.make_artefact(); }
dogen::formatters::artefact enum_header_formatter:: format(const context& ctx, const yarn::element& e) const { const auto id(e.name().id()); assistant a(ctx, archetype_location(), true/*requires_header_guard*/, id); const auto& ye(a.as<yarn::enumeration>(static_artefact(), e)); { auto sbf(a.make_scoped_boilerplate_formatter()); a.stream() << std::endl; a.stream() << "template<class Archive>" << std::endl; a.stream() << "void serialize(Archive& ar, " << a.get_qualified_name(ye.name()) << "& v, unsigned int /*version*/){" << std::endl; a.stream() << " using boost::serialization::make_nvp;" << std::endl; a.stream() << " ar & make_nvp(\"" << ye.name().simple() << "\", v);" << std::endl; a.stream() << "}" << std::endl; a.stream() << std::endl; } // sbf return a.make_artefact(); }
dogen::formatters::artefact class_header_formatter:: format(const context& ctx, const yarn::element& e) const { const auto id(e.name().id()); assistant a(ctx, archetype_location(), true/*requires_header_guard*/, id); const auto& o(a.as<yarn::object>(static_artefact(), e)); { const auto qn(a.get_qualified_name(o.name())); auto sbf(a.make_scoped_boilerplate_formatter()); if (!o.is_parent() && o.parent()) { const auto& pn(*o.parent()); const auto pqn(a.get_qualified_name(pn)); a.stream() << "namespace boost {" << std::endl; a.stream() << std::endl; a.stream() << "template<>struct" << std::endl; a.stream() << "is_virtual_base_of<" << std::endl; a.stream() << " " << pqn << "," << std::endl; a.stream() << " " << qn << std::endl; a.stream() << "> : public mpl::true_ {};" << std::endl; a.stream() << std::endl; a.stream() << "}" << std::endl; } a.stream() << std::endl; a.stream() << "BOOST_SERIALIZATION_SPLIT_FREE(" << qn << ")" << std::endl; if (o.is_parent()) { a.stream() << "BOOST_SERIALIZATION_ASSUME_ABSTRACT(" << qn << ")" << std::endl; a.stream() << std::endl; } a.stream() << "namespace boost {" << std::endl; a.stream() << "namespace serialization {" << std::endl; a.stream() << std::endl; a.stream() << "template<typename Archive>" << std::endl; a.stream() << "void save(Archive& ar, const " << qn << "& v, unsigned int version);" << std::endl; a.stream() << std::endl; a.stream() << "template<typename Archive>" << std::endl; a.stream() << "void load(Archive& ar, " << qn << "& v, unsigned int version);" << std::endl; a.stream() << std::endl; a.stream() << "} }" << std::endl; a.stream() << std::endl; } // sbf return a.make_artefact(); }
dogen::formatters::artefact enum_header_formatter:: format(const context& ctx, const yarn::element& e) const { const auto id(e.name().id()); assistant a(ctx, archetype_location(), true/*requires_header_guard*/, id); const auto& ye(a.as<yarn::enumeration>(static_artefact(), e)); { auto sbf(a.make_scoped_boilerplate_formatter()); { const auto ns(a.make_namespaces(ye.name())); auto snf(a.make_scoped_namespace_formatter(ns)); a.stream() << std::endl; a.stream() << "#ifdef ODB_COMPILER" << std::endl; a.stream() << std::endl; a.stream() << "#endif" << std::endl; a.stream() << std::endl; } // snf a.stream() << std::endl; } // sbf return a.make_artefact(); }
boost::filesystem::path enum_header_formatter::full_path( const formattables::locator& l, const yarn::name& n) const { return l.make_full_path_for_cpp_header(n, static_artefact()); }
dogen::formatters::artefact enum_formatter::format(const context& ctx, const yarn::element& e) const { const auto id(e.name().id()); assistant a(ctx, archetype_location(), id); const auto& ye(a.as<yarn::enumeration>(static_artefact(), e)); { const auto sn(e.name().simple()); auto sbf(a.make_scoped_boilerplate_formatter()); { a.stream() << "using System;" << std::endl; a.stream() << "using System.Collections;" << std::endl; a.stream() << "using System.Collections.Generic;" << std::endl; a.stream() << std::endl; const auto ns(a.make_namespaces(e.name())); auto snf(a.make_scoped_namespace_formatter(ns)); a.stream() << " /// <summary>" << std::endl; a.stream() << " /// Generates sequences of " << sn << "." << std::endl; a.stream() << " /// </summary>" << std::endl; a.stream() << " public static class " << sn << "SequenceGenerator" << std::endl; a.stream() << " {" << std::endl; a.stream() << " static internal " << sn << " Create(uint position)" << std::endl; a.stream() << " {" << std::endl; a.stream() << " var result = (" << sn << ")(position % " << ye.enumerators().size() << ");" << std::endl; a.stream() << " return result;" << std::endl; a.stream() << " }" << std::endl; a.stream() << std::endl; a.stream() << " #region Enumerator" << std::endl; a.stream() << " private class " << sn << "Enumerator : IEnumerator, IEnumerator<" << sn << ">, IDisposable" << std::endl; a.stream() << " {" << std::endl; a.stream() << " #region Properties" << std::endl; a.stream() << " private uint _position;" << std::endl; a.stream() << " private " << sn << " _current;" << std::endl; a.stream() << " #endregion" << std::endl; a.stream() << std::endl; a.stream() << " private void PopulateCurrent()" << std::endl; a.stream() << " {" << std::endl; a.stream() << " _current = " << sn << "SequenceGenerator.Create(_position);" << std::endl; a.stream() << " }" << std::endl; a.stream() << std::endl; a.stream() << " #region IDisposable" << std::endl; a.stream() << " public void Dispose()" << std::endl; a.stream() << " {" << std::endl; a.stream() << " }" << std::endl; a.stream() << " #endregion" << std::endl; a.stream() << std::endl; a.stream() << " #region IEnumerator implementation" << std::endl; a.stream() << " public bool MoveNext()" << std::endl; a.stream() << " {" << std::endl; a.stream() << " ++_position;" << std::endl; a.stream() << " PopulateCurrent();" << std::endl; a.stream() << " return true;" << std::endl; a.stream() << " }" << std::endl; a.stream() << std::endl; a.stream() << " public void Reset()" << std::endl; a.stream() << " {" << std::endl; a.stream() << " _position = 0;" << std::endl; a.stream() << " PopulateCurrent();" << std::endl; a.stream() << " }" << std::endl; a.stream() << std::endl; a.stream() << " public object Current {" << std::endl; a.stream() << " get" << std::endl; a.stream() << " {" << std::endl; a.stream() << " return _current;" << std::endl; a.stream() << " }" << std::endl; a.stream() << " }" << std::endl; a.stream() << std::endl; a.stream() << " " << sn << " IEnumerator<" << sn << ">.Current" << std::endl; a.stream() << " {" << std::endl; a.stream() << " get" << std::endl; a.stream() << " {" << std::endl; a.stream() << " return _current;" << std::endl; a.stream() << " }" << std::endl; a.stream() << " }" << std::endl; a.stream() << " #endregion" << std::endl; a.stream() << std::endl; a.stream() << " public " << sn << "Enumerator()" << std::endl; a.stream() << " {" << std::endl; a.stream() << " PopulateCurrent();" << std::endl; a.stream() << " }" << std::endl; a.stream() << " }" << std::endl; a.stream() << " #endregion" << std::endl; a.stream() << std::endl; a.stream() << " #region Enumerable" << std::endl; a.stream() << " private class " << sn << "Enumerable : IEnumerable, IEnumerable<" << sn << ">" << std::endl; a.stream() << " {" << std::endl; a.stream() << " #region IEnumerable implementation" << std::endl; a.stream() << " public IEnumerator GetEnumerator()" << std::endl; a.stream() << " {" << std::endl; a.stream() << " return new " << sn << "Enumerator();" << std::endl; a.stream() << " }" << std::endl; a.stream() << std::endl; a.stream() << " IEnumerator<" << sn << "> IEnumerable<" << sn << ">.GetEnumerator()" << std::endl; a.stream() << " {" << std::endl; a.stream() << " return new " << sn << "Enumerator();" << std::endl; a.stream() << " }" << std::endl; a.stream() << " #endregion" << std::endl; a.stream() << " }" << std::endl; a.stream() << " #endregion" << std::endl; a.stream() << std::endl; a.stream() << " static public IEnumerable<" << sn << "> Sequence()" << std::endl; a.stream() << " {" << std::endl; a.stream() << " return new " << sn << "Enumerable();" << std::endl; a.stream() << " }" << std::endl; a.stream() << " }" << std::endl; } } // sbf return a.make_artefact(); }
boost::filesystem::path primitive_header_formatter::inclusion_path( const formattables::locator& l, const yarn::name& n) const { return l.make_inclusion_path_for_cpp_header(n, static_artefact()); }