blob: 5f283dd60142eb93258c6f057ecbbed38b5c23d7 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
|
// file : cutl/shared-ptr/base.hxx
// copyright : Copyright (c) 2009-2012 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
|