2002-04-18 00:54:02 +02:00
|
|
|
#ifndef __FT_SYSTEM_MEMORY_H__
|
|
|
|
#define __FT_SYSTEM_MEMORY_H__
|
|
|
|
|
|
|
|
#include <ft2build.h>
|
|
|
|
|
|
|
|
FT_BEGIN_HEADER
|
|
|
|
|
2002-09-18 00:57:29 +02:00
|
|
|
/************************************************************************/
|
|
|
|
/************************************************************************/
|
|
|
|
/***** *****/
|
|
|
|
/***** NOTE: THE CONTENT OF THIS FILE IS NOT CURRENTLY USED *****/
|
2002-09-18 13:32:12 +02:00
|
|
|
/***** IN NORMAL BUILDS. CONSIDER IT EXPERIMENTAL. *****/
|
2002-09-18 00:57:29 +02:00
|
|
|
/***** *****/
|
|
|
|
/************************************************************************/
|
|
|
|
/************************************************************************/
|
|
|
|
|
|
|
|
|
|
|
|
/*@**********************************************************************
|
2002-05-01 10:46:56 +02:00
|
|
|
*
|
|
|
|
* @type: FT_Memory
|
|
|
|
*
|
|
|
|
* @description:
|
|
|
|
* opaque handle to a memory manager handle. Note that since FreeType
|
|
|
|
* 2.2, the memory manager structure FT_MemoryRec is hidden to client
|
|
|
|
* applications.
|
|
|
|
*
|
|
|
|
* however, you can still define custom allocators easily using the
|
|
|
|
* @ft_memory_new API
|
|
|
|
*/
|
2002-04-18 00:54:02 +02:00
|
|
|
typedef struct FT_MemoryRec_* FT_Memory;
|
|
|
|
|
2002-05-01 10:46:56 +02:00
|
|
|
|
2002-09-18 00:57:29 +02:00
|
|
|
/*@**********************************************************************
|
2002-05-01 10:46:56 +02:00
|
|
|
*
|
|
|
|
* @functype: FT_Memory_AllocFunc
|
|
|
|
*
|
|
|
|
* @description:
|
|
|
|
* a function used to allocate a block of memory.
|
|
|
|
*
|
|
|
|
* @input:
|
|
|
|
* size :: size of blocks in bytes. Always > 0 !!
|
|
|
|
* mem_data :: memory-manager specific optional argument
|
|
|
|
* (see @ft_memory_new)
|
|
|
|
*
|
|
|
|
* @return:
|
|
|
|
* address of new block. NULL in case of memory exhaustion
|
|
|
|
*/
|
2002-04-18 00:54:02 +02:00
|
|
|
typedef FT_Pointer (*FT_Memory_AllocFunc)( FT_ULong size,
|
2002-05-01 10:46:56 +02:00
|
|
|
FT_Pointer mem_data );
|
|
|
|
|
|
|
|
|
2002-09-18 00:57:29 +02:00
|
|
|
/*@**********************************************************************
|
2002-05-01 10:46:56 +02:00
|
|
|
*
|
|
|
|
* @functype: FT_Memory_FreeFunc
|
|
|
|
*
|
|
|
|
* @description:
|
|
|
|
* a function used to release a block of memory created through
|
|
|
|
* @FT_Memory_AllocFunc or @FT_Memory_ReallocFunc
|
|
|
|
*
|
|
|
|
* @input:
|
|
|
|
* block :: address of target memory block. cannot be NULL !!
|
|
|
|
* mem_data :: memory-manager specific optional argument
|
|
|
|
* (see @ft_memory_new)
|
|
|
|
*/
|
2002-04-18 00:54:02 +02:00
|
|
|
typedef void (*FT_Memory_FreeFunc) ( FT_Pointer block,
|
2002-05-01 10:46:56 +02:00
|
|
|
FT_Pointer mem_data );
|
|
|
|
|
|
|
|
|
2002-09-18 00:57:29 +02:00
|
|
|
/*@**********************************************************************
|
2002-05-01 10:46:56 +02:00
|
|
|
*
|
|
|
|
* @functype: FT_Memory_ReallocFunc
|
|
|
|
*
|
|
|
|
* @description:
|
|
|
|
* a function used to reallocate a memory block.
|
|
|
|
*
|
|
|
|
* @input:
|
|
|
|
* block :: address of target memory block. cannot be NULL !!
|
|
|
|
* new_size :: new requested size in bytes
|
|
|
|
* cur_size :: current block size in bytes
|
|
|
|
* mem_data :: memory-manager specific optional argument
|
|
|
|
* (see @ft_memory_new)
|
|
|
|
*/
|
2002-04-18 00:54:02 +02:00
|
|
|
typedef FT_Pointer (*FT_Memory_ReallocFunc)( FT_Pointer block,
|
|
|
|
FT_ULong new_size,
|
|
|
|
FT_ULong cur_size,
|
2002-05-01 10:46:56 +02:00
|
|
|
FT_Pointer mem_data );
|
|
|
|
|
2002-04-18 00:54:02 +02:00
|
|
|
|
2002-09-18 00:57:29 +02:00
|
|
|
/*@**********************************************************************
|
2002-05-01 10:46:56 +02:00
|
|
|
*
|
|
|
|
* @functype: FT_Memory_CreateFunc
|
|
|
|
*
|
|
|
|
* @description:
|
|
|
|
* a function used to create a @FT_Memory object to model a
|
|
|
|
* memory manager
|
|
|
|
*
|
|
|
|
* @input:
|
|
|
|
* size :: size of memory manager structure in bytes
|
|
|
|
* init_data :: optional initialisation argument
|
|
|
|
*
|
|
|
|
* @output:
|
|
|
|
* amem_data :: memory-manager specific argument to block management
|
|
|
|
* routines.
|
|
|
|
*
|
|
|
|
* @return:
|
|
|
|
* handle to new memory manager object. NULL in case of failure
|
|
|
|
*/
|
2002-04-18 00:54:02 +02:00
|
|
|
typedef FT_Pointer (*FT_Memory_CreateFunc)( FT_UInt size,
|
2002-05-01 10:46:56 +02:00
|
|
|
FT_Pointer init_data,
|
|
|
|
FT_Pointer *amem_data );
|
|
|
|
|
2002-04-18 00:54:02 +02:00
|
|
|
|
2002-09-18 00:57:29 +02:00
|
|
|
/*@**********************************************************************
|
2002-05-01 10:46:56 +02:00
|
|
|
*
|
|
|
|
* @functype: FT_Memory_DestroyFunc
|
|
|
|
*
|
|
|
|
* @description:
|
|
|
|
* a function used to destroy a given @FT_Memory manager
|
|
|
|
*
|
|
|
|
* @input:
|
|
|
|
* memory :: target memory manager handle
|
|
|
|
* mem_data :: option manager-specific argument
|
|
|
|
*/
|
|
|
|
typedef void (*FT_Memory_DestroyFunc)( FT_Memory memory,
|
|
|
|
FT_Pointer mem_data );
|
2002-04-18 00:54:02 +02:00
|
|
|
|
2002-05-01 10:46:56 +02:00
|
|
|
|
2002-09-18 00:57:29 +02:00
|
|
|
/*@**********************************************************************
|
2002-05-01 10:46:56 +02:00
|
|
|
*
|
|
|
|
* @struct: FT_Memory_FuncsRec
|
|
|
|
*
|
|
|
|
* @description:
|
|
|
|
* a function used to hold all methods of a given memory manager
|
|
|
|
* implementation.
|
|
|
|
*
|
|
|
|
* @fields:
|
|
|
|
* mem_alloc :: block allocation routine
|
|
|
|
* mem_free :: block release routine
|
|
|
|
* mem_realloc :: block re-allocation routine
|
|
|
|
* mem_create :: manager creation routine
|
|
|
|
* mem_destroy :: manager destruction routine
|
|
|
|
*/
|
2002-04-18 00:54:02 +02:00
|
|
|
typedef struct FT_Memory_FuncsRec_
|
|
|
|
{
|
|
|
|
FT_Memory_AllocFunc mem_alloc;
|
|
|
|
FT_Memory_FreeFunc mem_free;
|
|
|
|
FT_Memory_ReallocFunc mem_realloc;
|
|
|
|
FT_Memory_CreateFunc mem_create;
|
|
|
|
FT_Memory_DestroyFunc mem_destroy;
|
2002-05-01 10:46:56 +02:00
|
|
|
|
2002-04-18 00:54:02 +02:00
|
|
|
} FT_Memory_FuncsRec, *FT_Memory_Funcs;
|
|
|
|
|
|
|
|
|
2002-09-18 00:57:29 +02:00
|
|
|
/*@**********************************************************************
|
2002-05-01 10:46:56 +02:00
|
|
|
*
|
|
|
|
* @type: FT_Memory_Funcs
|
|
|
|
*
|
|
|
|
* @description:
|
|
|
|
* a pointer to a constant @FT_Memory_FuncsRec structure used to
|
|
|
|
* describe a given memory manager implementation.
|
|
|
|
*/
|
|
|
|
typedef const FT_Memory_FuncsRec* FT_Memory_Funcs;
|
|
|
|
|
|
|
|
|
2002-09-18 00:57:29 +02:00
|
|
|
/*@**********************************************************************
|
2002-05-01 10:46:56 +02:00
|
|
|
*
|
|
|
|
* @function: ft_memory_new
|
|
|
|
*
|
|
|
|
* @description:
|
|
|
|
* create a new memory manager, given a set of memory methods
|
|
|
|
*
|
|
|
|
* @input:
|
|
|
|
* mem_funcs :: handle to memory manager implementation descriptor
|
|
|
|
* mem_init_data :: optional initialisation argument, passed to
|
|
|
|
* @FT_Memory_CreateFunc
|
|
|
|
*
|
|
|
|
* @return:
|
|
|
|
* new memory manager handle. NULL in case of failure
|
|
|
|
*/
|
|
|
|
FT_BASE( FT_Memory )
|
2002-04-18 00:54:02 +02:00
|
|
|
ft_memory_new( FT_Memory_Funcs mem_funcs,
|
|
|
|
FT_Pointer mem_init_data );
|
|
|
|
|
|
|
|
|
2002-09-18 00:57:29 +02:00
|
|
|
/*@**********************************************************************
|
2002-05-01 10:46:56 +02:00
|
|
|
*
|
|
|
|
* @function: ft_memory_destroy
|
|
|
|
*
|
|
|
|
* @description:
|
|
|
|
* destroy a given memory manager
|
|
|
|
*
|
|
|
|
* @input:
|
|
|
|
* memory :: handle to target memory manager
|
|
|
|
*/
|
|
|
|
FT_BASE( void )
|
|
|
|
ft_memory_destroy( FT_Memory memory );
|
2002-04-18 00:54:02 +02:00
|
|
|
|
|
|
|
/* */
|
|
|
|
|
|
|
|
FT_END_HEADER
|
|
|
|
|
|
|
|
#endif /* __FT_SYSTEM_MEMORY_H__ */
|