83 lines
		
	
	
		
			2.9 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			83 lines
		
	
	
		
			2.9 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
/*
 | 
						|
    Copyright (c) 2006-2020 Chung, Hyung-Hwan. All rights reserved.
 | 
						|
 | 
						|
    Redistribution and use in source and binary forms, with or without
 | 
						|
    modification, are permitted provided that the following conditions
 | 
						|
    are met:
 | 
						|
    1. Redistributions of source code must retain the above copyright
 | 
						|
       notice, this list of conditions and the following disclaimer.
 | 
						|
    2. Redistributions in binary form must reproduce the above copyright
 | 
						|
       notice, this list of conditions and the following disclaimer in the
 | 
						|
       documentation and/or other materials provided with the distribution.
 | 
						|
 | 
						|
    THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR
 | 
						|
    IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
 | 
						|
    OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
 | 
						|
    IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
 | 
						|
    INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
 | 
						|
    NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
 | 
						|
    DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
 | 
						|
    THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
 | 
						|
    (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
 | 
						|
    THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 | 
						|
 */
 | 
						|
/*
 | 
						|
  tre-mem.h - TRE memory allocator interface
 | 
						|
 | 
						|
  This software is released under a BSD-style license.
 | 
						|
  See the file LICENSE for details and copyright.
 | 
						|
 | 
						|
*/
 | 
						|
 | 
						|
#ifndef _HAWK_TRE_MEM_H_
 | 
						|
#define _HAWK_TRE_MEM_H_
 | 
						|
 | 
						|
#include "hawk-prv.h"
 | 
						|
 | 
						|
#define TRE_MEM_BLOCK_SIZE 1024
 | 
						|
 | 
						|
typedef struct hawk_tre_mem_list {
 | 
						|
  void *data;
 | 
						|
  struct hawk_tre_mem_list *next;
 | 
						|
} hawk_tre_mem_list_t;
 | 
						|
 | 
						|
typedef struct hawk_tre_mem_struct {
 | 
						|
  hawk_gem_t* gem;
 | 
						|
  hawk_tre_mem_list_t *blocks;
 | 
						|
  hawk_tre_mem_list_t *current;
 | 
						|
  char *ptr;
 | 
						|
  size_t n;
 | 
						|
  int failed;
 | 
						|
  void **provided;
 | 
						|
} *hawk_tre_mem_t;
 | 
						|
 | 
						|
 | 
						|
#if defined(__cplusplus)
 | 
						|
extern "C" {
 | 
						|
#endif
 | 
						|
 | 
						|
hawk_tre_mem_t hawk_tre_mem_new_impl(hawk_gem_t* gem, int provided, void *provided_block);
 | 
						|
void *hawk_tre_mem_alloc_impl(hawk_tre_mem_t mem, int provided, void *provided_block,
 | 
						|
			 int zero, size_t size);
 | 
						|
 | 
						|
/* Returns a new memory allocator or NULL if out of memory. */
 | 
						|
#define hawk_tre_mem_new(gem)  hawk_tre_mem_new_impl(gem, 0, NULL)
 | 
						|
 | 
						|
/* Allocates a block of `size' bytes from `mem'.  Returns a pointer to the
 | 
						|
   allocated block or NULL if an underlying malloc() failed. */
 | 
						|
#define hawk_tre_mem_alloc(mem, size) hawk_tre_mem_alloc_impl(mem, 0, NULL, 0, size)
 | 
						|
 | 
						|
/* Allocates a block of `size' bytes from `mem'.  Returns a pointer to the
 | 
						|
   allocated block or NULL if an underlying malloc() failed.  The memory
 | 
						|
   is set to zero. */
 | 
						|
#define hawk_tre_mem_calloc(mem, size) hawk_tre_mem_alloc_impl(mem, 0, NULL, 1, size)
 | 
						|
 | 
						|
/* Frees the memory allocator and all memory allocated with it. */
 | 
						|
void hawk_tre_mem_destroy(hawk_tre_mem_t mem);
 | 
						|
 | 
						|
#if defined(__cplusplus)
 | 
						|
}
 | 
						|
#endif
 | 
						|
 | 
						|
#endif
 |