OLD | NEW |
| (Empty) |
1 /***************************************************************************/ | |
2 /* */ | |
3 /* ftsystem.h */ | |
4 /* */ | |
5 /* FreeType low-level system interface definition (specification). */ | |
6 /* */ | |
7 /* Copyright 1996-2001, 2002, 2005, 2010 by */ | |
8 /* David Turner, Robert Wilhelm, and Werner Lemberg. */ | |
9 /* */ | |
10 /* This file is part of the FreeType project, and may only be used, */ | |
11 /* modified, and distributed under the terms of the FreeType project */ | |
12 /* license, LICENSE.TXT. By continuing to use, modify, or distribute */ | |
13 /* this file you indicate that you have read the license and */ | |
14 /* understand and accept it fully. */ | |
15 /* */ | |
16 /***************************************************************************/ | |
17 | |
18 | |
19 #ifndef __FTSYSTEM_H__ | |
20 #define __FTSYSTEM_H__ | |
21 | |
22 | |
23 #include "../ft2build.h" | |
24 | |
25 | |
26 FT_BEGIN_HEADER | |
27 | |
28 | |
29 /*************************************************************************/ | |
30 /* */ | |
31 /* <Section> */ | |
32 /* system_interface */ | |
33 /* */ | |
34 /* <Title> */ | |
35 /* System Interface */ | |
36 /* */ | |
37 /* <Abstract> */ | |
38 /* How FreeType manages memory and i/o. */ | |
39 /* */ | |
40 /* <Description> */ | |
41 /* This section contains various definitions related to memory */ | |
42 /* management and i/o access. You need to understand this */ | |
43 /* information if you want to use a custom memory manager or you own */ | |
44 /* i/o streams. */ | |
45 /* */ | |
46 /*************************************************************************/ | |
47 | |
48 | |
49 /*************************************************************************/ | |
50 /* */ | |
51 /* M E M O R Y M A N A G E M E N T */ | |
52 /* */ | |
53 /*************************************************************************/ | |
54 | |
55 | |
56 /************************************************************************* | |
57 * | |
58 * @type: | |
59 * FT_Memory | |
60 * | |
61 * @description: | |
62 * A handle to a given memory manager object, defined with an | |
63 * @FT_MemoryRec structure. | |
64 * | |
65 */ | |
66 typedef struct FT_MemoryRec_* FT_Memory; | |
67 | |
68 | |
69 /************************************************************************* | |
70 * | |
71 * @functype: | |
72 * FT_Alloc_Func | |
73 * | |
74 * @description: | |
75 * A function used to allocate `size' bytes from `memory'. | |
76 * | |
77 * @input: | |
78 * memory :: | |
79 * A handle to the source memory manager. | |
80 * | |
81 * size :: | |
82 * The size in bytes to allocate. | |
83 * | |
84 * @return: | |
85 * Address of new memory block. 0~in case of failure. | |
86 * | |
87 */ | |
88 typedef void* | |
89 (*FT_Alloc_Func)( FT_Memory memory, | |
90 long size ); | |
91 | |
92 /* Sunliang.Liu 20100915 sync 221's revison. */ | |
93 typedef void* | |
94 (*FT_AllocDebug_Func)( FT_Memory memory, | |
95 long size, const char* filename, int line); | |
96 | |
97 | |
98 | |
99 /************************************************************************* | |
100 * | |
101 * @functype: | |
102 * FT_Free_Func | |
103 * | |
104 * @description: | |
105 * A function used to release a given block of memory. | |
106 * | |
107 * @input: | |
108 * memory :: | |
109 * A handle to the source memory manager. | |
110 * | |
111 * block :: | |
112 * The address of the target memory block. | |
113 * | |
114 */ | |
115 typedef void | |
116 (*FT_Free_Func)( FT_Memory memory, | |
117 void* block ); | |
118 | |
119 | |
120 /************************************************************************* | |
121 * | |
122 * @functype: | |
123 * FT_Realloc_Func | |
124 * | |
125 * @description: | |
126 * A function used to re-allocate a given block of memory. | |
127 * | |
128 * @input: | |
129 * memory :: | |
130 * A handle to the source memory manager. | |
131 * | |
132 * cur_size :: | |
133 * The block's current size in bytes. | |
134 * | |
135 * new_size :: | |
136 * The block's requested new size. | |
137 * | |
138 * block :: | |
139 * The block's current address. | |
140 * | |
141 * @return: | |
142 * New block address. 0~in case of memory shortage. | |
143 * | |
144 * @note: | |
145 * In case of error, the old block must still be available. | |
146 * | |
147 */ | |
148 typedef void* | |
149 (*FT_Realloc_Func)( FT_Memory memory, | |
150 long cur_size, | |
151 long new_size, | |
152 void* block ); | |
153 | |
154 | |
155 /************************************************************************* | |
156 * | |
157 * @struct: | |
158 * FT_MemoryRec | |
159 * | |
160 * @description: | |
161 * A structure used to describe a given memory manager to FreeType~2. | |
162 * | |
163 * @fields: | |
164 * user :: | |
165 * A generic typeless pointer for user data. | |
166 * | |
167 * alloc :: | |
168 * A pointer type to an allocation function. | |
169 * | |
170 * free :: | |
171 * A pointer type to an memory freeing function. | |
172 * | |
173 * realloc :: | |
174 * A pointer type to a reallocation function. | |
175 * | |
176 */ | |
177 struct FT_MemoryRec_ | |
178 { | |
179 void* user; | |
180 FT_Alloc_Func alloc; | |
181 FT_AllocDebug_Func allocdebug; /* Sunliang.Liu 20100915 sync 221's revi
son. */ | |
182 FT_Free_Func free; | |
183 FT_Realloc_Func realloc; | |
184 }; | |
185 | |
186 | |
187 /*************************************************************************/ | |
188 /* */ | |
189 /* I / O M A N A G E M E N T */ | |
190 /* */ | |
191 /*************************************************************************/ | |
192 | |
193 | |
194 /************************************************************************* | |
195 * | |
196 * @type: | |
197 * FT_Stream | |
198 * | |
199 * @description: | |
200 * A handle to an input stream. | |
201 * | |
202 */ | |
203 typedef struct FT_StreamRec_* FT_Stream; | |
204 | |
205 | |
206 /************************************************************************* | |
207 * | |
208 * @struct: | |
209 * FT_StreamDesc | |
210 * | |
211 * @description: | |
212 * A union type used to store either a long or a pointer. This is used | |
213 * to store a file descriptor or a `FILE*' in an input stream. | |
214 * | |
215 */ | |
216 typedef union FT_StreamDesc_ | |
217 { | |
218 long value; | |
219 void* pointer; | |
220 | |
221 } FT_StreamDesc; | |
222 | |
223 | |
224 /************************************************************************* | |
225 * | |
226 * @functype: | |
227 * FT_Stream_IoFunc | |
228 * | |
229 * @description: | |
230 * A function used to seek and read data from a given input stream. | |
231 * | |
232 * @input: | |
233 * stream :: | |
234 * A handle to the source stream. | |
235 * | |
236 * offset :: | |
237 * The offset of read in stream (always from start). | |
238 * | |
239 * buffer :: | |
240 * The address of the read buffer. | |
241 * | |
242 * count :: | |
243 * The number of bytes to read from the stream. | |
244 * | |
245 * @return: | |
246 * The number of bytes effectively read by the stream. | |
247 * | |
248 * @note: | |
249 * This function might be called to perform a seek or skip operation | |
250 * with a `count' of~0. A non-zero return value then indicates an | |
251 * error. | |
252 * | |
253 */ | |
254 typedef unsigned long | |
255 (*FT_Stream_IoFunc)( FT_Stream stream, | |
256 unsigned long offset, | |
257 unsigned char* buffer, | |
258 unsigned long count ); | |
259 | |
260 | |
261 /************************************************************************* | |
262 * | |
263 * @functype: | |
264 * FT_Stream_CloseFunc | |
265 * | |
266 * @description: | |
267 * A function used to close a given input stream. | |
268 * | |
269 * @input: | |
270 * stream :: | |
271 * A handle to the target stream. | |
272 * | |
273 */ | |
274 typedef void | |
275 (*FT_Stream_CloseFunc)( FT_Stream stream ); | |
276 | |
277 | |
278 /************************************************************************* | |
279 * | |
280 * @struct: | |
281 * FT_StreamRec | |
282 * | |
283 * @description: | |
284 * A structure used to describe an input stream. | |
285 * | |
286 * @input: | |
287 * base :: | |
288 * For memory-based streams, this is the address of the first stream | |
289 * byte in memory. This field should always be set to NULL for | |
290 * disk-based streams. | |
291 * | |
292 * size :: | |
293 * The stream size in bytes. | |
294 * | |
295 * pos :: | |
296 * The current position within the stream. | |
297 * | |
298 * descriptor :: | |
299 * This field is a union that can hold an integer or a pointer. It is | |
300 * used by stream implementations to store file descriptors or `FILE*' | |
301 * pointers. | |
302 * | |
303 * pathname :: | |
304 * This field is completely ignored by FreeType. However, it is often | |
305 * useful during debugging to use it to store the stream's filename | |
306 * (where available). | |
307 * | |
308 * read :: | |
309 * The stream's input function. | |
310 * | |
311 * close :: | |
312 * The stream's close function. | |
313 * | |
314 * memory :: | |
315 * The memory manager to use to preload frames. This is set | |
316 * internally by FreeType and shouldn't be touched by stream | |
317 * implementations. | |
318 * | |
319 * cursor :: | |
320 * This field is set and used internally by FreeType when parsing | |
321 * frames. | |
322 * | |
323 * limit :: | |
324 * This field is set and used internally by FreeType when parsing | |
325 * frames. | |
326 * | |
327 */ | |
328 typedef struct FT_StreamRec_ | |
329 { | |
330 unsigned char* base; | |
331 unsigned long size; | |
332 unsigned long pos; | |
333 | |
334 FT_StreamDesc descriptor; | |
335 FT_StreamDesc pathname; | |
336 FT_Stream_IoFunc read; | |
337 FT_Stream_CloseFunc close; | |
338 | |
339 FT_Memory memory; | |
340 unsigned char* cursor; | |
341 unsigned char* limit; | |
342 | |
343 } FT_StreamRec; | |
344 | |
345 | |
346 /* */ | |
347 | |
348 | |
349 FT_END_HEADER | |
350 | |
351 #endif /* __FTSYSTEM_H__ */ | |
352 | |
353 | |
354 /* END */ | |
OLD | NEW |