• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /***************************************************************************/
2 /*                                                                         */
3 /*  ftlist.h                                                               */
4 /*                                                                         */
5 /*    Generic list support for FreeType (specification).                   */
6 /*                                                                         */
7 /*  Copyright 1996-2001, 2003, 2007, 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   /*************************************************************************/
20   /*                                                                       */
21   /*  This file implements functions relative to list processing.  Its     */
22   /*  data structures are defined in `freetype.h'.                         */
23   /*                                                                       */
24   /*************************************************************************/
25 
26 
27 #ifndef __FTLIST_H__
28 #define __FTLIST_H__
29 
30 
31 #include <ft2build.h>
32 #include FT_FREETYPE_H
33 
34 #ifdef FREETYPE_H
35 #error "freetype.h of FreeType 1 has been loaded!"
36 #error "Please fix the directory search order for header files"
37 #error "so that freetype.h of FreeType 2 is found first."
38 #endif
39 
40 
41 FT_BEGIN_HEADER
42 
43 
44   /*************************************************************************/
45   /*                                                                       */
46   /* <Section>                                                             */
47   /*    list_processing                                                    */
48   /*                                                                       */
49   /* <Title>                                                               */
50   /*    List Processing                                                    */
51   /*                                                                       */
52   /* <Abstract>                                                            */
53   /*    Simple management of lists.                                        */
54   /*                                                                       */
55   /* <Description>                                                         */
56   /*    This section contains various definitions related to list          */
57   /*    processing using doubly-linked nodes.                              */
58   /*                                                                       */
59   /* <Order>                                                               */
60   /*    FT_List                                                            */
61   /*    FT_ListNode                                                        */
62   /*    FT_ListRec                                                         */
63   /*    FT_ListNodeRec                                                     */
64   /*                                                                       */
65   /*    FT_List_Add                                                        */
66   /*    FT_List_Insert                                                     */
67   /*    FT_List_Find                                                       */
68   /*    FT_List_Remove                                                     */
69   /*    FT_List_Up                                                         */
70   /*    FT_List_Iterate                                                    */
71   /*    FT_List_Iterator                                                   */
72   /*    FT_List_Finalize                                                   */
73   /*    FT_List_Destructor                                                 */
74   /*                                                                       */
75   /*************************************************************************/
76 
77 
78   /*************************************************************************/
79   /*                                                                       */
80   /* <Function>                                                            */
81   /*    FT_List_Find                                                       */
82   /*                                                                       */
83   /* <Description>                                                         */
84   /*    Find the list node for a given listed object.                      */
85   /*                                                                       */
86   /* <Input>                                                               */
87   /*    list :: A pointer to the parent list.                              */
88   /*    data :: The address of the listed object.                          */
89   /*                                                                       */
90   /* <Return>                                                              */
91   /*    List node.  NULL if it wasn't found.                               */
92   /*                                                                       */
93   FT_EXPORT( FT_ListNode )
94   FT_List_Find( FT_List  list,
95                 void*    data );
96 
97 
98   /*************************************************************************/
99   /*                                                                       */
100   /* <Function>                                                            */
101   /*    FT_List_Add                                                        */
102   /*                                                                       */
103   /* <Description>                                                         */
104   /*    Append an element to the end of a list.                            */
105   /*                                                                       */
106   /* <InOut>                                                               */
107   /*    list :: A pointer to the parent list.                              */
108   /*    node :: The node to append.                                        */
109   /*                                                                       */
110   FT_EXPORT( void )
111   FT_List_Add( FT_List      list,
112                FT_ListNode  node );
113 
114 
115   /*************************************************************************/
116   /*                                                                       */
117   /* <Function>                                                            */
118   /*    FT_List_Insert                                                     */
119   /*                                                                       */
120   /* <Description>                                                         */
121   /*    Insert an element at the head of a list.                           */
122   /*                                                                       */
123   /* <InOut>                                                               */
124   /*    list :: A pointer to parent list.                                  */
125   /*    node :: The node to insert.                                        */
126   /*                                                                       */
127   FT_EXPORT( void )
128   FT_List_Insert( FT_List      list,
129                   FT_ListNode  node );
130 
131 
132   /*************************************************************************/
133   /*                                                                       */
134   /* <Function>                                                            */
135   /*    FT_List_Remove                                                     */
136   /*                                                                       */
137   /* <Description>                                                         */
138   /*    Remove a node from a list.  This function doesn't check whether    */
139   /*    the node is in the list!                                           */
140   /*                                                                       */
141   /* <Input>                                                               */
142   /*    node :: The node to remove.                                        */
143   /*                                                                       */
144   /* <InOut>                                                               */
145   /*    list :: A pointer to the parent list.                              */
146   /*                                                                       */
147   FT_EXPORT( void )
148   FT_List_Remove( FT_List      list,
149                   FT_ListNode  node );
150 
151 
152   /*************************************************************************/
153   /*                                                                       */
154   /* <Function>                                                            */
155   /*    FT_List_Up                                                         */
156   /*                                                                       */
157   /* <Description>                                                         */
158   /*    Move a node to the head/top of a list.  Used to maintain LRU       */
159   /*    lists.                                                             */
160   /*                                                                       */
161   /* <InOut>                                                               */
162   /*    list :: A pointer to the parent list.                              */
163   /*    node :: The node to move.                                          */
164   /*                                                                       */
165   FT_EXPORT( void )
166   FT_List_Up( FT_List      list,
167               FT_ListNode  node );
168 
169 
170   /*************************************************************************/
171   /*                                                                       */
172   /* <FuncType>                                                            */
173   /*    FT_List_Iterator                                                   */
174   /*                                                                       */
175   /* <Description>                                                         */
176   /*    An FT_List iterator function which is called during a list parse   */
177   /*    by @FT_List_Iterate.                                               */
178   /*                                                                       */
179   /* <Input>                                                               */
180   /*    node :: The current iteration list node.                           */
181   /*                                                                       */
182   /*    user :: A typeless pointer passed to @FT_List_Iterate.             */
183   /*            Can be used to point to the iteration's state.             */
184   /*                                                                       */
185   typedef FT_Error
186   (*FT_List_Iterator)( FT_ListNode  node,
187                        void*        user );
188 
189 
190   /*************************************************************************/
191   /*                                                                       */
192   /* <Function>                                                            */
193   /*    FT_List_Iterate                                                    */
194   /*                                                                       */
195   /* <Description>                                                         */
196   /*    Parse a list and calls a given iterator function on each element.  */
197   /*    Note that parsing is stopped as soon as one of the iterator calls  */
198   /*    returns a non-zero value.                                          */
199   /*                                                                       */
200   /* <Input>                                                               */
201   /*    list     :: A handle to the list.                                  */
202   /*    iterator :: An iterator function, called on each node of the list. */
203   /*    user     :: A user-supplied field which is passed as the second    */
204   /*                argument to the iterator.                              */
205   /*                                                                       */
206   /* <Return>                                                              */
207   /*    The result (a FreeType error code) of the last iterator call.      */
208   /*                                                                       */
209   FT_EXPORT( FT_Error )
210   FT_List_Iterate( FT_List           list,
211                    FT_List_Iterator  iterator,
212                    void*             user );
213 
214 
215   /*************************************************************************/
216   /*                                                                       */
217   /* <FuncType>                                                            */
218   /*    FT_List_Destructor                                                 */
219   /*                                                                       */
220   /* <Description>                                                         */
221   /*    An @FT_List iterator function which is called during a list        */
222   /*    finalization by @FT_List_Finalize to destroy all elements in a     */
223   /*    given list.                                                        */
224   /*                                                                       */
225   /* <Input>                                                               */
226   /*    system :: The current system object.                               */
227   /*                                                                       */
228   /*    data   :: The current object to destroy.                           */
229   /*                                                                       */
230   /*    user   :: A typeless pointer passed to @FT_List_Iterate.  It can   */
231   /*              be used to point to the iteration's state.               */
232   /*                                                                       */
233   typedef void
234   (*FT_List_Destructor)( FT_Memory  memory,
235                          void*      data,
236                          void*      user );
237 
238 
239   /*************************************************************************/
240   /*                                                                       */
241   /* <Function>                                                            */
242   /*    FT_List_Finalize                                                   */
243   /*                                                                       */
244   /* <Description>                                                         */
245   /*    Destroy all elements in the list as well as the list itself.       */
246   /*                                                                       */
247   /* <Input>                                                               */
248   /*    list    :: A handle to the list.                                   */
249   /*                                                                       */
250   /*    destroy :: A list destructor that will be applied to each element  */
251   /*               of the list.                                            */
252   /*                                                                       */
253   /*    memory  :: The current memory object which handles deallocation.   */
254   /*                                                                       */
255   /*    user    :: A user-supplied field which is passed as the last       */
256   /*               argument to the destructor.                             */
257   /*                                                                       */
258   /* <Note>                                                                */
259   /*    This function expects that all nodes added by @FT_List_Add or      */
260   /*    @FT_List_Insert have been dynamically allocated.                   */
261   /*                                                                       */
262   FT_EXPORT( void )
263   FT_List_Finalize( FT_List             list,
264                     FT_List_Destructor  destroy,
265                     FT_Memory           memory,
266                     void*               user );
267 
268 
269   /* */
270 
271 
272 FT_END_HEADER
273 
274 #endif /* __FTLIST_H__ */
275 
276 
277 /* END */
278