diff options
author | Boris Kolpackov <boris@codesynthesis.com> | 2010-03-30 11:05:46 +0200 |
---|---|---|
committer | Boris Kolpackov <boris@codesynthesis.com> | 2010-03-30 11:05:46 +0200 |
commit | b143a4a1a028d3147b9b603e77866780b34ee828 (patch) | |
tree | 521e0d3602a08970cf477e3f139cc40f9dd01af2 /odb/context.hxx | |
parent | cf80396f8b6147e9048c1f3bd50b3086f754d037 (diff) |
Add code generator infrastructure
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 |