summaryrefslogtreecommitdiff
path: root/libcutl/cutl/shared-ptr/base.hxx
diff options
context:
space:
mode:
Diffstat (limited to 'libcutl/cutl/shared-ptr/base.hxx')
-rw-r--r--libcutl/cutl/shared-ptr/base.hxx92
1 files changed, 92 insertions, 0 deletions
diff --git a/libcutl/cutl/shared-ptr/base.hxx b/libcutl/cutl/shared-ptr/base.hxx
new file mode 100644
index 0000000..f2bfecc
--- /dev/null
+++ b/libcutl/cutl/shared-ptr/base.hxx
@@ -0,0 +1,92 @@
+// file : cutl/shared-ptr/base.hxx
+// copyright : Copyright (c) 2009-2013 Code Synthesis Tools CC
+// license : MIT; see accompanying LICENSE file
+
+#ifndef CUTL_SHARED_PTR_BASE_HXX
+#define CUTL_SHARED_PTR_BASE_HXX
+
+#include <new>
+#include <cstddef> // std::size_t
+
+#include <cutl/exception.hxx>
+
+#include <cutl/details/export.hxx>
+
+namespace cutl
+{
+ struct LIBCUTL_EXPORT share
+ {
+ explicit
+ share (char id);
+
+ bool
+ operator== (share) const;
+
+ private:
+ char id_;
+ };
+}
+
+extern LIBCUTL_EXPORT cutl::share shared;
+extern LIBCUTL_EXPORT cutl::share exclusive;
+
+LIBCUTL_EXPORT void*
+operator new (std::size_t, cutl::share) throw (std::bad_alloc);
+
+LIBCUTL_EXPORT void
+operator delete (void*, cutl::share) throw ();
+
+namespace cutl
+{
+ struct LIBCUTL_EXPORT not_shared: exception
+ {
+ virtual char const*
+ what () const throw ();
+ };
+
+ struct LIBCUTL_EXPORT shared_base
+ {
+ shared_base ();
+ shared_base (shared_base const&);
+ shared_base&
+ operator= (shared_base const&);
+
+ void
+ _inc_ref ();
+
+ bool
+ _dec_ref ();
+
+ std::size_t
+ _ref_count () const;
+
+ void*
+ operator new (std::size_t, share) throw (std::bad_alloc);
+
+ void
+ operator delete (void*, share) throw ();
+
+ void
+ operator delete (void*) throw ();
+
+ protected:
+ std::size_t counter_;
+ };
+
+ template <typename X>
+ inline X*
+ inc_ref (X*);
+
+ template <typename X>
+ inline void
+ dec_ref (X*);
+
+ template <typename X>
+ inline std::size_t
+ ref_count (X const*);
+}
+
+#include <cutl/shared-ptr/base.ixx>
+#include <cutl/shared-ptr/base.txx>
+
+#endif // CUTL_SHARED_PTR_BASE_HXX