aboutsummaryrefslogtreecommitdiff
path: root/odb/tracer
diff options
context:
space:
mode:
authorBoris Kolpackov <boris@codesynthesis.com>2010-07-23 14:42:52 +0200
committerBoris Kolpackov <boris@codesynthesis.com>2010-07-23 14:42:52 +0200
commit30d797ffff4a8e2492500aea2135567f91b15aa0 (patch)
tree53fa570844ab3876026ec6621b40c74547e1db24 /odb/tracer
parentcea6fb57ac8c9a893c0f404fef6c1469f0b6222b (diff)
Add generation of the image class definition
Diffstat (limited to 'odb/tracer')
-rw-r--r--odb/tracer/header.cxx216
-rw-r--r--odb/tracer/inline.cxx68
-rw-r--r--odb/tracer/source.cxx208
3 files changed, 246 insertions, 246 deletions
diff --git a/odb/tracer/header.cxx b/odb/tracer/header.cxx
index c023e58..8c7254d 100644
--- a/odb/tracer/header.cxx
+++ b/odb/tracer/header.cxx
@@ -6,131 +6,131 @@
#include <odb/common.hxx>
#include <odb/tracer/header.hxx>
-namespace
+namespace tracer
{
- struct class_: traversal::class_, context
+ namespace
{
- class_ (context& c)
- : context (c)
+ struct class_: traversal::class_, context
{
- }
+ class_ (context& c)
+ : context (c)
+ {
+ }
- virtual void
- traverse (type& c)
- {
- if (c.file () != unit.file ())
- return;
+ virtual void
+ traverse (type& c)
+ {
+ if (c.file () != unit.file ())
+ return;
- if (!c.count ("object"))
- return;
+ if (!c.count ("object"))
+ return;
- string const& type (c.fq_name ());
+ string const& type (c.fq_name ());
- // Find the id member and type.
- //
- id_member t (*this);
- t.traverse (c);
+ // Find the id member and type.
+ //
+ id_member t (*this);
+ t.traverse (c);
+
+ if (t.member () == 0)
+ {
+ cerr << c.file () << ":" << c.line () << ":" << c.column ()
+ << " error: no data member designated as object id" << endl;
+
+ cerr << c.file () << ":" << c.line () << ":" << c.column ()
+ << " info: use '#pragma odb id' to specify object id member"
+ << endl;
+
+ throw generation_failed ();
+ }
+
+ semantics::data_member& id (*t.member ());
+ semantics::type& id_type (id.type ());
+
+ if (id_type.anonymous ())
+ {
+ // Can be a template-id (which we should handle eventually) or an
+ // anonymous type in member declaration (e.g., struct {...} m_;).
+ //
+ cerr << id.file () << ":" << id.line () << ":" << id.column ()
+ << " error: unnamed type in data member declaration" << endl;
+
+ cerr << id.file () << ":" << id.line () << ":" << id.column ()
+ << " info: use 'typedef' to name this type"
+ << endl;
+
+ throw generation_failed ();
+ }
+
+ os << "// " << c.name () << endl
+ << "//" << endl;
+
+ os << "template <>" << endl
+ << "class access::object_traits< " << type << " >: " << endl
+ << " public access::object_memory< " << type << " >," << endl
+ << " public access::object_factory< " << type << " >"
+ << "{"
+ << "public:" << endl;
+
+ // object_type & shared_ptr
+ //
+ os << "typedef " << type << " object_type;";
- if (t.member () == 0)
- {
- cerr << c.file () << ":" << c.line () << ":" << c.column ()
- << " error: no data member designated as object id" << endl;
+ // id_type
+ //
+ os << "typedef " << id_type.fq_name () << " id_type;"
+ << endl;
- cerr << c.file () << ":" << c.line () << ":" << c.column ()
- << " info: use '#pragma odb id' to specify object id member"
- << endl;
+ // id_source
+ //
+ os << "static const odb::id_source id_source = odb::ids_assigned;"
+ << endl;
- throw generation_failed ();
- }
+ // type_name ()
+ //
+ os << "static const char*" << endl
+ << "type_name ();"
+ << endl;
- semantics::data_member& id (*t.member ());
- semantics::type& id_type (id.type ());
+ // id ()
+ //
+ os << "static id_type" << endl
+ << "id (const object_type&);"
+ << endl;
- if (id_type.anonymous ())
- {
- // Can be a template-id (which we should handle eventually) or an
- // anonymous type in member declaration (e.g., struct {...} m_;).
+ // persist ()
//
- cerr << id.file () << ":" << id.line () << ":" << id.column ()
- << " error: unnamed type in data member declaration" << endl;
+ os << "static void" << endl
+ << "persist (database&, object_type&);"
+ << endl;
- cerr << id.file () << ":" << id.line () << ":" << id.column ()
- << " info: use 'typedef' to name this type"
- << endl;
+ // store ()
+ //
+ os << "static void" << endl
+ << "store (database&, object_type&);"
+ << endl;
- throw generation_failed ();
- }
+ // erase ()
+ //
+ os << "static void" << endl
+ << "erase (database&, const id_type&);"
+ << endl;
- os << "// " << c.name () << endl
- << "//" << endl;
-
- os << "template <>" << endl
- << "class access::object_traits< " << type << " >: " << endl
- << " public access::object_memory< " << type << " >," << endl
- << " public access::object_factory< " << type << " >"
- << "{"
- << "public:" << endl;
-
- // object_type & shared_ptr
- //
- os << "typedef " << type << " object_type;";
-
- // id_type
- //
- os << "typedef " << id_type.fq_name () << " id_type;"
- << endl;
-
- // id_source
- //
- os << "static const odb::id_source id_source = odb::ids_assigned;"
- << endl;
-
- // type_name ()
- //
- os << "static const char*" << endl
- << "type_name ();"
- << endl;
-
- // id ()
- //
- os << "static id_type" << endl
- << "id (const object_type&);"
- << endl;
-
- // persist ()
- //
- os << "static void" << endl
- << "persist (database&, object_type&);"
- << endl;
-
- // store ()
- //
- os << "static void" << endl
- << "store (database&, object_type&);"
- << endl;
-
- // erase ()
- //
- os << "static void" << endl
- << "erase (database&, const id_type&);"
- << endl;
-
- // find ()
- //
- os << "static pointer_type" << endl
- << "find (database&, const id_type&);"
- << endl;
-
- os << "static bool" << endl
- << "find (database&, const id_type&, object_type&);";
-
- os << "};";
- }
- };
-}
+ // find ()
+ //
+ os << "static pointer_type" << endl
+ << "find (database&, const id_type&);"
+ << endl;
+
+ os << "static bool" << endl
+ << "find (database&, const id_type&, object_type&);";
+
+ os << "};";
+ }
+ };
+ }
-namespace tracer
-{
void
generate_header (context& ctx)
{
diff --git a/odb/tracer/inline.cxx b/odb/tracer/inline.cxx
index 6beb8a8..ef8cf15 100644
--- a/odb/tracer/inline.cxx
+++ b/odb/tracer/inline.cxx
@@ -6,50 +6,50 @@
#include <odb/common.hxx>
#include <odb/tracer/inline.hxx>
-namespace
+namespace tracer
{
- struct class_: traversal::class_, context
+ namespace
{
- class_ (context& c)
- : context (c)
+ struct class_: traversal::class_, context
{
- }
+ class_ (context& c)
+ : context (c)
+ {
+ }
- virtual void
- traverse (type& c)
- {
- if (c.file () != unit.file ())
- return;
+ virtual void
+ traverse (type& c)
+ {
+ if (c.file () != unit.file ())
+ return;
- if (!c.count ("object"))
- return;
+ if (!c.count ("object"))
+ return;
- string const& type (c.fq_name ());
- string traits ("access::object_traits< " + type + " >");
+ string const& type (c.fq_name ());
+ string traits ("access::object_traits< " + type + " >");
- id_member t (*this);
- t.traverse (c);
- semantics::data_member& id (*t.member ());
+ id_member t (*this);
+ t.traverse (c);
+ semantics::data_member& id (*t.member ());
- os << "// " << c.name () << endl
- << "//" << endl
- << endl;
+ os << "// " << c.name () << endl
+ << "//" << endl
+ << endl;
- // id ()
- //
- os << "inline" << endl
- << traits << "::id_type" << endl
- << traits << "::" << endl
- << "id (const object_type& obj)"
- << "{"
- << "return obj." << id.name () << ";" << endl
- << "}";
- }
- };
-}
+ // id ()
+ //
+ os << "inline" << endl
+ << traits << "::id_type" << endl
+ << traits << "::" << endl
+ << "id (const object_type& obj)"
+ << "{"
+ << "return obj." << id.name () << ";" << endl
+ << "}";
+ }
+ };
+ }
-namespace tracer
-{
void
generate_inline (context& ctx)
{
diff --git a/odb/tracer/source.cxx b/odb/tracer/source.cxx
index e70adf1..696d707 100644
--- a/odb/tracer/source.cxx
+++ b/odb/tracer/source.cxx
@@ -6,115 +6,115 @@
#include <odb/common.hxx>
#include <odb/tracer/source.hxx>
-namespace
+namespace tracer
{
- struct class_: traversal::class_, context
+ namespace
{
- class_ (context& c)
- : context (c)
+ struct class_: traversal::class_, context
{
- }
+ class_ (context& c)
+ : context (c)
+ {
+ }
- virtual void
- traverse (type& c)
- {
- if (c.file () != unit.file ())
- return;
-
- if (!c.count ("object"))
- return;
-
- string const& type (c.fq_name ());
- string traits ("access::object_traits< " + type + " >");
-
- id_member t (*this);
- t.traverse (c);
- semantics::data_member& id (*t.member ());
-
- os << "// " << c.name () << endl
- << "//" << endl
- << endl;
-
- // type_name ()
- //
- os << "const char* " << traits << "::" << endl
- << "type_name ()"
- << "{"
- << "return \"" << type << "\";"
- << "}";
-
- // persist ()
- //
- os << "void " << traits << "::" << endl
- << "persist (database&, object_type& obj)"
- << "{"
- << "std::cout << \"insert \" << type_name () << \" id \" << " <<
- "id (obj) << std::endl;"
- << endl
- << "if (id (obj) == id_type ())" << endl
- << "throw object_already_persistent ();"
- << "}";
-
- // store ()
- //
- os << "void " << traits << "::" << endl
- << "store (database&, object_type& obj)"
- << "{"
- << "std::cout << \"update \" << type_name () << \" id \" << " <<
- "id (obj) << std::endl;"
- << endl
- << "if (id (obj) == id_type ())" << endl
- << "throw object_not_persistent ();"
- << "}";
-
- // erase ()
- //
- os << "void " << traits << "::" << endl
- << "erase (database&, const id_type& id)"
- << "{"
- << "std::cout << \"delete \" << type_name () << \" id \" << " <<
- "id << std::endl;"
- << endl
- << "if (id == id_type ())" << endl
- << "throw object_not_persistent ();"
- << "}";
-
- // find ()
- //
- os << traits << "::pointer_type" << endl
- << traits << "::" << endl
- << "find (database&, const id_type& id)"
- << "{"
- << "std::cout << \"select \" << type_name () << \" id \" << " <<
- "id << std::endl;"
- << endl
- << "if (id == id_type ())" << endl
- << "return pointer_type (0);"
- << endl
- << "pointer_type r (access::object_factory< " << type <<
- " >::create ());"
- << "r->" << id.name () << " = id;"
- << "return r;"
- << "}";
-
- os << "bool " << traits << "::" << endl
- << "find (database&, const id_type& id, object_type& obj)"
- << "{"
- << "std::cout << \"select \" << type_name () << \" id \" << " <<
- "id << std::endl;"
- << endl
- << "if (id == id_type ())" << endl
- << "return false;"
- << endl
- << "obj." << id.name () << " = id;"
- << "return true;"
- << "}";
- }
- };
-}
+ virtual void
+ traverse (type& c)
+ {
+ if (c.file () != unit.file ())
+ return;
+
+ if (!c.count ("object"))
+ return;
+
+ string const& type (c.fq_name ());
+ string traits ("access::object_traits< " + type + " >");
+
+ id_member t (*this);
+ t.traverse (c);
+ semantics::data_member& id (*t.member ());
+
+ os << "// " << c.name () << endl
+ << "//" << endl
+ << endl;
+
+ // type_name ()
+ //
+ os << "const char* " << traits << "::" << endl
+ << "type_name ()"
+ << "{"
+ << "return \"" << type << "\";"
+ << "}";
+
+ // persist ()
+ //
+ os << "void " << traits << "::" << endl
+ << "persist (database&, object_type& obj)"
+ << "{"
+ << "std::cout << \"insert \" << type_name () << \" id \" << " <<
+ "id (obj) << std::endl;"
+ << endl
+ << "if (id (obj) == id_type ())" << endl
+ << "throw object_already_persistent ();"
+ << "}";
+
+ // store ()
+ //
+ os << "void " << traits << "::" << endl
+ << "store (database&, object_type& obj)"
+ << "{"
+ << "std::cout << \"update \" << type_name () << \" id \" << " <<
+ "id (obj) << std::endl;"
+ << endl
+ << "if (id (obj) == id_type ())" << endl
+ << "throw object_not_persistent ();"
+ << "}";
+
+ // erase ()
+ //
+ os << "void " << traits << "::" << endl
+ << "erase (database&, const id_type& id)"
+ << "{"
+ << "std::cout << \"delete \" << type_name () << \" id \" << " <<
+ "id << std::endl;"
+ << endl
+ << "if (id == id_type ())" << endl
+ << "throw object_not_persistent ();"
+ << "}";
+
+ // find ()
+ //
+ os << traits << "::pointer_type" << endl
+ << traits << "::" << endl
+ << "find (database&, const id_type& id)"
+ << "{"
+ << "std::cout << \"select \" << type_name () << \" id \" << " <<
+ "id << std::endl;"
+ << endl
+ << "if (id == id_type ())" << endl
+ << "return pointer_type (0);"
+ << endl
+ << "pointer_type r (access::object_factory< " << type <<
+ " >::create ());"
+ << "r->" << id.name () << " = id;"
+ << "return r;"
+ << "}";
+
+ os << "bool " << traits << "::" << endl
+ << "find (database&, const id_type& id, object_type& obj)"
+ << "{"
+ << "std::cout << \"select \" << type_name () << \" id \" << " <<
+ "id << std::endl;"
+ << endl
+ << "if (id == id_type ())" << endl
+ << "return false;"
+ << endl
+ << "obj." << id.name () << " = id;"
+ << "return true;"
+ << "}";
+ }
+ };
+ }
-namespace tracer
-{
void
generate_source (context& ctx)
{