-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathSafePtr_8h_source.html
140 lines (138 loc) · 14.8 KB
/
SafePtr_8h_source.html
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
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<meta name="generator" content="Doxygen 1.9.1"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>TaskSched: SafePtr.h Source File</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/searchdata.js"></script>
<script type="text/javascript" src="search/search.js"></script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
<tbody>
<tr style="height: 56px;">
<td id="projectalign" style="padding-left: 0.5em;">
<div id="projectname">TaskSched
</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.9.1 -->
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */
var searchBox = new SearchBox("searchBox", "search",false,'Search','.html');
/* @license-end */
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */
$(function() {
initMenu('',true,false,'search.php','Search');
$(document).ready(function() { init_search(); });
});
/* @license-end */</script>
<div id="main-nav"></div>
</div><!-- top -->
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
onkeydown="return searchBox.OnSearchSelectKey(event)">
</div>
<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<iframe src="javascript:void(0)" frameborder="0"
name="MSearchResults" id="MSearchResults">
</iframe>
</div>
<div class="header">
<div class="headertitle">
<div class="title">SafePtr.h</div> </div>
</div><!--header-->
<div class="contents">
<a href="SafePtr_8h.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> <span class="preprocessor">#ifndef SAFE_PTR_H</span></div>
<div class="line"><a name="l00002"></a><span class="lineno"> 2</span> <span class="preprocessor">#define SAFE_PTR_H</span></div>
<div class="line"><a name="l00014"></a><span class="lineno"> 14</span> <span class="keyword">template</span><<span class="keyword">typename</span> T></div>
<div class="line"><a name="l00020"></a><span class="lineno"><a class="line" href="classSafePtr.html"> 20</a></span> <span class="keyword">class </span><a class="code" href="classSafePtr.html">SafePtr</a> {</div>
<div class="line"><a name="l00021"></a><span class="lineno"> 21</span> <span class="keyword">private</span>:</div>
<div class="line"><a name="l00025"></a><span class="lineno"> 25</span>  T* ptr;</div>
<div class="line"><a name="l00026"></a><span class="lineno"> 26</span>  </div>
<div class="line"><a name="l00030"></a><span class="lineno"> 30</span>  <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span>* refCount;</div>
<div class="line"><a name="l00031"></a><span class="lineno"> 31</span>  </div>
<div class="line"><a name="l00035"></a><span class="lineno"> 35</span>  <span class="keywordtype">void</span> release() {</div>
<div class="line"><a name="l00036"></a><span class="lineno"> 36</span>  <span class="keywordflow">if</span> (refCount) {</div>
<div class="line"><a name="l00037"></a><span class="lineno"> 37</span>  (*refCount)--;</div>
<div class="line"><a name="l00038"></a><span class="lineno"> 38</span>  <span class="keywordflow">if</span> (*refCount == 0) {</div>
<div class="line"><a name="l00039"></a><span class="lineno"> 39</span>  <span class="keyword">delete</span> ptr;</div>
<div class="line"><a name="l00040"></a><span class="lineno"> 40</span>  <span class="keyword">delete</span> refCount;</div>
<div class="line"><a name="l00041"></a><span class="lineno"> 41</span>  }</div>
<div class="line"><a name="l00042"></a><span class="lineno"> 42</span>  }</div>
<div class="line"><a name="l00043"></a><span class="lineno"> 43</span>  }</div>
<div class="line"><a name="l00044"></a><span class="lineno"> 44</span>  </div>
<div class="line"><a name="l00045"></a><span class="lineno"> 45</span> <span class="keyword">public</span>:</div>
<div class="line"><a name="l00049"></a><span class="lineno"><a class="line" href="classSafePtr.html#ad6d7da5968e89a9d2841ecb8569c4eb3"> 49</a></span>  <a class="code" href="classSafePtr.html#ad6d7da5968e89a9d2841ecb8569c4eb3">SafePtr</a>() : ptr(nullptr), refCount(nullptr) {}</div>
<div class="line"><a name="l00050"></a><span class="lineno"> 50</span>  </div>
<div class="line"><a name="l00058"></a><span class="lineno"><a class="line" href="classSafePtr.html#af57ecf85f30ce06037ae19b6888256f9"> 58</a></span>  <span class="keyword">explicit</span> <a class="code" href="classSafePtr.html#af57ecf85f30ce06037ae19b6888256f9">SafePtr</a>(T* p) : ptr(p), refCount(p ? new unsigned int(1) : nullptr) {}</div>
<div class="line"><a name="l00059"></a><span class="lineno"> 59</span>  </div>
<div class="line"><a name="l00067"></a><span class="lineno"><a class="line" href="classSafePtr.html#aa6f665c9c222ebf0b8cc153112e6189a"> 67</a></span>  <a class="code" href="classSafePtr.html#aa6f665c9c222ebf0b8cc153112e6189a">SafePtr</a>(<span class="keyword">const</span> <a class="code" href="classSafePtr.html">SafePtr</a>& other) : ptr(other.ptr), refCount(other.refCount) {</div>
<div class="line"><a name="l00068"></a><span class="lineno"> 68</span>  <span class="keywordflow">if</span> (refCount) {</div>
<div class="line"><a name="l00069"></a><span class="lineno"> 69</span>  (*refCount)++;</div>
<div class="line"><a name="l00070"></a><span class="lineno"> 70</span>  }</div>
<div class="line"><a name="l00071"></a><span class="lineno"> 71</span>  }</div>
<div class="line"><a name="l00072"></a><span class="lineno"> 72</span>  </div>
<div class="line"><a name="l00083"></a><span class="lineno"><a class="line" href="classSafePtr.html#a256ec9029ce26e43cc265a5995f66382"> 83</a></span>  <a class="code" href="classSafePtr.html">SafePtr</a>& <a class="code" href="classSafePtr.html#a256ec9029ce26e43cc265a5995f66382">operator=</a>(<span class="keyword">const</span> <a class="code" href="classSafePtr.html">SafePtr</a>& other) {</div>
<div class="line"><a name="l00084"></a><span class="lineno"> 84</span>  <span class="keywordflow">if</span> (<span class="keyword">this</span> != &other) {</div>
<div class="line"><a name="l00085"></a><span class="lineno"> 85</span>  release();</div>
<div class="line"><a name="l00086"></a><span class="lineno"> 86</span>  ptr = other.ptr;</div>
<div class="line"><a name="l00087"></a><span class="lineno"> 87</span>  refCount = other.refCount;</div>
<div class="line"><a name="l00088"></a><span class="lineno"> 88</span>  <span class="keywordflow">if</span> (refCount) {</div>
<div class="line"><a name="l00089"></a><span class="lineno"> 89</span>  (*refCount)++;</div>
<div class="line"><a name="l00090"></a><span class="lineno"> 90</span>  }</div>
<div class="line"><a name="l00091"></a><span class="lineno"> 91</span>  }</div>
<div class="line"><a name="l00092"></a><span class="lineno"> 92</span>  <span class="keywordflow">return</span> *<span class="keyword">this</span>;</div>
<div class="line"><a name="l00093"></a><span class="lineno"> 93</span>  }</div>
<div class="line"><a name="l00094"></a><span class="lineno"> 94</span>  </div>
<div class="line"><a name="l00098"></a><span class="lineno"><a class="line" href="classSafePtr.html#a7c1135a19fd0866ffcb8436c799bf5b4"> 98</a></span>  <a class="code" href="classSafePtr.html#a7c1135a19fd0866ffcb8436c799bf5b4">~SafePtr</a>() {</div>
<div class="line"><a name="l00099"></a><span class="lineno"> 99</span>  release();</div>
<div class="line"><a name="l00100"></a><span class="lineno"> 100</span>  }</div>
<div class="line"><a name="l00101"></a><span class="lineno"> 101</span>  </div>
<div class="line"><a name="l00107"></a><span class="lineno"><a class="line" href="classSafePtr.html#aefcefd96ba7a4bb08c81968ca95700ed"> 107</a></span>  T* <a class="code" href="classSafePtr.html#aefcefd96ba7a4bb08c81968ca95700ed">get</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> ptr; }</div>
<div class="line"><a name="l00108"></a><span class="lineno"> 108</span>  </div>
<div class="line"><a name="l00116"></a><span class="lineno"><a class="line" href="classSafePtr.html#a6e6636778ce0a0f4b63853ae82b672af"> 116</a></span>  T& <a class="code" href="classSafePtr.html#a6e6636778ce0a0f4b63853ae82b672af">operator*</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> *ptr; }</div>
<div class="line"><a name="l00117"></a><span class="lineno"> 117</span>  </div>
<div class="line"><a name="l00126"></a><span class="lineno"><a class="line" href="classSafePtr.html#aaf782dfa07867873a87af9c120af0b72"> 126</a></span>  T* <a class="code" href="classSafePtr.html#aaf782dfa07867873a87af9c120af0b72">operator-></a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> ptr; }</div>
<div class="line"><a name="l00127"></a><span class="lineno"> 127</span>  </div>
<div class="line"><a name="l00134"></a><span class="lineno"><a class="line" href="classSafePtr.html#a652b6f796ca679af340441c71316975b"> 134</a></span>  <span class="keyword">operator</span> bool()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> ptr != <span class="keyword">nullptr</span>; }</div>
<div class="line"><a name="l00135"></a><span class="lineno"> 135</span> };</div>
<div class="line"><a name="l00136"></a><span class="lineno"> 136</span>  </div>
<div class="line"><a name="l00137"></a><span class="lineno"> 137</span> <span class="preprocessor">#endif </span><span class="comment">// SAFE_PTR_H</span></div>
<div class="line"><a name="l00138"></a><span class="lineno"> 138</span>  </div>
<div class="ttc" id="aclassSafePtr_html"><div class="ttname"><a href="classSafePtr.html">SafePtr</a></div><div class="ttdoc">A safe pointer template class.</div><div class="ttdef"><b>Definition:</b> <a href="SafePtr_8h_source.html#l00020">SafePtr.h:20</a></div></div>
<div class="ttc" id="aclassSafePtr_html_a256ec9029ce26e43cc265a5995f66382"><div class="ttname"><a href="classSafePtr.html#a256ec9029ce26e43cc265a5995f66382">SafePtr::operator=</a></div><div class="ttdeci">SafePtr & operator=(const SafePtr &other)</div><div class="ttdoc">Copy assignment operator that performs a deep copy of another SafePtr object.</div><div class="ttdef"><b>Definition:</b> <a href="SafePtr_8h_source.html#l00083">SafePtr.h:83</a></div></div>
<div class="ttc" id="aclassSafePtr_html_a6e6636778ce0a0f4b63853ae82b672af"><div class="ttname"><a href="classSafePtr.html#a6e6636778ce0a0f4b63853ae82b672af">SafePtr::operator*</a></div><div class="ttdeci">T & operator*() const</div><div class="ttdoc">Dereference operator that returns the value pointed to by the managed data.</div><div class="ttdef"><b>Definition:</b> <a href="SafePtr_8h_source.html#l00116">SafePtr.h:116</a></div></div>
<div class="ttc" id="aclassSafePtr_html_a7c1135a19fd0866ffcb8436c799bf5b4"><div class="ttname"><a href="classSafePtr.html#a7c1135a19fd0866ffcb8436c799bf5b4">SafePtr::~SafePtr</a></div><div class="ttdeci">~SafePtr()</div><div class="ttdoc">Destructor that calls the release() function to ensure proper memory management.</div><div class="ttdef"><b>Definition:</b> <a href="SafePtr_8h_source.html#l00098">SafePtr.h:98</a></div></div>
<div class="ttc" id="aclassSafePtr_html_aa6f665c9c222ebf0b8cc153112e6189a"><div class="ttname"><a href="classSafePtr.html#aa6f665c9c222ebf0b8cc153112e6189a">SafePtr::SafePtr</a></div><div class="ttdeci">SafePtr(const SafePtr &other)</div><div class="ttdoc">Copy constructor that performs a deep copy of another SafePtr object.</div><div class="ttdef"><b>Definition:</b> <a href="SafePtr_8h_source.html#l00067">SafePtr.h:67</a></div></div>
<div class="ttc" id="aclassSafePtr_html_aaf782dfa07867873a87af9c120af0b72"><div class="ttname"><a href="classSafePtr.html#aaf782dfa07867873a87af9c120af0b72">SafePtr::operator-></a></div><div class="ttdeci">T * operator->() const</div><div class="ttdoc">Arrow operator that returns the address of the value pointed to by the managed data.</div><div class="ttdef"><b>Definition:</b> <a href="SafePtr_8h_source.html#l00126">SafePtr.h:126</a></div></div>
<div class="ttc" id="aclassSafePtr_html_ad6d7da5968e89a9d2841ecb8569c4eb3"><div class="ttname"><a href="classSafePtr.html#ad6d7da5968e89a9d2841ecb8569c4eb3">SafePtr::SafePtr</a></div><div class="ttdeci">SafePtr()</div><div class="ttdoc">Default constructor that initializes both ptr and refCount to nullptr.</div><div class="ttdef"><b>Definition:</b> <a href="SafePtr_8h_source.html#l00049">SafePtr.h:49</a></div></div>
<div class="ttc" id="aclassSafePtr_html_aefcefd96ba7a4bb08c81968ca95700ed"><div class="ttname"><a href="classSafePtr.html#aefcefd96ba7a4bb08c81968ca95700ed">SafePtr::get</a></div><div class="ttdeci">T * get() const</div><div class="ttdoc">Returns the raw pointer to the managed data.</div><div class="ttdef"><b>Definition:</b> <a href="SafePtr_8h_source.html#l00107">SafePtr.h:107</a></div></div>
<div class="ttc" id="aclassSafePtr_html_af57ecf85f30ce06037ae19b6888256f9"><div class="ttname"><a href="classSafePtr.html#af57ecf85f30ce06037ae19b6888256f9">SafePtr::SafePtr</a></div><div class="ttdeci">SafePtr(T *p)</div><div class="ttdoc">Constructor that takes a raw pointer (p) as input.</div><div class="ttdef"><b>Definition:</b> <a href="SafePtr_8h_source.html#l00058">SafePtr.h:58</a></div></div>
</div><!-- fragment --></div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.1
</small></address>
</body>
</html>