From 18ef14486e46064f4317ab407c5fe0afa3209d4b Mon Sep 17 00:00:00 2001 From: Boris Kolpackov Date: Thu, 4 Aug 2011 13:29:43 +0200 Subject: Add support for value wrappers Wrapper is a class that wraps another type. Examples of wrappers are various smart pointers, holders, etc. A wrapper can be transparent or it can handle the NULL semantics. The new odb::nullable class template is a NULL wrapper that helps to add the NULL semantics to a value type. New test: common/wrapper. --- common/wrapper/driver.cxx | 73 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 73 insertions(+) create mode 100644 common/wrapper/driver.cxx (limited to 'common/wrapper/driver.cxx') diff --git a/common/wrapper/driver.cxx b/common/wrapper/driver.cxx new file mode 100644 index 0000000..ed4d83f --- /dev/null +++ b/common/wrapper/driver.cxx @@ -0,0 +1,73 @@ +// file : common/wrapper/driver.cxx +// author : Boris Kolpackov +// copyright : Copyright (c) 2009-2011 Code Synthesis Tools CC +// license : GNU GPL v2; see accompanying LICENSE file + +// Test wrapper machinery. +// + +#include // std::auto_ptr +#include +#include + +#include +#include + +#include + +#include "test.hxx" +#include "test-odb.hxx" + +using namespace std; +using namespace odb::core; + +int +main (int argc, char* argv[]) +{ + try + { + auto_ptr db (create_database (argc, argv)); + + // + // + unsigned long id; + { + object o; + o.num.reset (new unsigned long (123)); + o.nstrs.push_back (nullable_string ()); + o.nstrs.push_back (nullable_string ("123")); +#ifdef HAVE_TR1_MEMORY + o.tr1_strs.push_back (tr1_nullable_string ()); + o.tr1_strs.push_back (tr1_nullable_string (new string ("123"))); +#endif + + transaction t (db->begin ()); + id = db->persist (o); + t.commit (); + } + + // + // + { + transaction t (db->begin ()); + auto_ptr o (db->load (id)); + t.commit (); + + assert (*o->num == 123); + assert (o->str.get () == 0); + assert (o->nstr.null ()); + assert (o->nstrs[0].null ()); + assert (o->nstrs[1].get () == "123"); +#ifdef HAVE_TR1_MEMORY + assert (!o->tr1_str); + assert (!o->tr1_strs[0]); + assert (*o->tr1_strs[1] == "123"); +#endif + } + } + catch (const odb::exception& e) + { + cerr << e.what () << endl; + return 1; + } +} -- cgit v1.1