From b143a4a1a028d3147b9b603e77866780b34ee828 Mon Sep 17 00:00:00 2001 From: Boris Kolpackov Date: Tue, 30 Mar 2010 11:05:46 +0200 Subject: Add code generator infrastructure --- odb/context.hxx | 79 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 79 insertions(+) create mode 100644 odb/context.hxx (limited to 'odb/context.hxx') 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 +// 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 +#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 -- cgit v1.1