diff options
Diffstat (limited to 'odb/context.hxx')
-rw-r--r-- | odb/context.hxx | 79 |
1 files changed, 79 insertions, 0 deletions
diff --git a/odb/context.hxx b/odb/context.hxx new file mode 100644 index 0000000..efdf610 --- /dev/null +++ b/odb/context.hxx @@ -0,0 +1,79 @@ +// file : odb/context.hxx +// author : Boris Kolpackov <boris@codesynthesis.com> +// 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 <set> +#include <map> +#include <string> +#include <ostream> +#include <cstddef> // std::size_t + +#include <cutl/shared-ptr.hxx> + +#include <options.hxx> +#include <semantics.hxx> +#include <traversal.hxx> + +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> 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 <typename X, typename Y> +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<X> ()) + 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 |