1 /* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ 2 /* 3 * lt-mem.h 4 * Copyright (C) 2011-2015 Akira TAGOH 5 * 6 * Authors: 7 * Akira TAGOH <akira@tagoh.org> 8 * 9 * You may distribute under the terms of either the GNU 10 * Lesser General Public License or the Mozilla Public 11 * License, as specified in the README file. 12 */ 13 #ifndef __LT_MEM_H__ 14 #define __LT_MEM_H__ 15 16 #if !defined (__LANGTAG_PRIVATE) 17 #error "Unable to use the private header publicly" 18 #endif 19 20 #include "lt-macros.h" 21 22 LT_BEGIN_DECLS 23 24 typedef struct _lt_mem_t lt_mem_t; 25 typedef struct _lt_mem_slist_t lt_mem_slist_t; 26 27 struct _lt_mem_t { 28 volatile unsigned int ref_count; 29 size_t size; 30 lt_mem_slist_t *refs; 31 lt_mem_slist_t *weak_pointers; 32 }; 33 34 lt_pointer_t lt_mem_alloc_object (size_t size); 35 lt_pointer_t lt_mem_ref (lt_mem_t *object); 36 void lt_mem_unref (lt_mem_t *object); 37 void lt_mem_add_ref (lt_mem_t *object, 38 lt_pointer_t p, 39 lt_destroy_func_t func); 40 void lt_mem_remove_ref (lt_mem_t *object, 41 lt_pointer_t p); 42 void lt_mem_delete_ref (lt_mem_t *object, 43 lt_pointer_t p); 44 void lt_mem_add_weak_pointer (lt_mem_t *object, 45 lt_pointer_t *p); 46 void lt_mem_remove_weak_pointer(lt_mem_t *object, 47 lt_pointer_t *p); 48 49 LT_END_DECLS 50 51 #endif /* __LT_MEM_H__ */ 52