/***************************************************************************/
/* */
/* ftlist.h */
/* */
/* Generic list support for FreeType (specification). */
/* */
/* Copyright 1996-2015 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. */
/* */
/***************************************************************************/
/*************************************************************************/
/* */
/* This file implements functions relative to list processing. Its */
/* data structures are defined in `freetype.h’. */
/* */
/*************************************************************************/
#ifndef __FTLIST_H__
#define __FTLIST_H__
#include
#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
FT_BEGIN_HEADER
/*************************************************************************/
/* */
/*
/* list_processing */
/* */
/*
/* List Processing */
/* */
/*
/* Simple management of lists. */
/* */
/*
/* This section contains various definitions related to list */
/* processing using doubly-linked nodes. */
/* */
/*
/* FT_List */
/* FT_ListNode */
/* FT_ListRec */
/* FT_ListNodeRec */
/* */
/* FT_List_Add */
/* FT_List_Insert */
/* FT_List_Find */
/* FT_List_Remove */
/* FT_List_Up */
/* FT_List_Iterate */
/* FT_List_Iterator */
/* FT_List_Finalize */
/* FT_List_Destructor */
/* */
/*************************************************************************/
/*************************************************************************/
/* */
/*
/* FT_List_Find */
/* */
/*
/* Find the list node for a given listed object. */
/* */
/* */
/* list :: A pointer to the parent list. */
/* data :: The address of the listed object. */
/* */
/*
/* List node. NULL if it wasn’t found. */
/* */
FT_EXPORT( FT_ListNode )
FT_List_Find( FT_List list,
void* data );
/*************************************************************************/
/* */
/*
/* FT_List_Add */
/* */
/*
/* Append an element to the end of a list. */
/* */
/*
/* list :: A pointer to the parent list. */
/* node :: The node to append. */
/* */
FT_EXPORT( void )
FT_List_Add( FT_List list,
FT_ListNode node );
/*************************************************************************/
/* */
/*
/* FT_List_Insert */
/* */
/*
/* Insert an element at the head of a list. */
/* */
/*
/* list :: A pointer to parent list. */
/* node :: The node to insert. */
/* */
FT_EXPORT( void )
FT_List_Insert( FT_List list,
FT_ListNode node );
/*************************************************************************/
/* */
/*
/* FT_List_Remove */
/* */
/*
/* Remove a node from a list. This function doesn’t check whether */
/* the node is in the list! */
/* */
/* */
/* node :: The node to remove. */
/* */
/*
/* list :: A pointer to the parent list. */
/* */
FT_EXPORT( void )
FT_List_Remove( FT_List list,
FT_ListNode node );
/*************************************************************************/
/* */
/*
/* FT_List_Up */
/* */
/*
/* Move a node to the head/top of a list. Used to maintain LRU */
/* lists. */
/* */
/*
/* list :: A pointer to the parent list. */
/* node :: The node to move. */
/* */
FT_EXPORT( void )
FT_List_Up( FT_List list,
FT_ListNode node );
/*************************************************************************/
/* */
/*
/* FT_List_Iterator */
/* */
/*
/* An FT_List iterator function that is called during a list parse */
/* by @FT_List_Iterate. */
/* */
/* */
/* node :: The current iteration list node. */
/* */
/* user :: A typeless pointer passed to @FT_List_Iterate. */
/* Can be used to point to the iteration’s state. */
/* */
typedef FT_Error
(*FT_List_Iterator)( FT_ListNode node,
void* user );
/*************************************************************************/
/* */
/*
/* FT_List_Iterate */
/* */
/*
/* Parse a list and calls a given iterator function on each element. */
/* Note that parsing is stopped as soon as one of the iterator calls */
/* returns a non-zero value. */
/* */
/* */
/* list :: A handle to the list. */
/* iterator :: An iterator function, called on each node of the list. */
/* user :: A user-supplied field that is passed as the second */
/* argument to the iterator. */
/* */
/*
/* The result (a FreeType error code) of the last iterator call. */
/* */
FT_EXPORT( FT_Error )
FT_List_Iterate( FT_List list,
FT_List_Iterator iterator,
void* user );
/*************************************************************************/
/* */
/*
/* FT_List_Destructor */
/* */
/*
/* An @FT_List iterator function that is called during a list */
/* finalization by @FT_List_Finalize to destroy all elements in a */
/* given list. */
/* */
/* */
/* system :: The current system object. */
/* */
/* data :: The current object to destroy. */
/* */
/* user :: A typeless pointer passed to @FT_List_Iterate. It can */
/* be used to point to the iteration’s state. */
/* */
typedef void
(*FT_List_Destructor)( FT_Memory memory,
void* data,
void* user );
/*************************************************************************/
/* */
/*
/* FT_List_Finalize */
/* */
/*
/* Destroy all elements in the list as well as the list itself. */
/* */
/* */
/* list :: A handle to the list. */
/* */
/* destroy :: A list destructor that will be applied to each element */
/* of the list. Set this to NULL if not needed. */
/* */
/* memory :: The current memory object that handles deallocation. */
/* */
/* user :: A user-supplied field that is passed as the last */
/* argument to the destructor. */
/* */
/*
/* This function expects that all nodes added by @FT_List_Add or */
/* @FT_List_Insert have been dynamically allocated. */
/* */
FT_EXPORT( void )
FT_List_Finalize( FT_List list,
FT_List_Destructor destroy,
FT_Memory memory,
void* user );
/* */
FT_END_HEADER
#endif /* __FTLIST_H__ */
/* END */