summaryrefslogtreecommitdiff
path: root/odb/tracer/source.cxx
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/source.cxx
parentcea6fb57ac8c9a893c0f404fef6c1469f0b6222b (diff)
Add generation of the image class definition
Diffstat (limited to 'odb/tracer/source.cxx')
-rw-r--r--odb/tracer/source.cxx208
1 files changed, 104 insertions, 104 deletions
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)
{