misc/libfreetype/include/freetype/ftlist.h
branchwebgl
changeset 9521 8054d9d775fd
parent 9282 92af50454cf2
parent 9519 b8b5c82eb61b
child 9950 2759212a27de
equal deleted inserted replaced
9282:92af50454cf2 9521:8054d9d775fd
     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 */