- Remove svn:needs-lock, svn:eol-type, and svn:eol-tyle properties.
[reactos.git] / reactos / lib / 3rdparty / freetype / src / cache / ftcmru.h
index 40a61c7..c8f0c6e 100644 (file)
-/***************************************************************************/\r
-/*                                                                         */\r
-/*  ftcmru.h                                                               */\r
-/*                                                                         */\r
-/*    Simple MRU list-cache (specification).                               */\r
-/*                                                                         */\r
-/*  Copyright 2000-2001, 2003, 2004, 2005, 2006 by                         */\r
-/*  David Turner, Robert Wilhelm, and Werner Lemberg.                      */\r
-/*                                                                         */\r
-/*  This file is part of the FreeType project, and may only be used,       */\r
-/*  modified, and distributed under the terms of the FreeType project      */\r
-/*  license, LICENSE.TXT.  By continuing to use, modify, or distribute     */\r
-/*  this file you indicate that you have read the license and              */\r
-/*  understand and accept it fully.                                        */\r
-/*                                                                         */\r
-/***************************************************************************/\r
-\r
-\r
-  /*************************************************************************/\r
-  /*                                                                       */\r
-  /* An MRU is a list that cannot hold more than a certain number of       */\r
-  /* elements (`max_elements').  All elements in the list are sorted in    */\r
-  /* least-recently-used order, i.e., the `oldest' element is at the tail  */\r
-  /* of the list.                                                          */\r
-  /*                                                                       */\r
-  /* When doing a lookup (either through `Lookup()' or `Lookup_Node()'),   */\r
-  /* the list is searched for an element with the corresponding key.  If   */\r
-  /* it is found, the element is moved to the head of the list and is      */\r
-  /* returned.                                                             */\r
-  /*                                                                       */\r
-  /* If no corresponding element is found, the lookup routine will try to  */\r
-  /* obtain a new element with the relevant key.  If the list is already   */\r
-  /* full, the oldest element from the list is discarded and replaced by a */\r
-  /* new one; a new element is added to the list otherwise.                */\r
-  /*                                                                       */\r
-  /* Note that it is possible to pre-allocate the element list nodes.      */\r
-  /* This is handy if `max_elements' is sufficiently small, as it saves    */\r
-  /* allocations/releases during the lookup process.                       */\r
-  /*                                                                       */\r
-  /*************************************************************************/\r
-\r
-\r
-#ifndef __FTCMRU_H__\r
-#define __FTCMRU_H__\r
-\r
-\r
-#include <ft2build.h>\r
-#include FT_FREETYPE_H\r
-\r
-#ifdef FREETYPE_H\r
-#error "freetype.h of FreeType 1 has been loaded!"\r
-#error "Please fix the directory search order for header files"\r
-#error "so that freetype.h of FreeType 2 is found first."\r
-#endif\r
-\r
-#define  xxFT_DEBUG_ERROR\r
-#define  FTC_INLINE\r
-\r
-FT_BEGIN_HEADER\r
-\r
-  typedef struct FTC_MruNodeRec_*  FTC_MruNode;\r
-\r
-  typedef struct  FTC_MruNodeRec_\r
-  {\r
-    FTC_MruNode  next;\r
-    FTC_MruNode  prev;\r
-\r
-  } FTC_MruNodeRec;\r
-\r
-\r
-  FT_LOCAL( void )\r
-  FTC_MruNode_Prepend( FTC_MruNode  *plist,\r
-                       FTC_MruNode   node );\r
-\r
-  FT_LOCAL( void )\r
-  FTC_MruNode_Up( FTC_MruNode  *plist,\r
-                  FTC_MruNode   node );\r
-\r
-  FT_LOCAL( void )\r
-  FTC_MruNode_Remove( FTC_MruNode  *plist,\r
-                      FTC_MruNode   node );\r
-\r
-\r
-  typedef struct FTC_MruListRec_*              FTC_MruList;\r
-\r
-  typedef struct FTC_MruListClassRec_ const *  FTC_MruListClass;\r
-\r
-\r
-  typedef FT_Bool\r
-  (*FTC_MruNode_CompareFunc)( FTC_MruNode  node,\r
-                              FT_Pointer   key );\r
-\r
-  typedef FT_Error\r
-  (*FTC_MruNode_InitFunc)( FTC_MruNode  node,\r
-                           FT_Pointer   key,\r
-                           FT_Pointer   data );\r
-\r
-  typedef FT_Error\r
-  (*FTC_MruNode_ResetFunc)( FTC_MruNode  node,\r
-                            FT_Pointer   key,\r
-                            FT_Pointer   data );\r
-\r
-  typedef void\r
-  (*FTC_MruNode_DoneFunc)( FTC_MruNode  node,\r
-                           FT_Pointer   data );\r
-\r
-\r
-  typedef struct  FTC_MruListClassRec_\r
-  {\r
-    FT_UInt                  node_size;\r
-    FTC_MruNode_CompareFunc  node_compare;\r
-    FTC_MruNode_InitFunc     node_init;\r
-    FTC_MruNode_ResetFunc    node_reset;\r
-    FTC_MruNode_DoneFunc     node_done;\r
-\r
-  } FTC_MruListClassRec;\r
-\r
-  typedef struct  FTC_MruListRec_\r
-  {\r
-    FT_UInt              num_nodes;\r
-    FT_UInt              max_nodes;\r
-    FTC_MruNode          nodes;\r
-    FT_Pointer           data;\r
-    FTC_MruListClassRec  clazz;\r
-    FT_Memory            memory;\r
-\r
-  } FTC_MruListRec;\r
-\r
-\r
-  FT_LOCAL( void )\r
-  FTC_MruList_Init( FTC_MruList       list,\r
-                    FTC_MruListClass  clazz,\r
-                    FT_UInt           max_nodes,\r
-                    FT_Pointer        data,\r
-                    FT_Memory         memory );\r
-\r
-  FT_LOCAL( void )\r
-  FTC_MruList_Reset( FTC_MruList  list );\r
-\r
-\r
-  FT_LOCAL( void )\r
-  FTC_MruList_Done( FTC_MruList  list );\r
-\r
-\r
-  FT_LOCAL( FT_Error )\r
-  FTC_MruList_New( FTC_MruList   list,\r
-                   FT_Pointer    key,\r
-                   FTC_MruNode  *anode );\r
-\r
-  FT_LOCAL( void )\r
-  FTC_MruList_Remove( FTC_MruList  list,\r
-                      FTC_MruNode  node );\r
-\r
-  FT_LOCAL( void )\r
-  FTC_MruList_RemoveSelection( FTC_MruList              list,\r
-                               FTC_MruNode_CompareFunc  selection,\r
-                               FT_Pointer               key );\r
-\r
-\r
-#ifdef FTC_INLINE\r
-\r
-#define FTC_MRULIST_LOOKUP_CMP( list, key, compare, node, error )           \\r
-  FT_BEGIN_STMNT                                                            \\r
-    FTC_MruNode*             _pfirst  = &(list)->nodes;                     \\r
-    FTC_MruNode_CompareFunc  _compare = (FTC_MruNode_CompareFunc)(compare); \\r
-    FTC_MruNode              _first, _node, *_pnode;                        \\r
-                                                                            \\r
-                                                                            \\r
-    error  = 0;                                                             \\r
-    _first = *(_pfirst);                                                    \\r
-    _node  = NULL;                                                          \\r
-                                                                            \\r
-    if ( _first )                                                           \\r
-    {                                                                       \\r
-      _node = _first;                                                       \\r
-      do                                                                    \\r
-      {                                                                     \\r
-        if ( _compare( _node, (key) ) )                                     \\r
-        {                                                                   \\r
-          if ( _node != _first )                                            \\r
-            FTC_MruNode_Up( _pfirst, _node );                               \\r
-                                                                            \\r
-          _pnode = (FTC_MruNode*)(void*)&(node);                            \\r
-          *_pnode = _node;                                                  \\r
-          goto _MruOk;                                                      \\r
-        }                                                                   \\r
-        _node = _node->next;                                                \\r
-                                                                            \\r
-      } while ( _node != _first) ;                                          \\r
-    }                                                                       \\r
-                                                                            \\r
-    error = FTC_MruList_New( (list), (key), (FTC_MruNode*)(void*)&(node) ); \\r
-  _MruOk:                                                                   \\r
-    ;                                                                       \\r
-  FT_END_STMNT\r
-\r
-#define FTC_MRULIST_LOOKUP( list, key, node, error ) \\r
-  FTC_MRULIST_LOOKUP_CMP( list, key, (list)->clazz.node_compare, node, error )\r
-\r
-#else  /* !FTC_INLINE */\r
-\r
-  FT_LOCAL( FTC_MruNode )\r
-  FTC_MruList_Find( FTC_MruList  list,\r
-                    FT_Pointer   key );\r
-\r
-  FT_LOCAL( FT_Error )\r
-  FTC_MruList_Lookup( FTC_MruList   list,\r
-                      FT_Pointer    key,\r
-                      FTC_MruNode  *pnode );\r
-\r
-#define FTC_MRULIST_LOOKUP( list, key, node, error ) \\r
-  error = FTC_MruList_Lookup( (list), (key), (FTC_MruNode*)&(node) )\r
-\r
-#endif /* !FTC_INLINE */\r
-\r
-\r
-#define FTC_MRULIST_LOOP( list, node )        \\r
-  FT_BEGIN_STMNT                              \\r
-    FTC_MruNode  _first = (list)->nodes;      \\r
-                                              \\r
-                                              \\r
-    if ( _first )                             \\r
-    {                                         \\r
-      FTC_MruNode  _node = _first;            \\r
-                                              \\r
-                                              \\r
-      do                                      \\r
-      {                                       \\r
-        *(FTC_MruNode*)&(node) = _node;\r
-\r
-\r
-#define FTC_MRULIST_LOOP_END()               \\r
-        _node = _node->next;                 \\r
-                                             \\r
-      } while ( _node != _first );           \\r
-    }                                        \\r
-  FT_END_STMNT\r
-\r
- /* */\r
-\r
-FT_END_HEADER\r
-\r
-\r
-#endif /* __FTCMRU_H__ */\r
-\r
-\r
-/* END */\r
+/***************************************************************************/
+/*                                                                         */
+/*  ftcmru.h                                                               */
+/*                                                                         */
+/*    Simple MRU list-cache (specification).                               */
+/*                                                                         */
+/*  Copyright 2000-2001, 2003, 2004, 2005, 2006 by                         */
+/*  David Turner, Robert Wilhelm, and Werner Lemberg.                      */
+/*                                                                         */
+/*  This file is part of the FreeType project, and may only be used,       */
+/*  modified, and distributed under the terms of the FreeType project      */
+/*  license, LICENSE.TXT.  By continuing to use, modify, or distribute     */
+/*  this file you indicate that you have read the license and              */
+/*  understand and accept it fully.                                        */
+/*                                                                         */
+/***************************************************************************/
+
+
+  /*************************************************************************/
+  /*                                                                       */
+  /* An MRU is a list that cannot hold more than a certain number of       */
+  /* elements (`max_elements').  All elements in the list are sorted in    */
+  /* least-recently-used order, i.e., the `oldest' element is at the tail  */
+  /* of the list.                                                          */
+  /*                                                                       */
+  /* When doing a lookup (either through `Lookup()' or `Lookup_Node()'),   */
+  /* the list is searched for an element with the corresponding key.  If   */
+  /* it is found, the element is moved to the head of the list and is      */
+  /* returned.                                                             */
+  /*                                                                       */
+  /* If no corresponding element is found, the lookup routine will try to  */
+  /* obtain a new element with the relevant key.  If the list is already   */
+  /* full, the oldest element from the list is discarded and replaced by a */
+  /* new one; a new element is added to the list otherwise.                */
+  /*                                                                       */
+  /* Note that it is possible to pre-allocate the element list nodes.      */
+  /* This is handy if `max_elements' is sufficiently small, as it saves    */
+  /* allocations/releases during the lookup process.                       */
+  /*                                                                       */
+  /*************************************************************************/
+
+
+#ifndef __FTCMRU_H__
+#define __FTCMRU_H__
+
+
+#include <ft2build.h>
+#include FT_FREETYPE_H
+
+#ifdef FREETYPE_H
+#error "freetype.h of FreeType 1 has been loaded!"
+#error "Please fix the directory search order for header files"
+#error "so that freetype.h of FreeType 2 is found first."
+#endif
+
+#define  xxFT_DEBUG_ERROR
+#define  FTC_INLINE
+
+FT_BEGIN_HEADER
+
+  typedef struct FTC_MruNodeRec_*  FTC_MruNode;
+
+  typedef struct  FTC_MruNodeRec_
+  {
+    FTC_MruNode  next;
+    FTC_MruNode  prev;
+
+  } FTC_MruNodeRec;
+
+
+  FT_LOCAL( void )
+  FTC_MruNode_Prepend( FTC_MruNode  *plist,
+                       FTC_MruNode   node );
+
+  FT_LOCAL( void )
+  FTC_MruNode_Up( FTC_MruNode  *plist,
+                  FTC_MruNode   node );
+
+  FT_LOCAL( void )
+  FTC_MruNode_Remove( FTC_MruNode  *plist,
+                      FTC_MruNode   node );
+
+
+  typedef struct FTC_MruListRec_*              FTC_MruList;
+
+  typedef struct FTC_MruListClassRec_ const *  FTC_MruListClass;
+
+
+  typedef FT_Bool
+  (*FTC_MruNode_CompareFunc)( FTC_MruNode  node,
+                              FT_Pointer   key );
+
+  typedef FT_Error
+  (*FTC_MruNode_InitFunc)( FTC_MruNode  node,
+                           FT_Pointer   key,
+                           FT_Pointer   data );
+
+  typedef FT_Error
+  (*FTC_MruNode_ResetFunc)( FTC_MruNode  node,
+                            FT_Pointer   key,
+                            FT_Pointer   data );
+
+  typedef void
+  (*FTC_MruNode_DoneFunc)( FTC_MruNode  node,
+                           FT_Pointer   data );
+
+
+  typedef struct  FTC_MruListClassRec_
+  {
+    FT_UInt                  node_size;
+    FTC_MruNode_CompareFunc  node_compare;
+    FTC_MruNode_InitFunc     node_init;
+    FTC_MruNode_ResetFunc    node_reset;
+    FTC_MruNode_DoneFunc     node_done;
+
+  } FTC_MruListClassRec;
+
+  typedef struct  FTC_MruListRec_
+  {
+    FT_UInt              num_nodes;
+    FT_UInt              max_nodes;
+    FTC_MruNode          nodes;
+    FT_Pointer           data;
+    FTC_MruListClassRec  clazz;
+    FT_Memory            memory;
+
+  } FTC_MruListRec;
+
+
+  FT_LOCAL( void )
+  FTC_MruList_Init( FTC_MruList       list,
+                    FTC_MruListClass  clazz,
+                    FT_UInt           max_nodes,
+                    FT_Pointer        data,
+                    FT_Memory         memory );
+
+  FT_LOCAL( void )
+  FTC_MruList_Reset( FTC_MruList  list );
+
+
+  FT_LOCAL( void )
+  FTC_MruList_Done( FTC_MruList  list );
+
+
+  FT_LOCAL( FT_Error )
+  FTC_MruList_New( FTC_MruList   list,
+                   FT_Pointer    key,
+                   FTC_MruNode  *anode );
+
+  FT_LOCAL( void )
+  FTC_MruList_Remove( FTC_MruList  list,
+                      FTC_MruNode  node );
+
+  FT_LOCAL( void )
+  FTC_MruList_RemoveSelection( FTC_MruList              list,
+                               FTC_MruNode_CompareFunc  selection,
+                               FT_Pointer               key );
+
+
+#ifdef FTC_INLINE
+
+#define FTC_MRULIST_LOOKUP_CMP( list, key, compare, node, error )           \
+  FT_BEGIN_STMNT                                                            \
+    FTC_MruNode*             _pfirst  = &(list)->nodes;                     \
+    FTC_MruNode_CompareFunc  _compare = (FTC_MruNode_CompareFunc)(compare); \
+    FTC_MruNode              _first, _node, *_pnode;                        \
+                                                                            \
+                                                                            \
+    error  = 0;                                                             \
+    _first = *(_pfirst);                                                    \
+    _node  = NULL;                                                          \
+                                                                            \
+    if ( _first )                                                           \
+    {                                                                       \
+      _node = _first;                                                       \
+      do                                                                    \
+      {                                                                     \
+        if ( _compare( _node, (key) ) )                                     \
+        {                                                                   \
+          if ( _node != _first )                                            \
+            FTC_MruNode_Up( _pfirst, _node );                               \
+                                                                            \
+          _pnode = (FTC_MruNode*)(void*)&(node);                            \
+          *_pnode = _node;                                                  \
+          goto _MruOk;                                                      \
+        }                                                                   \
+        _node = _node->next;                                                \
+                                                                            \
+      } while ( _node != _first) ;                                          \
+    }                                                                       \
+                                                                            \
+    error = FTC_MruList_New( (list), (key), (FTC_MruNode*)(void*)&(node) ); \
+  _MruOk:                                                                   \
+    ;                                                                       \
+  FT_END_STMNT
+
+#define FTC_MRULIST_LOOKUP( list, key, node, error ) \
+  FTC_MRULIST_LOOKUP_CMP( list, key, (list)->clazz.node_compare, node, error )
+
+#else  /* !FTC_INLINE */
+
+  FT_LOCAL( FTC_MruNode )
+  FTC_MruList_Find( FTC_MruList  list,
+                    FT_Pointer   key );
+
+  FT_LOCAL( FT_Error )
+  FTC_MruList_Lookup( FTC_MruList   list,
+                      FT_Pointer    key,
+                      FTC_MruNode  *pnode );
+
+#define FTC_MRULIST_LOOKUP( list, key, node, error ) \
+  error = FTC_MruList_Lookup( (list), (key), (FTC_MruNode*)&(node) )
+
+#endif /* !FTC_INLINE */
+
+
+#define FTC_MRULIST_LOOP( list, node )        \
+  FT_BEGIN_STMNT                              \
+    FTC_MruNode  _first = (list)->nodes;      \
+                                              \
+                                              \
+    if ( _first )                             \
+    {                                         \
+      FTC_MruNode  _node = _first;            \
+                                              \
+                                              \
+      do                                      \
+      {                                       \
+        *(FTC_MruNode*)&(node) = _node;
+
+
+#define FTC_MRULIST_LOOP_END()               \
+        _node = _node->next;                 \
+                                             \
+      } while ( _node != _first );           \
+    }                                        \
+  FT_END_STMNT
+
+ /* */
+
+FT_END_HEADER
+
+
+#endif /* __FTCMRU_H__ */
+
+
+/* END */