diff options
author | Boris Kolpackov <boris@codesynthesis.com> | 2012-02-28 12:46:48 +0200 |
---|---|---|
committer | Boris Kolpackov <boris@codesynthesis.com> | 2012-02-28 12:46:48 +0200 |
commit | 439bc0ff201f38025d224ce421c86ca44f3dc063 (patch) | |
tree | 71d9f025b3ee1dc1a49f83584c2e21a88cc048cd /common/inverse/test.hxx | |
parent | 564700ab7c96b671b0c08a37e9a0e50f4b2fc176 (diff) |
Test std::shared_ptr in C++11 mode and std::tr1::shared_ptr in C++98 mode
Diffstat (limited to 'common/inverse/test.hxx')
-rw-r--r-- | common/inverse/test.hxx | 395 |
1 files changed, 207 insertions, 188 deletions
diff --git a/common/inverse/test.hxx b/common/inverse/test.hxx index fe47eb8..83b6a3c 100644 --- a/common/inverse/test.hxx +++ b/common/inverse/test.hxx @@ -5,7 +5,7 @@ #ifndef TEST_HXX #define TEST_HXX -#include <common/config.hxx> // HAVE_TR1_MEMORY +#include <common/config.hxx> // HAVE_CXX11, HAVE_TR1_MEMORY #include <set> #include <vector> @@ -14,203 +14,222 @@ #include <odb/core.hxx> -#ifdef HAVE_TR1_MEMORY +#if !defined(HAVE_CXX11) && defined(HAVE_TR1_MEMORY) # include <odb/tr1/memory.hxx> #endif -struct obj1; -struct obj2; -struct obj3; -struct obj4; -struct obj5; - -typedef obj1* obj1_ptr; -typedef obj2* obj2_ptr; -typedef obj3* obj3_ptr; -typedef obj4* obj4_ptr; -typedef obj5* obj5_ptr; - -typedef std::set<obj1_ptr> obj1_ptr_set; -typedef std::set<obj3_ptr> obj3_ptr_set; -typedef std::set<obj5_ptr> obj5_ptr_set; - -#pragma db object -struct obj1 -{ - obj1 (): o2 (0), o4 (0) {} - ~obj1 (); - - #pragma db id - std::string id; - - obj2_ptr o2; - - #pragma db id_column("obj1_id") value_column("obj3_id") - obj3_ptr_set o3; - - obj4_ptr o4; - - obj5_ptr_set o5; -}; - -#pragma db object -struct obj2 -{ - #pragma db id auto - int id; - - // one-to-one - // - #pragma db inverse(o2) - obj1_ptr o1; - - std::string str; -}; - -#pragma db object -struct obj3 -{ - std::string str; - - // one(i)-to-many - // - #pragma db inverse (o3) - obj1_ptr o1; - - #pragma db id auto - int id; -}; - -#pragma db object -struct obj4 -{ - #pragma db id auto - int id; - - std::string str; - - // many(i)-to-one - // - #pragma db inverse (o4) - obj1_ptr_set o1; -}; - -#pragma db object -struct obj5 -{ - #pragma db id auto - int id; - - std::string str; - - // many(i)-to-many - // - #pragma db inverse (o5) - obj1_ptr_set o1; -}; - -inline obj1:: -~obj1 () +// Test raw pointers. +// +#pragma db namespace table("t1_") +namespace test1 { - delete o2; - for (obj3_ptr_set::iterator i (o3.begin ()); i != o3.end (); ++i) - delete *i; - delete o4; - for (obj5_ptr_set::iterator i (o5.begin ()); i != o5.end (); ++i) - delete *i; + struct obj1; + struct obj2; + struct obj3; + struct obj4; + struct obj5; + + typedef obj1* obj1_ptr; + typedef obj2* obj2_ptr; + typedef obj3* obj3_ptr; + typedef obj4* obj4_ptr; + typedef obj5* obj5_ptr; + + typedef std::set<obj1_ptr> obj1_ptr_set; + typedef std::set<obj3_ptr> obj3_ptr_set; + typedef std::set<obj5_ptr> obj5_ptr_set; + + #pragma db object + struct obj1 + { + obj1 (): o2 (0), o4 (0) {} + ~obj1 (); + + #pragma db id + std::string id; + + obj2_ptr o2; + + #pragma db id_column("obj1_id") value_column("obj3_id") + obj3_ptr_set o3; + + obj4_ptr o4; + + obj5_ptr_set o5; + }; + + #pragma db object + struct obj2 + { + #pragma db id auto + int id; + + // one-to-one + // + #pragma db inverse(o2) + obj1_ptr o1; + + std::string str; + }; + + #pragma db object + struct obj3 + { + std::string str; + + // one(i)-to-many + // + #pragma db inverse (o3) + obj1_ptr o1; + + #pragma db id auto + int id; + }; + + #pragma db object + struct obj4 + { + #pragma db id auto + int id; + + std::string str; + + // many(i)-to-one + // + #pragma db inverse (o4) + obj1_ptr_set o1; + }; + + #pragma db object + struct obj5 + { + #pragma db id auto + int id; + + std::string str; + + // many(i)-to-many + // + #pragma db inverse (o5) + obj1_ptr_set o1; + }; + + inline obj1:: + ~obj1 () + { + delete o2; + for (obj3_ptr_set::iterator i (o3.begin ()); i != o3.end (); ++i) + delete *i; + delete o4; + for (obj5_ptr_set::iterator i (o5.begin ()); i != o5.end (); ++i) + delete *i; + } } -// TR1 version +// Test shared_ptr/weak_ptr. // -#ifdef HAVE_TR1_MEMORY -struct tr1_obj1; -struct tr1_obj2; -struct tr1_obj3; -struct tr1_obj4; -struct tr1_obj5; - -typedef std::tr1::shared_ptr<tr1_obj1> tr1_obj1_ptr; -typedef std::tr1::shared_ptr<tr1_obj2> tr1_obj2_ptr; -typedef std::tr1::shared_ptr<tr1_obj3> tr1_obj3_ptr; -typedef std::tr1::shared_ptr<tr1_obj4> tr1_obj4_ptr; -typedef std::tr1::shared_ptr<tr1_obj5> tr1_obj5_ptr; - -typedef std::tr1::weak_ptr<tr1_obj1> tr1_obj1_wptr; - -typedef std::vector<tr1_obj1_wptr> tr1_obj1_wptr_vec; -typedef std::vector<tr1_obj3_ptr> tr1_obj3_ptr_vec; -typedef std::vector<tr1_obj5_ptr> tr1_obj5_ptr_vec; - -#pragma db object pointer(tr1_obj1_ptr) -struct tr1_obj1 -{ - #pragma db id - std::string id; - - tr1_obj2_ptr o2; - - #pragma db id_column("tr1_obj1_id") value_column("tr1_obj3_id") - tr1_obj3_ptr_vec o3; - - tr1_obj4_ptr o4; - tr1_obj5_ptr_vec o5; -}; - -#pragma db object pointer(tr1_obj2_ptr) -struct tr1_obj2 -{ - #pragma db id auto - int id; - - std::string str; - - // one(i)-to-one - // - #pragma db inverse(o2) - tr1_obj1_wptr o1; -}; +#if defined(HAVE_CXX11) || defined(HAVE_TR1_MEMORY) -#pragma db object pointer(tr1_obj3_ptr) -struct tr1_obj3 +#pragma db namespace table("t2_") +namespace test2 { - #pragma db id auto - int id; - - std::string str; - - // one(i)-to-many - // - #pragma db inverse (o3) - tr1_obj1_wptr o1; -}; - -#pragma db object pointer(tr1_obj4_ptr) -struct tr1_obj4 -{ - #pragma db id auto - int id; - - std::string str; - - // many(i)-to-one - // - #pragma db inverse (o4) - tr1_obj1_wptr_vec o1; -}; - -#pragma db object pointer(tr1_obj5_ptr) -struct tr1_obj5 -{ - #pragma db id auto - int id; - - std::string str; +#ifdef HAVE_CXX11 + using std::shared_ptr; + using std::weak_ptr; +#else + using std::tr1::shared_ptr; + using std::tr1::weak_ptr; +#endif - // many(i)-to-many - // - #pragma db inverse (o5) - tr1_obj1_wptr_vec o1; -}; + struct obj1; + struct obj2; + struct obj3; + struct obj4; + struct obj5; + + typedef shared_ptr<obj1> obj1_ptr; + typedef shared_ptr<obj2> obj2_ptr; + typedef shared_ptr<obj3> obj3_ptr; + typedef shared_ptr<obj4> obj4_ptr; + typedef shared_ptr<obj5> obj5_ptr; + + typedef weak_ptr<obj1> obj1_wptr; + + typedef std::vector<obj1_wptr> obj1_wptr_vec; + typedef std::vector<obj3_ptr> obj3_ptr_vec; + typedef std::vector<obj5_ptr> obj5_ptr_vec; + + #pragma db object pointer(obj1_ptr) + struct obj1 + { + #pragma db id + std::string id; + + obj2_ptr o2; + + #pragma db id_column("obj1_id") value_column("obj3_id") + obj3_ptr_vec o3; + + obj4_ptr o4; + obj5_ptr_vec o5; + }; + + #pragma db object pointer(obj2_ptr) + struct obj2 + { + #pragma db id auto + int id; + + std::string str; + + // one(i)-to-one + // + #pragma db inverse(o2) + obj1_wptr o1; + }; + + #pragma db object pointer(obj3_ptr) + struct obj3 + { + #pragma db id auto + int id; + + std::string str; + + // one(i)-to-many + // + #pragma db inverse (o3) + obj1_wptr o1; + }; + + #pragma db object pointer(obj4_ptr) + struct obj4 + { + #pragma db id auto + int id; + + std::string str; + + // many(i)-to-one + // + #pragma db inverse (o4) + obj1_wptr_vec o1; + }; + + #pragma db object pointer(obj5_ptr) + struct obj5 + { + #pragma db id auto + int id; + + std::string str; + + // many(i)-to-many + // + #pragma db inverse (o5) + obj1_wptr_vec o1; + }; +} #endif #endif // TEST_HXX |