From fb2519f6f9d79c7626a0281ad24925b4976cd81d Mon Sep 17 00:00:00 2001 From: Boris Kolpackov Date: Tue, 21 May 2013 19:22:51 -0400 Subject: Add ability to get underlying eager pointer in weak pointers --- odb/lazy-ptr.hxx | 25 +++++++++++++++++++++++++ odb/lazy-ptr.ixx | 35 +++++++++++++++++++++++++++++++++++ odb/tr1/lazy-ptr.hxx | 10 ++++++++++ odb/tr1/lazy-ptr.ixx | 14 ++++++++++++++ 4 files changed, 84 insertions(+) diff --git a/odb/lazy-ptr.hxx b/odb/lazy-ptr.hxx index d54cac0..e340d94 100644 --- a/odb/lazy-ptr.hxx +++ b/odb/lazy-ptr.hxx @@ -72,6 +72,11 @@ namespace odb // void unload () const; + // Get the underlying eager pointer. If this is an unloaded pointer + // to a persistent object, then the returned pointer will be NULL. + // + T* get_eager () const; + template lazy_ptr (DB&, const ID&); template lazy_ptr (DB&, Y*); @@ -185,6 +190,11 @@ namespace odb // void unload () const; + // Get the underlying eager pointer. If this is an unloaded pointer + // to a persistent object, then the returned pointer will be NULL. + // + std::auto_ptr& get_eager () const; + template lazy_auto_ptr (DB&, const ID&); template lazy_auto_ptr (DB&, T*); template lazy_auto_ptr (DB&, std::auto_ptr&); @@ -305,6 +315,11 @@ namespace odb // void unload () const; + // Get the underlying eager pointer. If this is an unloaded pointer + // to a persistent object, then the returned pointer will be NULL. + // + std::unique_ptr& get_eager () const; + template lazy_unique_ptr (DB&, const ID&); template lazy_unique_ptr (DB&, pointer); template lazy_unique_ptr (DB&, pointer, const deleter_type&); @@ -464,6 +479,11 @@ namespace odb // void unload () const; + // Get the underlying eager pointer. If this is an unloaded pointer + // to a persistent object, then the returned pointer will be NULL. + // + std::shared_ptr get_eager () const; + template lazy_shared_ptr (DB&, const ID&); template lazy_shared_ptr (DB&, Y*); template lazy_shared_ptr (DB&, Y*, D); @@ -593,6 +613,11 @@ namespace odb // void unload () const; + // Get the underlying eager pointer. If this is an unloaded pointer + // to a persistent object, then the returned pointer will be NULL. + // + std::weak_ptr get_eager () const; + template lazy_weak_ptr (DB&, const ID&); template lazy_weak_ptr (DB&, const std::shared_ptr&); template lazy_weak_ptr (DB&, const std::weak_ptr&); diff --git a/odb/lazy-ptr.ixx b/odb/lazy-ptr.ixx index 724142a..da02528 100644 --- a/odb/lazy-ptr.ixx +++ b/odb/lazy-ptr.ixx @@ -137,6 +137,13 @@ namespace odb } template + inline T* lazy_ptr:: + get_eager () const + { + return p_; + } + + template template inline lazy_ptr:: lazy_ptr (DB& db, const ID& id): p_ (0), i_ (db, id) {} @@ -396,6 +403,13 @@ namespace odb } template + inline std::auto_ptr& lazy_auto_ptr:: + get_eager () const + { + return p_; + } + + template template inline lazy_auto_ptr:: lazy_auto_ptr (DB& db, const ID& id): i_ (db, id) {} @@ -667,6 +681,13 @@ namespace odb } template + inline std::unique_ptr& lazy_unique_ptr:: + get_eager () const + { + return p_; + } + + template template inline lazy_unique_ptr:: lazy_unique_ptr (DB& db, const ID& id): i_ (db, id) {} @@ -1150,6 +1171,13 @@ namespace odb } template + inline std::shared_ptr lazy_shared_ptr:: + get_eager () const + { + return p_; + } + + template template inline lazy_shared_ptr:: lazy_shared_ptr (DB& db, const ID& id): i_ (db, id) {} @@ -1536,6 +1564,13 @@ namespace odb } template + inline std::weak_ptr lazy_weak_ptr:: + get_eager () const + { + return p_; + } + + template template inline lazy_weak_ptr:: lazy_weak_ptr (DB& db, const ID& id): i_ (db, id) {} diff --git a/odb/tr1/lazy-ptr.hxx b/odb/tr1/lazy-ptr.hxx index d877998..5e040cf 100644 --- a/odb/tr1/lazy-ptr.hxx +++ b/odb/tr1/lazy-ptr.hxx @@ -98,6 +98,11 @@ namespace odb // void unload () const; + // Get the underlying eager pointer. If this is an unloaded pointer + // to a persistent object, then the returned pointer will be NULL. + // + std::tr1::shared_ptr get_eager () const; + template lazy_shared_ptr (DB&, const ID&); template lazy_shared_ptr (DB&, Y*); template lazy_shared_ptr (DB&, Y*, D); @@ -207,6 +212,11 @@ namespace odb // void unload () const; + // Get the underlying eager pointer. If this is an unloaded pointer + // to a persistent object, then the returned pointer will be NULL. + // + std::tr1::weak_ptr get_eager () const; + template lazy_weak_ptr (DB&, const ID&); template lazy_weak_ptr (DB&, const std::tr1::shared_ptr&); template lazy_weak_ptr (DB&, const std::tr1::weak_ptr&); diff --git a/odb/tr1/lazy-ptr.ixx b/odb/tr1/lazy-ptr.ixx index b33a12d..59d72c0 100644 --- a/odb/tr1/lazy-ptr.ixx +++ b/odb/tr1/lazy-ptr.ixx @@ -207,6 +207,13 @@ namespace odb } template + inline std::tr1::shared_ptr lazy_shared_ptr:: + get_eager () const + { + return p_; + } + + template template inline lazy_shared_ptr:: lazy_shared_ptr (DB& db, const ID& id): i_ (db, id) {} @@ -518,6 +525,13 @@ namespace odb } template + inline std::tr1::weak_ptr lazy_weak_ptr:: + get_eager () const + { + return p_; + } + + template template inline lazy_weak_ptr:: lazy_weak_ptr (DB& db, const ID& id): i_ (db, id) {} -- cgit v1.1