1 |
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> |
2 |
<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"> |
3 |
<title>PEAK Library: Allocation</title> |
4 |
<link href="doxygen.css" rel="stylesheet" type="text/css"> |
5 |
</head><body> |
6 |
<!-- Generated by Doxygen 1.3.5 --> |
7 |
<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="annotated.html">Data Structures</a> | <a class="qindex" href="functions.html">Data Fields</a></div> |
8 |
<h1>Allocation</h1><hr><a name="_details"></a><h2>Detailed Description</h2> |
9 |
<dl compact><dt><b></b></dt><dd>Peak's allocation mechanism uses the standard malloc/free pair but can be configured as wish with <a class="el" href="group__alloc.html#ga3">peak_alloc_configure()</a> providing your own allocation and deallocation primitives.</dd></dl> |
10 |
<dl compact><dt><b></b></dt><dd>Although written in C, peak is object oriented and features a lightweight support for reference counting in all peak objects. This module offers access to the <a class="el" href="group__alloc.html#ga6">peak_retain()</a> an <a class="el" href="group__alloc.html#ga7">peak_release()</a> method.<br> |
11 |
Strings, however, are normal C strings and not wrapped by the peak library. For convenience, a <a class="el" href="group__alloc.html#ga6">peak_strdup()</a> method is provided as well. </dd></dl> |
12 |
|
13 |
<p> |
14 |
<table border=0 cellpadding=0 cellspacing=0> |
15 |
<tr><td></td></tr> |
16 |
<tr><td colspan=2><br><h2>Typedefs</h2></td></tr> |
17 |
<tr><td class="memItemLeft" nowrap align=right valign=top><a class="anchor" name="ga0" doxytag="alloc::peak_alloc_malloc_func" ></a> |
18 |
typedef void *(* </td><td class="memItemRight" valign=bottom><a class="el" href="group__alloc.html#ga0">peak_alloc_malloc_func</a> )(size_t size)</td></tr> |
19 |
|
20 |
<tr><td class="mdescLeft"> </td><td class="mdescRight">Malloc-like function pointer type. <br><br></td></tr> |
21 |
<tr><td class="memItemLeft" nowrap align=right valign=top><a class="anchor" name="ga1" doxytag="alloc::peak_alloc_free_func" ></a> |
22 |
typedef void(* </td><td class="memItemRight" valign=bottom><a class="el" href="group__alloc.html#ga1">peak_alloc_free_func</a> )(void *p)</td></tr> |
23 |
|
24 |
<tr><td class="mdescLeft"> </td><td class="mdescRight">Free-like function pointer type. <br><br></td></tr> |
25 |
<tr><td colspan=2><br><h2>Functions</h2></td></tr> |
26 |
<tr><td class="memItemLeft" nowrap align=right valign=top>void </td><td class="memItemRight" valign=bottom><a class="el" href="group__alloc.html#ga2">peak_alloc_configure</a> (<a class="el" href="group__alloc.html#ga0">peak_alloc_malloc_func</a> malloc_fun, <a class="el" href="group__alloc.html#ga1">peak_alloc_free_func</a> free_fun)</td></tr> |
27 |
|
28 |
<tr><td class="mdescLeft"> </td><td class="mdescRight">Configure peak's allocation for your program. <a href="#ga2"></a><br><br></td></tr> |
29 |
<tr><td class="memItemLeft" nowrap align=right valign=top>void * </td><td class="memItemRight" valign=bottom><a class="el" href="group__alloc.html#ga3">peak_allocate</a> (size_t size)</td></tr> |
30 |
|
31 |
<tr><td class="mdescLeft"> </td><td class="mdescRight">Allocate memory. <a href="#ga3"></a><br><br></td></tr> |
32 |
<tr><td class="memItemLeft" nowrap align=right valign=top>void </td><td class="memItemRight" valign=bottom><a class="el" href="group__alloc.html#ga4">peak_deallocate</a> (void *ptr)</td></tr> |
33 |
|
34 |
<tr><td class="mdescLeft"> </td><td class="mdescRight">Free memory. <a href="#ga4"></a><br><br></td></tr> |
35 |
<tr><td class="memItemLeft" nowrap align=right valign=top>char * </td><td class="memItemRight" valign=bottom><a class="el" href="group__alloc.html#ga5">peak_strdup</a> (const char *str)</td></tr> |
36 |
|
37 |
<tr><td class="mdescLeft"> </td><td class="mdescRight">Copy a string. <a href="#ga5"></a><br><br></td></tr> |
38 |
<tr><td class="memItemLeft" nowrap align=right valign=top>void * </td><td class="memItemRight" valign=bottom><a class="el" href="group__alloc.html#ga6">peak_retain</a> (void *obj)</td></tr> |
39 |
|
40 |
<tr><td class="mdescLeft"> </td><td class="mdescRight">Retain a peak object. <a href="#ga6"></a><br><br></td></tr> |
41 |
<tr><td class="memItemLeft" nowrap align=right valign=top>void </td><td class="memItemRight" valign=bottom><a class="el" href="group__alloc.html#ga7">peak_release</a> (void *obj)</td></tr> |
42 |
|
43 |
<tr><td class="mdescLeft"> </td><td class="mdescRight">Release a peak object. <a href="#ga7"></a><br><br></td></tr> |
44 |
<tr><td class="memItemLeft" nowrap align=right valign=top>int </td><td class="memItemRight" valign=bottom><a class="el" href="group__alloc.html#ga8">peak_get_retcnt</a> (void *obj)</td></tr> |
45 |
|
46 |
<tr><td class="mdescLeft"> </td><td class="mdescRight">Get the retain count of a peak object. <a href="#ga8"></a><br><br></td></tr> |
47 |
</table> |
48 |
<hr><h2>Function Documentation</h2> |
49 |
<a class="anchor" name="ga2" doxytag="alloc.h::peak_alloc_configure" ></a><p> |
50 |
<table class="mdTable" width="100%" cellpadding="2" cellspacing="0"> |
51 |
<tr> |
52 |
<td class="mdRow"> |
53 |
<table cellpadding="0" cellspacing="0" border="0"> |
54 |
<tr> |
55 |
<td class="md" nowrap valign="top"> void peak_alloc_configure </td> |
56 |
<td class="md" valign="top">( </td> |
57 |
<td class="md" nowrap valign="top"><a class="el" href="group__alloc.html#ga0">peak_alloc_malloc_func</a> </td> |
58 |
<td class="mdname" nowrap> <em>malloc_fun</em>, </td> |
59 |
</tr> |
60 |
<tr> |
61 |
<td></td> |
62 |
<td></td> |
63 |
<td class="md" nowrap><a class="el" href="group__alloc.html#ga1">peak_alloc_free_func</a> </td> |
64 |
<td class="mdname" nowrap> <em>free_fun</em></td> |
65 |
</tr> |
66 |
<tr> |
67 |
<td></td> |
68 |
<td class="md">) </td> |
69 |
<td class="md" colspan="2"></td> |
70 |
</tr> |
71 |
|
72 |
</table> |
73 |
</td> |
74 |
</tr> |
75 |
</table> |
76 |
<table cellspacing=5 cellpadding=0 border=0> |
77 |
<tr> |
78 |
<td> |
79 |
|
80 |
</td> |
81 |
<td> |
82 |
|
83 |
<p> |
84 |
Configure peak's allocation for your program. |
85 |
<p> |
86 |
Pointed functions must properly align memory and be thread-safe like malloc() and free()...<p> |
87 |
<dl compact><dt><b>Parameters:</b></dt><dd> |
88 |
<table border="0" cellspacing="2" cellpadding="0"> |
89 |
<tr><td valign=top><em>malloc_fun</em> </td><td>A pointer to your custom malloc-like function. </td></tr> |
90 |
<tr><td valign=top><em>free_fun</em> </td><td>A pointer to your custom free-like function. </td></tr> |
91 |
</table> |
92 |
</dl> |
93 |
</td> |
94 |
</tr> |
95 |
</table> |
96 |
<a class="anchor" name="ga3" doxytag="alloc.h::peak_allocate" ></a><p> |
97 |
<table class="mdTable" width="100%" cellpadding="2" cellspacing="0"> |
98 |
<tr> |
99 |
<td class="mdRow"> |
100 |
<table cellpadding="0" cellspacing="0" border="0"> |
101 |
<tr> |
102 |
<td class="md" nowrap valign="top"> void* peak_allocate </td> |
103 |
<td class="md" valign="top">( </td> |
104 |
<td class="md" nowrap valign="top">size_t </td> |
105 |
<td class="mdname1" valign="top" nowrap> <em>size</em> </td> |
106 |
<td class="md" valign="top"> ) </td> |
107 |
<td class="md" nowrap></td> |
108 |
</tr> |
109 |
|
110 |
</table> |
111 |
</td> |
112 |
</tr> |
113 |
</table> |
114 |
<table cellspacing=5 cellpadding=0 border=0> |
115 |
<tr> |
116 |
<td> |
117 |
|
118 |
</td> |
119 |
<td> |
120 |
|
121 |
<p> |
122 |
Allocate memory. |
123 |
<p> |
124 |
<dl compact><dt><b>Parameters:</b></dt><dd> |
125 |
<table border="0" cellspacing="2" cellpadding="0"> |
126 |
<tr><td valign=top><em>size</em> </td><td>Number of bytes of memory to allocate.</td></tr> |
127 |
</table> |
128 |
</dl> |
129 |
<dl compact><dt><b>Returns:</b></dt><dd>A pointer to the fresh allocated memory. </dd></dl> |
130 |
</td> |
131 |
</tr> |
132 |
</table> |
133 |
<a class="anchor" name="ga4" doxytag="alloc.h::peak_deallocate" ></a><p> |
134 |
<table class="mdTable" width="100%" cellpadding="2" cellspacing="0"> |
135 |
<tr> |
136 |
<td class="mdRow"> |
137 |
<table cellpadding="0" cellspacing="0" border="0"> |
138 |
<tr> |
139 |
<td class="md" nowrap valign="top"> void peak_deallocate </td> |
140 |
<td class="md" valign="top">( </td> |
141 |
<td class="md" nowrap valign="top">void * </td> |
142 |
<td class="mdname1" valign="top" nowrap> <em>ptr</em> </td> |
143 |
<td class="md" valign="top"> ) </td> |
144 |
<td class="md" nowrap></td> |
145 |
</tr> |
146 |
|
147 |
</table> |
148 |
</td> |
149 |
</tr> |
150 |
</table> |
151 |
<table cellspacing=5 cellpadding=0 border=0> |
152 |
<tr> |
153 |
<td> |
154 |
|
155 |
</td> |
156 |
<td> |
157 |
|
158 |
<p> |
159 |
Free memory. |
160 |
<p> |
161 |
<dl compact><dt><b>Parameters:</b></dt><dd> |
162 |
<table border="0" cellspacing="2" cellpadding="0"> |
163 |
<tr><td valign=top><em>ptr</em> </td><td>Pointer to the memory space to deallocate. </td></tr> |
164 |
</table> |
165 |
</dl> |
166 |
</td> |
167 |
</tr> |
168 |
</table> |
169 |
<a class="anchor" name="ga8" doxytag="alloc.h::peak_get_retcnt" ></a><p> |
170 |
<table class="mdTable" width="100%" cellpadding="2" cellspacing="0"> |
171 |
<tr> |
172 |
<td class="mdRow"> |
173 |
<table cellpadding="0" cellspacing="0" border="0"> |
174 |
<tr> |
175 |
<td class="md" nowrap valign="top"> int peak_get_retcnt </td> |
176 |
<td class="md" valign="top">( </td> |
177 |
<td class="md" nowrap valign="top">void * </td> |
178 |
<td class="mdname1" valign="top" nowrap> <em>obj</em> </td> |
179 |
<td class="md" valign="top"> ) </td> |
180 |
<td class="md" nowrap></td> |
181 |
</tr> |
182 |
|
183 |
</table> |
184 |
</td> |
185 |
</tr> |
186 |
</table> |
187 |
<table cellspacing=5 cellpadding=0 border=0> |
188 |
<tr> |
189 |
<td> |
190 |
|
191 |
</td> |
192 |
<td> |
193 |
|
194 |
<p> |
195 |
Get the retain count of a peak object. |
196 |
<p> |
197 |
<dl compact><dt><b>Parameters:</b></dt><dd> |
198 |
<table border="0" cellspacing="2" cellpadding="0"> |
199 |
<tr><td valign=top><em>obj</em> </td><td>Any peak object.</td></tr> |
200 |
</table> |
201 |
</dl> |
202 |
<dl compact><dt><b>Returns:</b></dt><dd>Retain count or -1 for constant objects. </dd></dl> |
203 |
</td> |
204 |
</tr> |
205 |
</table> |
206 |
<a class="anchor" name="ga7" doxytag="alloc.h::peak_release" ></a><p> |
207 |
<table class="mdTable" width="100%" cellpadding="2" cellspacing="0"> |
208 |
<tr> |
209 |
<td class="mdRow"> |
210 |
<table cellpadding="0" cellspacing="0" border="0"> |
211 |
<tr> |
212 |
<td class="md" nowrap valign="top"> void peak_release </td> |
213 |
<td class="md" valign="top">( </td> |
214 |
<td class="md" nowrap valign="top">void * </td> |
215 |
<td class="mdname1" valign="top" nowrap> <em>obj</em> </td> |
216 |
<td class="md" valign="top"> ) </td> |
217 |
<td class="md" nowrap></td> |
218 |
</tr> |
219 |
|
220 |
</table> |
221 |
</td> |
222 |
</tr> |
223 |
</table> |
224 |
<table cellspacing=5 cellpadding=0 border=0> |
225 |
<tr> |
226 |
<td> |
227 |
|
228 |
</td> |
229 |
<td> |
230 |
|
231 |
<p> |
232 |
Release a peak object. |
233 |
<p> |
234 |
Decrease the reference count of the object <em>obj</em>. If the refcount is 0, the object is deallocated.<p> |
235 |
<dl compact><dt><b>Parameters:</b></dt><dd> |
236 |
<table border="0" cellspacing="2" cellpadding="0"> |
237 |
<tr><td valign=top><em>obj</em> </td><td>Any peak object. </td></tr> |
238 |
</table> |
239 |
</dl> |
240 |
</td> |
241 |
</tr> |
242 |
</table> |
243 |
<a class="anchor" name="ga6" doxytag="alloc.h::peak_retain" ></a><p> |
244 |
<table class="mdTable" width="100%" cellpadding="2" cellspacing="0"> |
245 |
<tr> |
246 |
<td class="mdRow"> |
247 |
<table cellpadding="0" cellspacing="0" border="0"> |
248 |
<tr> |
249 |
<td class="md" nowrap valign="top"> void* peak_retain </td> |
250 |
<td class="md" valign="top">( </td> |
251 |
<td class="md" nowrap valign="top">void * </td> |
252 |
<td class="mdname1" valign="top" nowrap> <em>obj</em> </td> |
253 |
<td class="md" valign="top"> ) </td> |
254 |
<td class="md" nowrap></td> |
255 |
</tr> |
256 |
|
257 |
</table> |
258 |
</td> |
259 |
</tr> |
260 |
</table> |
261 |
<table cellspacing=5 cellpadding=0 border=0> |
262 |
<tr> |
263 |
<td> |
264 |
|
265 |
</td> |
266 |
<td> |
267 |
|
268 |
<p> |
269 |
Retain a peak object. |
270 |
<p> |
271 |
Increase the reference count of the object <em>obj</em>.<p> |
272 |
<dl compact><dt><b>Parameters:</b></dt><dd> |
273 |
<table border="0" cellspacing="2" cellpadding="0"> |
274 |
<tr><td valign=top><em>obj</em> </td><td>Any peak object.</td></tr> |
275 |
</table> |
276 |
</dl> |
277 |
<dl compact><dt><b>Returns:</b></dt><dd>For convenience, a pointer to <em>obj</em>. </dd></dl> |
278 |
</td> |
279 |
</tr> |
280 |
</table> |
281 |
<a class="anchor" name="ga5" doxytag="alloc.h::peak_strdup" ></a><p> |
282 |
<table class="mdTable" width="100%" cellpadding="2" cellspacing="0"> |
283 |
<tr> |
284 |
<td class="mdRow"> |
285 |
<table cellpadding="0" cellspacing="0" border="0"> |
286 |
<tr> |
287 |
<td class="md" nowrap valign="top"> char* peak_strdup </td> |
288 |
<td class="md" valign="top">( </td> |
289 |
<td class="md" nowrap valign="top">const char * </td> |
290 |
<td class="mdname1" valign="top" nowrap> <em>str</em> </td> |
291 |
<td class="md" valign="top"> ) </td> |
292 |
<td class="md" nowrap></td> |
293 |
</tr> |
294 |
|
295 |
</table> |
296 |
</td> |
297 |
</tr> |
298 |
</table> |
299 |
<table cellspacing=5 cellpadding=0 border=0> |
300 |
<tr> |
301 |
<td> |
302 |
|
303 |
</td> |
304 |
<td> |
305 |
|
306 |
<p> |
307 |
Copy a string. |
308 |
<p> |
309 |
<dl compact><dt><b>Parameters:</b></dt><dd> |
310 |
<table border="0" cellspacing="2" cellpadding="0"> |
311 |
<tr><td valign=top><em>str</em> </td><td>The string to copy/duplicate.</td></tr> |
312 |
</table> |
313 |
</dl> |
314 |
<dl compact><dt><b>Returns:</b></dt><dd>A pointer to a new allocated copy of the string. It should be passed to <a class="el" href="group__alloc.html#ga5">peak_deallocate()</a> if you want to free it. </dd></dl> |
315 |
</td> |
316 |
</tr> |
317 |
</table> |
318 |
<hr size="1"><address style="align: right;"><small>Generated on Sat Jan 17 21:41:53 2004 for the PEAK Library by |
319 |
<a href="http://www.doxygen.org/index.html"> |
320 |
<img src="doxygen.png" alt="doxygen" align="middle" border="0" > |
321 |
</a></small> <a href="http://sourceforge.net"><img src="http://sourceforge.net/sflogo.php?group_id=98146&type=1" width="88" height="31" align="middle" border="0" alt="SourceForge.net Logo" /></a></address> |
322 |
</body> |
323 |
</html> |
324 |
|