BEAST - Free Software Audio Synthesizer and Tracker  0.9.2
sfimemory.hh
Go to the documentation of this file.
1  // Licensed GNU LGPL v2.1 or later: http://www.gnu.org/licenses/lgpl.html
2 #ifndef __SFI_MEMORY_H__
3 #define __SFI_MEMORY_H__
4 
5 #include <sfi/sfitypes.hh>
6 
7 G_BEGIN_DECLS
8 
9 
10 /* --- macros --- */
11 #define sfi_new_struct(type, n) ((type*) sfi_alloc_memblock (sizeof (type) * (n)))
12 #define sfi_new_struct0(type, n) ((type*) sfi_alloc_memblock0 (sizeof (type) * (n)))
13 #define sfi_delete_struct(type, mem) (sfi_delete_structs (type, 1, (mem)))
14 #ifndef __GNUC__
15 # define sfi_delete_structs(type, n, mem) (sfi_free_memblock (sizeof (type) * (n), (mem)))
16 #else /* provide typesafety if possible */
17 # define sfi_delete_structs(type, n, mem) ({ \
18  type *__typed_pointer = (mem); \
19  sfi_free_memblock (sizeof (type) * (n), __typed_pointer); \
20 })
21 #endif
22 #define SFI_ALIGNED_SIZE(size,align) ((align) > 0 ? _SFI_INTERN_ALIGN (((gsize) (size)), ((gsize) (align))) : (gsize) (size))
23 #define _SFI_INTERN_ALIGN(s, a) (((s + (a - 1)) / a) * a)
24 #define SFI_STD_ALIGN (MAX (MAX (sizeof (float), sizeof (int)), sizeof (void*)))
25 
26 
27 /* --- implementation --- */
28 gpointer sfi_alloc_memblock (gsize size);
29 gpointer sfi_alloc_memblock0 (gsize size);
30 void sfi_free_memblock (gsize size,
31  gpointer memblock);
32 void sfi_alloc_report (void);
33 gulong sfi_alloc_upper_power2 (const gulong number);
34 void _sfi_free_node_list (gpointer mem,
35  gsize node_size);
36 G_END_DECLS
37 #endif /* __SFI_MEMORY_H__ */
38 /* vim:set ts=8 sts=2 sw=2: */