1 #ifndef _sw_corby_buffer_h
2 #define _sw_corby_buffer_h
3 
4 /*
5  * Copyright 2003, 2004 Porchdog Software. All rights reserved.
6  *
7  *	Redistribution and use in source and binary forms, with or without modification,
8  *	are permitted provided that the following conditions are met:
9  *
10  *		1. Redistributions of source code must retain the above copyright notice,
11  *		   this list of conditions and the following disclaimer.
12  *		2. Redistributions in binary form must reproduce the above copyright notice,
13  *		   this list of conditions and the following disclaimer in the documentation
14  *		   and/or other materials provided with the distribution.
15  *
16  *	THIS SOFTWARE IS PROVIDED BY PORCHDOG SOFTWARE ``AS IS'' AND ANY
17  *	EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
18  *	WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
19  *	IN NO EVENT SHALL THE HOWL PROJECT OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
20  *	INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
21  *	BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
22  *	DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
23  *	OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
24  *	OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
25  *	OF THE POSSIBILITY OF SUCH DAMAGE.
26  *
27  *	The views and conclusions contained in the software and documentation are those
28  *	of the authors and should not be interpreted as representing official policies,
29  *	either expressed or implied, of Porchdog Software.
30  */
31 
32 #include <salt/salt.h>
33 #include <corby/corby.h>
34 
35 
36 #ifdef __cplusplus
37 extern "C"
38 {
39 #endif
40 
41 
42 struct										_sw_corby_buffer;
43 typedef struct _sw_corby_buffer	*	sw_corby_buffer;
44 struct										_sw_corby_object;
45 typedef sw_opaque							sw_corby_buffer_delegate;
46 typedef sw_opaque							sw_corby_buffer_observer;
47 
48 
49 typedef enum _sw_corby_buffer_pad
50 {
51 	SW_CORBY_BUFFER_PAD_NONE,
52 	SW_CORBY_BUFFER_PAD_ALIGN_2,
53 	SW_CORBY_BUFFER_PAD_ALIGN_4,
54 	SW_CORBY_BUFFER_PAD_ALIGN_8,
55 	SW_CORBY_BUFFER_PAD_ALIGN_16,
56 	SW_CORBY_BUFFER_PAD_ALIGN_32
57 } sw_corby_buffer_pad;
58 
59 
60 typedef sw_result
61 (HOWL_API* sw_corby_buffer_written_func)(
62 								sw_corby_buffer_observer	observer,
63 								sw_corby_buffer				buffer,
64 								sw_result						result,
65 								sw_size_t						bytesWritten,
66 								sw_opaque_t						extra);
67 
68 
69 typedef sw_result
70 (HOWL_API* sw_corby_buffer_overflow_func)(
71 								sw_corby_buffer_delegate	delegate,
72 								sw_corby_buffer				buffer,
73 								sw_uint8						octet,
74 								sw_uint8					**	base,
75 								sw_uint8					**	bptr,
76 								sw_uint8					**	eptr,
77 								sw_uint8					**	end,
78 								sw_opaque_t						extra);
79 
80 
81 typedef sw_result
82 (HOWL_API* sw_corby_buffer_underflow_func)(
83 								sw_corby_buffer_delegate	delegate,
84 								sw_corby_buffer				buffer,
85 								sw_uint8					*	octet,
86 								sw_uint8					**	base,
87 								sw_uint8					**	bptr,
88 								sw_uint8					**	eptr,
89 								sw_uint8					**	end,
90 								sw_opaque_t						extra);
91 
92 
93 sw_result HOWL_API
94 sw_corby_buffer_init(
95 				sw_corby_buffer	*	self);
96 
97 
98 sw_result HOWL_API
99 sw_corby_buffer_init_with_size(
100 				sw_corby_buffer	*	self,
101 				sw_size_t				size);
102 
103 
104 sw_result HOWL_API
105 sw_corby_buffer_init_with_delegate(
106 				sw_corby_buffer					*	self,
107 				sw_corby_buffer_delegate			delegate,
108 				sw_corby_buffer_overflow_func		overflow,
109 				sw_corby_buffer_underflow_func	underflow,
110 				sw_opaque_t								extra);
111 
112 
113 sw_result HOWL_API
114 sw_corby_buffer_init_with_size_and_delegate(
115 				sw_corby_buffer					*	self,
116 				sw_size_t								size,
117 				sw_corby_buffer_delegate			delegate,
118 				sw_corby_buffer_overflow_func		overflow,
119 				sw_corby_buffer_underflow_func	underflow,
120 				sw_opaque_t								extra);
121 
122 
123 sw_result HOWL_API
124 sw_corby_buffer_fina(
125 				sw_corby_buffer	self);
126 
127 
128 void HOWL_API
129 sw_corby_buffer_reset(
130 				sw_corby_buffer	self);
131 
132 
133 sw_result HOWL_API
134 sw_corby_buffer_set_octets(
135 				sw_corby_buffer	self,
136 				sw_octets			octets,
137 				sw_size_t			size);
138 
139 
140 sw_octets HOWL_API
141 sw_corby_buffer_octets(
142 				sw_corby_buffer	self);
143 
144 
145 sw_size_t HOWL_API
146 sw_corby_buffer_bytes_used(
147 				sw_corby_buffer	self);
148 
149 
150 sw_size_t HOWL_API
151 sw_corby_buffer_size(
152 				sw_corby_buffer	self);
153 
154 
155 sw_result HOWL_API
156 sw_corby_buffer_put_int8(
157 				sw_corby_buffer	self,
158 				sw_int8			val);
159 
160 
161 sw_result HOWL_API
162 sw_corby_buffer_put_uint8(
163 				sw_corby_buffer	self,
164 				sw_uint8			val);
165 
166 
167 sw_result HOWL_API
168 sw_corby_buffer_put_int16(
169 				sw_corby_buffer	self,
170 				sw_int16			val);
171 
172 
173 sw_result HOWL_API
174 sw_corby_buffer_put_uint16(
175 				sw_corby_buffer	self,
176 				sw_uint16			val);
177 
178 
179 sw_result HOWL_API
180 sw_corby_buffer_put_int32(
181 				sw_corby_buffer	self,
182 				sw_int32			val);
183 
184 
185 sw_result HOWL_API
186 sw_corby_buffer_put_uint32(
187 				sw_corby_buffer	self,
188 				sw_uint32			val);
189 
190 
191 sw_result HOWL_API
192 sw_corby_buffer_put_octets(
193 				sw_corby_buffer	self,
194 				sw_const_octets	val,
195 				sw_size_t			size);
196 
197 
198 sw_result HOWL_API
199 sw_corby_buffer_put_sized_octets(
200 				sw_corby_buffer	self,
201 				sw_const_octets	val,
202 				sw_uint32			len);
203 
204 
205 sw_result HOWL_API
206 sw_corby_buffer_put_cstring(
207 				sw_corby_buffer	self,
208 				sw_const_string	val);
209 
210 
211 sw_result HOWL_API
212 sw_corby_buffer_put_object(
213 				sw_corby_buffer						self,
214 				const struct _sw_corby_object	*	object);
215 
216 
217 sw_result HOWL_API
218 sw_corby_buffer_put_pad(
219 				sw_corby_buffer						self,
220 				sw_corby_buffer_pad					pad);
221 
222 
223 sw_result HOWL_API
224 sw_corby_buffer_get_int8(
225 				sw_corby_buffer	self,
226 				sw_int8		*	val);
227 
228 
229 sw_result HOWL_API
230 sw_corby_buffer_get_uint8(
231 				sw_corby_buffer	self,
232 				sw_uint8		*	val);
233 
234 
235 sw_result HOWL_API
236 sw_corby_buffer_get_int16(
237 				sw_corby_buffer	self,
238 				sw_int16		*	val,
239             sw_uint8			endian);
240 
241 
242 sw_result HOWL_API
243 sw_corby_buffer_get_uint16(
244 				sw_corby_buffer	self,
245 				sw_uint16		*	val,
246             sw_uint8			endian);
247 
248 
249 sw_result HOWL_API
250 sw_corby_buffer_get_int32(
251 				sw_corby_buffer	self,
252 				sw_int32		*	val,
253             sw_uint8			endian);
254 
255 
256 sw_result HOWL_API
257 sw_corby_buffer_get_uint32(
258 				sw_corby_buffer	self,
259 				sw_uint32		*	val,
260             sw_uint8			endian);
261 
262 
263 sw_result HOWL_API
264 sw_corby_buffer_get_octets(
265 				sw_corby_buffer	self,
266 				sw_octets			octets,
267 				sw_size_t			size);
268 
269 
270 sw_result HOWL_API
271 sw_corby_buffer_allocate_and_get_sized_octets(
272 				sw_corby_buffer	self,
273 				sw_octets		*	val,
274 				sw_uint32		*	size,
275             sw_uint8			endian);
276 
277 
278 sw_result HOWL_API
279 sw_corby_buffer_get_zerocopy_sized_octets(
280 				sw_corby_buffer	self,
281 				sw_octets		*	val,
282 				sw_uint32		*	size,
283 				sw_uint8			endian);
284 
285 
286 sw_result HOWL_API
287 sw_corby_buffer_get_sized_octets(
288 				sw_corby_buffer	self,
289 				sw_octets			val,
290 				sw_uint32		*	len,
291             sw_uint8			endian);
292 
293 
294 sw_result HOWL_API
295 sw_corby_buffer_allocate_and_get_cstring(
296 				sw_corby_buffer	self,
297 				sw_string		*	val,
298 				sw_uint32		*	len,
299 				sw_uint8			endian);
300 
301 
302 sw_result HOWL_API
303 sw_corby_buffer_get_zerocopy_cstring(
304 				sw_corby_buffer	self,
305 				sw_string		*	val,
306 				sw_uint32		*	len,
307 				sw_uint8			endian);
308 
309 
310 sw_result HOWL_API
311 sw_corby_buffer_get_cstring(
312 				sw_corby_buffer	self,
313 				sw_string			val,
314 				sw_uint32		*	len,
315 				sw_uint8			endian);
316 
317 
318 sw_result HOWL_API
319 sw_corby_buffer_get_object(
320 				sw_corby_buffer				self,
321 				struct _sw_corby_object	**	object,
322 				sw_uint8						endian);
323 
324 
325 #ifdef __cplusplus
326 }
327 #endif
328 
329 
330 #endif
331