Subversion Repositories Kolibri OS

Rev

Go to most recent revision | Blame | Last modification | View Log | RSS feed

  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.