// file : odb/context.hxx // author : Boris Kolpackov // copyright : Copyright (c) 2009-2010 Code Synthesis Tools CC // license : GNU GPL v2; see accompanying LICENSE file #ifndef ODB_CONTEXT_HXX #define ODB_CONTEXT_HXX #include #include #include // std::size_t #include #include #include #include using std::endl; class generation_failed {}; class context { public: typedef std::size_t size_t; typedef std::string string; typedef ::options options_type; private: struct data; cutl::shared_ptr data_; public: std::ostream& os; semantics::unit& unit; options_type const& options; private: struct data { }; public: context (std::ostream&, semantics::unit&, options_type const&); context (context&); private: context& operator= (context const&); }; // Checks if scope Y names any of X. // template bool has (Y& y) { for (semantics::scope::names_iterator i (y.names_begin ()), e (y.names_end ()); i != e; ++i) if (i->named (). template is_a ()) return true; return false; } // Standard namespace traverser. // struct namespace_: traversal::namespace_, context { namespace_ (context& c) : context (c) {} virtual void traverse (type&); }; #endif // ODB_CONTEXT_HXX