aboutsummaryrefslogtreecommitdiff
path: root/odb/shared-ptr/base.cxx
diff options
context:
space:
mode:
authorBoris Kolpackov <boris@codesynthesis.com>2010-08-18 20:02:11 +0200
committerBoris Kolpackov <boris@codesynthesis.com>2010-08-18 20:02:11 +0200
commit2636e266dc7a048e52b40b668c460c2793e897c4 (patch)
tree9717f573d9733b8cfa09a15ee44ed7768c427d7b /odb/shared-ptr/base.cxx
parentdce5d0658e67ced4d5fa64f98f598b86917927a7 (diff)
Move shared_ptr to the details namespace
Diffstat (limited to 'odb/shared-ptr/base.cxx')
-rw-r--r--odb/shared-ptr/base.cxx77
1 files changed, 0 insertions, 77 deletions
diff --git a/odb/shared-ptr/base.cxx b/odb/shared-ptr/base.cxx
deleted file mode 100644
index 197d20b..0000000
--- a/odb/shared-ptr/base.cxx
+++ /dev/null
@@ -1,77 +0,0 @@
-// file : odb/shared-ptr/base.cxx
-// author : Boris Kolpackov <boris@codesynthesis.com>
-// copyright : Copyright (c) 2009-2010 Code Synthesis Tools CC
-// license : GNU GPL v2; see accompanying LICENSE file
-
-#include <odb/shared-ptr/base.hxx>
-
-using std::size_t;
-
-//
-//
-odb::share shared = odb::share (1);
-odb::share exclusive = odb::share (2);
-
-//
-//
-namespace odb
-{
- const char* not_shared::
- what () const throw ()
- {
- return "object is not shared";
- }
-
- bool shared_base::
- _dec_ref_callback ()
- {
- bool r (--counter_ == 0);
-
- if (r)
- {
- callback_->zero_counter (callback_->arg);
- r = (counter_ == 0);
- }
-
- return r;
- }
-}
-
-//
-//
-void*
-operator new (size_t n, odb::share s) throw (std::bad_alloc)
-{
- if (s == shared)
- {
- // Here we need to make sure we don't break the alignment of the
- // returned block. For that we need to know the maximum alignment
- // of this platform. Twice the pointer size is a good guess for
- // most platforms.
- //
- size_t* p = static_cast<size_t*> (operator new (n + 2 * sizeof (size_t)));
- *p++ = 1; // Initial count.
- *p++ = 0xDEADBEEF; // Signature.
- return p;
- }
- else
- return operator new (n);
-
-}
-
-void
-operator delete (void* p, odb::share s) throw ()
-{
- // This version of operator delete is only called when the c-tor
- // fails. In this case there is no object and we can just free the
- // memory.
- //
- if (s == shared)
- {
- size_t* sp = static_cast<size_t*> (p);
- sp -= 2;
- operator delete (sp);
- }
- else
- operator delete (p);
-}