topical media & game development
lib-of-vs-libs-free-type-2.1.4-include-freetype2-freetype-internal-ftcore.h / h
ifndef __FT_CORE_H__
define __FT_CORE_H__
include <ft2build.h>
include FT_TYPES_H
include FT_SYSTEM_MEMORY_H
FT_BEGIN_HEADER
***********************************************************************
***********************************************************************
*** ****
*** C L E A N U P S T A C K ****
*** ****
***********************************************************************
***********************************************************************
**********************************************************************
@functype: FT_CleanupFunc
@description:
a function used to cleanup a given item on the cleanup stack
@input:
item :: target item pointer
item_data :: optional argument to cleanup routine
typedef void (*FT_CleanupFunc)( FT_Pointer item,
FT_Pointer item_data );
**********************************************************************
@type: FT_XHandler
@description:
handle to an exception-handler structure for the FreeType
exception sub-system
@note:
exception handlers are allocated on the stack within a
@FT_XTRY macro. Do not try to access them directly.
typedef struct FT_XHandlerRec_* FT_XHandler;
/* the size of a cleanup chunk in bytes is FT_CLEANUP_CHUNK_SIZE*12 + 4 */
/* this must be a small power of 2 whenever possible.. */
/* */
/* with a value of 5, we have a byte size of 64 bytes per chunk.. */
/* */
define FT_CLEANUP_CHUNK_SIZE 5
typedef struct FT_CleanupItemRec_
{
FT_Pointer item;
FT_CleanupFunc item_func;
FT_Pointer item_data;
} FT_CleanupItemRec;
typedef struct FT_CleanupChunkRec_* FT_CleanupChunk;
typedef struct FT_CleanupChunkRec_
{
FT_CleanupChunk link;
FT_CleanupItemRec items[ FT_CLEANUP_CHUNK_SIZE ];
} FT_CleanupChunkRec;
typedef struct FT_CleanupStackRec_
{
FT_CleanupItem top;
FT_CleanupItem limit;
FT_CleanupChunk chunk;
FT_CleanupChunkRec chunk_0; /* avoids stupid dynamic allocation */
FT_Memory memory;
} FT_CleanupStackRec, *FT_CleanupStack;
FT_BASE( void )
ft_cleanup_stack_push( FT_CleanupStack stack,
FT_Pointer item,
FT_CleanupFunc item_func,
FT_Pointer item_data );
FT_BASE( void )
ft_cleanup_stack_pop( FT_CleanupStack stack,
FT_Int destroy );
FT_BASE( FT_CleanupItem )
ft_cleanup_stack_peek( FT_CleanupStack stack );
FT_BASE( void )
ft_cleanup_throw( FT_CleanupStack stack,
FT_Error error );
***********************************************************************
***********************************************************************
*** ****
*** M E M O R Y M A N A G E R ****
*** ****
***********************************************************************
***********************************************************************
typedef struct FT_MemoryRec_
{
FT_Memory_AllocFunc mem_alloc; /* shortcut to funcs->mem_alloc */
FT_Memory_FreeFunc mem_free; /* shortcut to funcs->mem_free */
FT_Pointer mem_data;
const FT_Memory_Funcs mem_funcs;
FT_CleanupStackRec cleanup_stack;
FT_Pointer meta_class;
} FT_MemoryRec;
define FT_MEMORY(x) ((FT_Memory)(x))
define FT_MEMORY__ALLOC(x) FT_MEMORY(x)->mem_alloc
define FT_MEMORY__FREE(x) FT_MEMORY(x)->mem_free
define FT_MEMORY__REALLOC(x) FT_MEMORY(x)->mem_funcs->mem_realloc
define FT_MEMORY__CLEANUP(x) (&FT_MEMORY(x)->cleanup_stack)
define FT_MEMORY__META_CLASS(x) ((FT_MetaClass)(FT_MEMORY(x)->meta_class))
***********************************************************************
***********************************************************************
*** ****
*** E X C E P T I O N H A N D L I N G ****
*** ****
***********************************************************************
***********************************************************************
**********************************************************************
@struct: FT_XHandlerRec
@description:
exception handler structure
@fields:
previous :: previous handler in chain.
jum_buffer :: processor state used by setjmp/longjmp to implement
exception control transfer
error :: exception error code
mark :: top of cleanup stack when @FT_XTRY is used
typedef struct FT_XHandlerRec_
{
FT_XHandler previous;
ft_jmp_buf jump_buffer;
volatile FT_Error error;
FT_Pointer mark;
} FT_XHandlerRec;
FT_BASE( void )
ft_xhandler_enter( FT_XHandler xhandler,
FT_Memory memory );
FT_BASE( void )
ft_xhandler_exit( FT_XHandler xhandler );
FT_END_HEADER
endif /* __FT_CORE_H__ */
(C) Æliens
04/09/2009
You may not copy or print any of this material without explicit permission of the author or the publisher.
In case of other copyright issues, contact the author.