// file : xsd/cxx/parser/parser-forward.cxx // author : Boris Kolpackov // copyright : Copyright (c) 2005-2009 Code Synthesis Tools CC // license : GNU GPL v2 + exceptions; see accompanying LICENSE file #include #include #include namespace CXX { namespace Parser { namespace { struct Enumeration: Traversal::Enumeration, protected virtual Context { Enumeration (Context& c) : Context (c) { } virtual Void traverse (Type& e) { os << "class " << ename (e) << ";"; } }; // // struct List: Traversal::List, protected virtual Context { List (Context& c) : Context (c) { } virtual Void traverse (Type& l) { os << "class " << ename (l) << ";"; } }; // // struct Union: Traversal::Union, protected virtual Context { Union (Context& c) : Context (c) { } virtual Void traverse (Type& u) { os << "class " << ename (u) << ";"; } }; // // struct Complex : Traversal::Complex, protected virtual Context { Complex (Context& c) : Context (c) { } virtual Void traverse (Type& c) { os << "class " << ename (c) << ";"; } }; } Void generate_parser_forward (Context& ctx) { ctx.os << "// Forward declarations" << endl << "//" << endl; Traversal::Schema schema; Traversal::Sources sources; Traversal::Names schema_names; Namespace ns (ctx); Traversal::Names names; schema >> sources >> schema; schema >> schema_names >> ns >> names; List list (ctx); Union union_ (ctx); Complex complex (ctx); Enumeration enumeration (ctx); names >> list; names >> union_; names >> complex; names >> enumeration; schema.dispatch (ctx.schema_root); ctx.os << endl; } } }