Advertisement
VictorCacciari

Untitled

Feb 22nd, 2012
364
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 2.27 KB | None | 0 0
  1. #ifndef GLIB_INTERFACE_H
  2. #define GLIB_INTERFACE_H
  3.  
  4. #define INLINE static inline
  5.    
  6. #define GLIST_INSTANCE(Name, T, FName) \
  7.     typedef GList Name; \
  8.     INLINE Name* FName##_new() { return NULL; } \
  9.     INLINE Name* FName##_append(Name* a, T b) { return g_list_append(a, (gpointer)b); } \
  10.     INLINE Name* FName##_prepend(Name* a, T b) { return g_list_prepend(a, (gpointer)b); } \
  11.     INLINE Name* FName##_first(Name* a) { return g_list_first(a); } \
  12.     INLINE Name* FName##_last(Name* a) { return g_list_last(a); } \
  13.     INLINE Name* FName##_next(Name* a) { return g_list_next(a); } \
  14.     INLINE Name* FName##_prev(Name* a) { return g_list_previous(a); } \
  15.     INLINE int   FName##_length(Name* a) { return g_list_length(a); } \
  16.     INLINE T     FName##_get(Name* a, int b) { return (T)g_list_nth_data(a, b); } \
  17.     INLINE T     FName##_data(Name* a) { return (T)(a->data); }
  18.  
  19. #define GARRAY_INSTANCE(Name, T, FName) \
  20.     typedef GArray Name; \
  21.     INLINE Name* FName##_new() { return g_array_new(TRUE, TRUE, sizeof(T)); } \
  22.     INLINE Name* FName##_sized_new(int s) { return g_array_sized_new(TRUE, TRUE, sizeof(T), s); } \
  23.     INLINE void  FName##_append(Name* a, T b) { g_array_append_val(a, b); } \
  24.     INLINE void  FName##_insert(Name* a, T b, int p) { g_array_insert_val(a, p, b); } \
  25.     INLINE T     FName##_get(Name* a, int p) { return g_array_index(a, T, p); } \
  26.     INLINE T*    FName##_ref(Name* a, int p) { return &g_array_index(a, T, p); } \
  27.     INLINE int   FName##_length(Name* a) { return a->len; }
  28.    
  29. #define GTREE_INSTANCE(Name, K, T, FName, Cmp) \
  30.     typedef GTree Name; \
  31.     INLINE Name* FName##_new() { return g_tree_new((GCompareFunc)Cmp); } \
  32.     INLINE void  FName##_insert(Name* t, K k, T v) { g_tree_insert(t, (gpointer)k, (gpointer)v); } \
  33.     INLINE void  FName##_remove(Name* t, K k) { g_tree_remove(t, (gpointer)k); } \
  34.     INLINE void  FName##_replace(Name* t, K k, T v) { g_tree_replace(t, (gpointer)k, (gpointer)v); } \
  35.     INLINE int   FName##_height(Name* t) { return g_tree_height(t); } \
  36.     INLINE int   FName##_nnodes(Name* t) { return g_tree_nnodes(t); } \
  37.     INLINE T     FName##_lookup(Name* t, const K k) { return (T)g_tree_lookup(t, (gconstpointer)k); } \
  38.     INLINE void  FName##_foreach(Name* t, gboolean (*func)(K, T, void*), void* data) \
  39.                                { g_tree_foreach(t, (GTraverseFunc)func, (gpointer)data); }
  40.  
  41. #endif
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement