summaryrefslogtreecommitdiff
path: root/odb/context.hxx
diff options
context:
space:
mode:
authorBoris Kolpackov <boris@codesynthesis.com>2010-03-30 11:05:46 +0200
committerBoris Kolpackov <boris@codesynthesis.com>2010-03-30 11:05:46 +0200
commitb143a4a1a028d3147b9b603e77866780b34ee828 (patch)
tree521e0d3602a08970cf477e3f139cc40f9dd01af2 /odb/context.hxx
parentcf80396f8b6147e9048c1f3bd50b3086f754d037 (diff)
Add code generator infrastructure
Diffstat (limited to 'odb/context.hxx')
-rw-r--r--odb/context.hxx79
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