X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=glib%2Fgslice.h;h=411140f62a2428c11b8696b30bae9414148d048f;hb=49b59e5ac4428a6a99a85d699c3662f96efc4e9d;hp=dc0cc2e7f9b750a2fc5782c47cd268b13d964aed;hpb=733b1789c17ab4c6378ce0e9594f62dda1473ebb;p=platform%2Fupstream%2Fglib.git diff --git a/glib/gslice.h b/glib/gslice.h index dc0cc2e..411140f 100644 --- a/glib/gslice.h +++ b/glib/gslice.h @@ -12,15 +12,14 @@ * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. + * License along with this library; if not, see . */ + #ifndef __G_SLICE_H__ #define __G_SLICE_H__ -#ifndef __G_MEM_H__ -#error Include instead of +#if !defined (__GLIB_H_INSIDE__) && !defined (GLIB_COMPILATION) +#error "Only can be included directly." #endif #include @@ -29,42 +28,71 @@ G_BEGIN_DECLS /* slices - fast allocation/release of small memory blocks */ -gpointer g_slice_alloc (gsize block_size) G_GNUC_MALLOC; -gpointer g_slice_alloc0 (gsize block_size) G_GNUC_MALLOC; -void g_slice_free1 (gsize block_size, - gpointer mem_block); -void g_slice_free_chain (gsize block_size, - gpointer mem_chain, - gsize next_offset); +GLIB_AVAILABLE_IN_ALL +gpointer g_slice_alloc (gsize block_size) G_GNUC_MALLOC G_GNUC_ALLOC_SIZE(1); +GLIB_AVAILABLE_IN_ALL +gpointer g_slice_alloc0 (gsize block_size) G_GNUC_MALLOC G_GNUC_ALLOC_SIZE(1); +GLIB_AVAILABLE_IN_ALL +gpointer g_slice_copy (gsize block_size, + gconstpointer mem_block) G_GNUC_MALLOC G_GNUC_ALLOC_SIZE(1); +GLIB_AVAILABLE_IN_ALL +void g_slice_free1 (gsize block_size, + gpointer mem_block); +GLIB_AVAILABLE_IN_ALL +void g_slice_free_chain_with_offset (gsize block_size, + gpointer mem_chain, + gsize next_offset); #define g_slice_new(type) ((type*) g_slice_alloc (sizeof (type))) #define g_slice_new0(type) ((type*) g_slice_alloc0 (sizeof (type))) -/* g_slice_free(type,mem) g_slice_free1 (sizeof (type), mem) */ +/* MemoryBlockType * + * g_slice_dup (MemoryBlockType, + * MemoryBlockType *mem_block); + * g_slice_free (MemoryBlockType, + * MemoryBlockType *mem_block); + * g_slice_free_chain (MemoryBlockType, + * MemoryBlockType *first_chain_block, + * memory_block_next_field); + * pseudo prototypes for the macro + * definitions following below. + */ + +/* we go through extra hoops to ensure type safety */ +#define g_slice_dup(type, mem) \ + (1 ? (type*) g_slice_copy (sizeof (type), (mem)) \ + : ((void) ((type*) 0 == (mem)), (type*) 0)) +#define g_slice_free(type, mem) do { \ + if (1) g_slice_free1 (sizeof (type), (mem)); \ + else (void) ((type*) 0 == (mem)); \ +} while (0) +#define g_slice_free_chain(type, mem_chain, next) do { \ + if (1) g_slice_free_chain_with_offset (sizeof (type), \ + (mem_chain), G_STRUCT_OFFSET (type, next)); \ + else (void) ((type*) 0 == (mem_chain)); \ +} while (0) -#if __GNUC__ >= 2 -/* for GCC, define a type-safe variant of g_slice_free() */ -#define g_slice_free(type, mem) ({ \ - static inline void g_slice_free (gsize, type*); \ - while (0) g_slice_free (sizeof (type), mem); \ - g_slice_free1 (sizeof (type), mem); \ -}) -#else -#define g_slice_free(type, mem) g_slice_free1 (sizeof (type) + (gsize) (type*) 0, mem) -/* we go through the extra (gsize)(type*)0 hoop to ensure a known type argument */ -#endif /* --- internal debugging API --- */ typedef enum { G_SLICE_CONFIG_ALWAYS_MALLOC = 1, G_SLICE_CONFIG_BYPASS_MAGAZINES, - G_SLICE_CONFIG_ALWAYS_FREE, G_SLICE_CONFIG_WORKING_SET_MSECS, + G_SLICE_CONFIG_COLOR_INCREMENT, G_SLICE_CONFIG_CHUNK_SIZES, - G_SLICE_CONFIG_CONTENTION_COUNTER, + G_SLICE_CONFIG_CONTENTION_COUNTER } GSliceConfig; + +GLIB_DEPRECATED_IN_2_34 void g_slice_set_config (GSliceConfig ckey, gint64 value); +GLIB_DEPRECATED_IN_2_34 gint64 g_slice_get_config (GSliceConfig ckey); +GLIB_DEPRECATED_IN_2_34 gint64* g_slice_get_config_state (GSliceConfig ckey, gint64 address, guint *n_values); +#ifdef G_ENABLE_DEBUG +GLIB_AVAILABLE_IN_ALL +void g_slice_debug_tree_statistics (void); +#endif + G_END_DECLS #endif /* __G_SLICE_H__ */