aboutsummaryrefslogtreecommitdiff
path: root/common/lazy-ptr/test.hxx
diff options
context:
space:
mode:
authorBoris Kolpackov <boris@codesynthesis.com>2010-12-09 10:36:15 +0200
committerBoris Kolpackov <boris@codesynthesis.com>2010-12-09 10:36:15 +0200
commit68ca8ec3227d447c6898b7c75d8ea0fb82a4af36 (patch)
tree93d2afa8e23238a87b0b2eb2f702e1910a11fb6b /common/lazy-ptr/test.hxx
parent0b4c59824e3b2b0411dd33835c67f6cd36d60a91 (diff)
Add lazy pointer support
Built-in support is provided for raw, auto, and tr1 shared/weak pointers. New test: common/lazy-ptr.
Diffstat (limited to 'common/lazy-ptr/test.hxx')
-rw-r--r--common/lazy-ptr/test.hxx144
1 files changed, 144 insertions, 0 deletions
diff --git a/common/lazy-ptr/test.hxx b/common/lazy-ptr/test.hxx
new file mode 100644
index 0000000..4aa8b3a
--- /dev/null
+++ b/common/lazy-ptr/test.hxx
@@ -0,0 +1,144 @@
+// file : common/lazy-ptr/test.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 TEST_HXX
+#define TEST_HXX
+
+#include <vector>
+#include <string>
+#include <memory>
+
+#include "tr1-memory.hxx"
+
+#include <odb/core.hxx>
+#include <odb/lazy-ptr.hxx>
+
+#ifdef HAVE_TR1_MEMORY
+#include <odb/tr1/lazy-ptr.hxx>
+#endif
+
+// Naked pointer.
+//
+using odb::lazy_ptr;
+class obj1;
+
+#pragma db object
+class cont1
+{
+public:
+ cont1 () {}
+ cont1 (unsigned long i): id (i) {}
+ ~cont1 ();
+
+ #pragma db id
+ unsigned long id;
+
+ typedef std::vector<lazy_ptr<obj1> > obj_list;
+
+ #pragma db not_null
+ obj_list o;
+};
+
+#pragma db object
+class obj1
+{
+public:
+ obj1 () {}
+ obj1 (unsigned long i): id (i) {}
+
+ #pragma db id
+ unsigned long id;
+
+ #pragma db inverse(o) not_null
+ lazy_ptr<cont1> c; // weak
+};
+
+inline cont1::
+~cont1 ()
+{
+ for (obj_list::iterator i (o.begin ()); i != o.end (); ++i)
+ if (i->loaded ())
+ delete i->get ();
+}
+
+// Auto pointer.
+//
+using std::auto_ptr;
+using odb::lazy_auto_ptr;
+
+class obj2;
+
+#pragma db object
+class cont2
+{
+public:
+ cont2 () {}
+ cont2 (unsigned long i): id (i) {}
+
+ #pragma db id
+ unsigned long id;
+
+ #pragma db not_null
+ lazy_auto_ptr<obj2> o;
+};
+
+#pragma db object
+class obj2
+{
+public:
+ obj2 () {}
+ obj2 (unsigned long i): id (i) {}
+
+ #pragma db id
+ unsigned long id;
+
+ #pragma db inverse(o) not_null
+ lazy_ptr<cont2> c; // weak
+};
+
+// TR1.
+//
+#ifdef HAVE_TR1_MEMORY
+namespace tr1
+{
+ using std::tr1::shared_ptr;
+ using odb::tr1::lazy_shared_ptr;
+ using odb::tr1::lazy_weak_ptr;
+
+ class obj;
+
+ #pragma db object pointer(std::tr1::shared_ptr<cont>) // @@ tmp std::tr1::
+ class cont
+ {
+ public:
+ cont () {}
+ cont (unsigned long i): id (i) {}
+
+ #pragma db id
+ unsigned long id;
+
+ typedef std::vector<lazy_weak_ptr<obj> > obj_list;
+
+ #pragma db inverse(c) not_null
+ obj_list o;
+ };
+
+ #pragma db object pointer(std::tr1::shared_ptr<obj>) // @@ tmp std::tr1::
+ class obj
+ {
+ public:
+ obj () {}
+ obj (unsigned long i): id (i) {}
+
+ #pragma db id
+ unsigned long id;
+
+ #pragma db not_null
+ lazy_shared_ptr<cont> c;
+ };
+}
+#endif
+
+#endif // TEST_HXX