2 #ifndef __SFI_GLIB_EXTRA_H__
3 #define __SFI_GLIB_EXTRA_H__
6 #include <glib-object.h>
7 #include <rapicorn-core.hh>
9 using Rapicorn::printout;
10 using Rapicorn::printerr;
11 using Rapicorn::string_format;
15 #if (GLIB_SIZEOF_LONG > 4)
16 #define G_HASH_LONG(l) ((l) + ((l) >> 32))
18 #define G_HASH_LONG(l) (l)
20 #if (GLIB_SIZEOF_VOID_P > 4)
21 #define G_HASH_POINTER(p) ((guint32) (((gsize) (p)) + (((gsize) (p)) >> 32)))
23 #define G_HASH_POINTER(p) ((guint32) (gsize) (p))
27 # if defined (__GNUC__)
28 # define G_STRFUNC ((const char*) (__PRETTY_FUNCTION__))
29 # elif defined (G_HAVE_ISO_VARARGS)
30 # define G_STRFUNC ((const char*) (__func__))
32 # define G_STRFUNC ((const char*) ("???"))
38 #define g_scanner_add_symbol( scanner, symbol, value ) G_STMT_START { \
39 g_scanner_scope_add_symbol ((scanner), 0, (symbol), (value)); \
41 #define g_scanner_remove_symbol( scanner, symbol ) G_STMT_START { \
42 g_scanner_scope_remove_symbol ((scanner), 0, (symbol)); \
48 #define g_object_notify(o,s) g_object_notify ((gpointer) o, s)
49 #define g_object_get_qdata(o,q) g_object_get_qdata ((gpointer) o, q)
50 #define g_object_set_qdata(o,q,d) g_object_set_qdata ((gpointer) o, q, d)
51 #define g_object_set_qdata_full(o,q,d,f) g_object_set_qdata_full ((gpointer) o, q, d, (gpointer) f)
52 #define g_object_steal_qdata(o,q) g_object_steal_qdata ((gpointer) o, q)
53 #define g_object_get_data(o,k) g_object_get_data ((gpointer) o, k)
54 #define g_object_set_data(o,k,d) g_object_set_data ((gpointer) o, k, d)
55 #define g_object_set_data_full(o,k,d,f) g_object_set_data_full ((gpointer) o, k, d, (gpointer) f)
56 #define g_object_steal_data(o,k) g_object_steal_data ((gpointer) o, k)
58 void g_object_disconnect_any (gpointer
object,
63 #define g_intern_format(...) g_intern_string (Rapicorn::string_format (__VA_ARGS__).c_str())
64 #define g_string_add_format(gstr, ...) g_string_append (gstr, Rapicorn::string_format (__VA_ARGS__).c_str())
65 #define g_strdup_format(...) g_strdup (Rapicorn::string_format (__VA_ARGS__).c_str())
68 gchar** g_straddv (gchar **str_array,
69 const gchar *new_str);
70 gchar** g_strslistv (GSList *slist);
71 guint g_strlenv (gchar **str_array);
72 gchar* g_strdup_stripped (
const gchar *
string);
73 gchar* g_strdup_rstrip (
const gchar *
string);
74 gchar* g_strdup_lstrip (
const gchar *
string);
76 const gchar* g_intern_strconcat (
const gchar *first_string,
77 ...) G_GNUC_NULL_TERMINATED;
79 GString* g_string_prefix_lines (GString *gstring,
84 gchar* g_option_concat (const gchar *first_option,
85 ...) G_GNUC_NULL_TERMINATED;
86 gboolean g_option_check (const gchar *option_string,
88 gchar* g_option_get (const gchar *option_string,
93 void g_param_spec_set_options (GParamSpec *pspec,
94 const gchar *options);
95 void g_param_spec_add_option (GParamSpec *pspec,
98 gboolean g_param_spec_check_option (GParamSpec *pspec,
100 gboolean g_param_spec_provides_options (GParamSpec *pspec,
101 const gchar *options);
102 const gchar* g_param_spec_get_options (GParamSpec *pspec);
103 void g_param_spec_set_istepping (GParamSpec *pspec,
105 guint64 g_param_spec_get_istepping (GParamSpec *pspec);
106 void g_param_spec_set_fstepping (GParamSpec *pspec,
108 gdouble g_param_spec_get_fstepping (GParamSpec *pspec);
109 void g_param_spec_set_log_scale (GParamSpec *pspec,
113 gboolean g_param_spec_get_log_scale (GParamSpec *pspec,
120 gpointer g_slist_pop_head (GSList **slist_p);
121 gpointer g_list_pop_head (GList **list_p);
122 GSList* g_slist_append_uniq (GSList *slist,
124 void g_slist_free_deep (GSList *slist,
125 GDestroyNotify data_destroy);
126 void g_list_free_deep (GList *list,
127 GDestroyNotify data_destroy);
131 gchar* g_type_name_to_cname (const gchar *type_name);
132 gchar* g_type_name_to_sname (const gchar *type_name);
133 gchar* g_type_name_to_cupper (const gchar *type_name);
134 gchar* g_type_name_to_type_macro (const gchar *type_name);
139 typedef gboolean (*GSourcePending) (gpointer data,
141 typedef
void (*GSourceDispatch) (gpointer data);
142 GSource* g_source_simple (gint priority,
143 GSourcePending pending,
144 GSourceDispatch dispatch,
146 GDestroyNotify destroy,
153 guint32 width, height;
158 g_bit_matrix_new (guint width,
162 matrix->width = width;
163 matrix->height = height;
173 guint32 cons, index, shift;
174 RAPICORN_ASSERT_RETURN (matrix && x < matrix->width && y < matrix->height);
175 cons = y * matrix->width + x;
179 matrix->bits[index] |= 1 << shift;
181 matrix->bits[index] &= ~(1 << shift);
184 #define g_bit_matrix_set(matrix,x,y) g_bit_matrix_change (matrix, x, y, TRUE)
185 #define g_bit_matrix_unset(matrix,x,y) g_bit_matrix_change (matrix, x, y, FALSE)
187 static inline guint32
192 guint32 cons = y * matrix->width + x;
193 guint32 index = cons >> 5;
194 guint32 shift = cons & 0x1f;
195 return matrix->bits[index] & (1 << shift);
198 static inline gboolean
203 if (x < matrix->width && y < matrix->height)
204 return g_bit_matrix_peek (matrix, x, y) != 0;
217 guint g_predicate_idle_add (GSourceFunc predicate,
218 GSourceFunc
function,
220 guint g_predicate_idle_add_full (gint priority,
221 GSourceFunc predicate,
222 GSourceFunc
function,
224 GDestroyNotify notify);
229 typedef gboolean (*GUSignalFunc) (gint8 usignal,
231 guint g_usignal_add (gint8 usignal,
232 GUSignalFunc
function,
234 guint g_usignal_add_full (gint priority,
236 GUSignalFunc
function,
238 GDestroyNotify destroy);
239 void g_usignal_notify (gint8 usignal);
244 #ifndef G_DEFINE_DATA_TYPE // GTKFIX: add this to glib?
245 #define G_DEFINE_DATA_TYPE(TN, t_n, T_P) G_DEFINE_DATA_TYPE_EXTENDED (TN, t_n, T_P, GTypeFlags (0), {})
246 #define G_DEFINE_DATA_TYPE_WITH_CODE(TN, t_n, T_P, _C_) G_DEFINE_DATA_TYPE_EXTENDED (TN, t_n, T_P, GTypeFlags (0), _C_)
247 #define G_DEFINE_ABSTRACT_DATA_TYPE(TN, t_n, T_P) G_DEFINE_DATA_TYPE_EXTENDED (TN, t_n, T_P, G_TYPE_FLAG_ABSTRACT, {})
248 #define G_DEFINE_ABSTRACT_DATA_TYPE_WITH_CODE(TN, t_n, T_P, _C_) G_DEFINE_DATA_TYPE_EXTENDED (TN, t_n, T_P, G_TYPE_FLAG_ABSTRACT, _C_)
250 #ifndef G_DEFINE_DATA_TYPE_EXTENDED // GTKFIX: add this to glib?
251 #define G_DEFINE_DATA_TYPE_EXTENDED(TypeName, type_name, TYPE_PARENT, flags, CODE) \
253 static void type_name##_init (TypeName *self, \
254 TypeName##Class *klass); \
255 static void type_name##_class_init (TypeName##Class *klass, \
256 gpointer class_data); \
257 static gpointer type_name##_parent_class = NULL; \
258 static void type_name##_class_intern_init (gpointer klass, \
259 gpointer class_data) \
261 type_name##_parent_class = g_type_class_peek_parent (klass); \
262 type_name##_class_init ((TypeName##Class*) klass, class_data); \
266 type_name##_get_type (void) \
268 static GType g_define_type_id = 0; \
269 if (G_UNLIKELY (g_define_type_id == 0)) \
271 static const GTypeInfo g_define_type_info = { \
272 sizeof (TypeName##Class), \
273 (GBaseInitFunc) NULL, \
274 (GBaseFinalizeFunc) NULL, \
275 (GClassInitFunc) type_name##_class_intern_init, \
276 (GClassFinalizeFunc) NULL, \
280 (GInstanceInitFunc) type_name##_init, \
282 g_define_type_id = g_type_register_static (TYPE_PARENT, #TypeName, &g_define_type_info, flags); \
285 return g_define_type_id; \
291 GScanner* g_scanner_new64 (
const GScannerConfig *config_templ);
292 #ifndef G_DISABLE_DEPRECATED
293 #define g_scanner_add_symbol( scanner, symbol, value ) G_STMT_START { \
294 g_scanner_scope_add_symbol ((scanner), 0, (symbol), (value)); \
296 #define g_scanner_remove_symbol( scanner, symbol ) G_STMT_START { \
297 g_scanner_scope_remove_symbol ((scanner), 0, (symbol)); \
299 #define g_scanner_foreach_symbol( scanner, func, data ) G_STMT_START { \
300 g_scanner_scope_foreach_symbol ((scanner), 0, (func), (data)); \
302 #define g_scanner_freeze_symbol_table(scanner) ((void)0)
303 #define g_scanner_thaw_symbol_table(scanner) ((void)0)
310 constexpr GParamFlags operator& (GParamFlags s1, GParamFlags s2) {
return GParamFlags (s1 & (
long long unsigned) s2); }
311 inline GParamFlags& operator&= (GParamFlags &s1, GParamFlags s2) { s1 = s1 & s2;
return s1; }
312 constexpr GParamFlags operator| (GParamFlags s1, GParamFlags s2) {
return GParamFlags (s1 | (
long long unsigned) s2); }
313 inline GParamFlags& operator|= (GParamFlags &s1, GParamFlags s2) { s1 = s1 | s2;
return s1; }
314 constexpr GParamFlags operator~ (GParamFlags s1) {
return GParamFlags (~(
long long unsigned) s1); }
315 constexpr GSignalMatchType operator& (GSignalMatchType s1, GSignalMatchType s2) {
return GSignalMatchType (s1 & (
long long unsigned) s2); }
316 inline GSignalMatchType& operator&= (GSignalMatchType &s1, GSignalMatchType s2) { s1 = s1 & s2;
return s1; }
317 constexpr GSignalMatchType operator| (GSignalMatchType s1, GSignalMatchType s2) {
return GSignalMatchType (s1 | (
long long unsigned) s2); }
318 inline GSignalMatchType& operator|= (GSignalMatchType &s1, GSignalMatchType s2) { s1 = s1 | s2;
return s1; }
319 constexpr GSignalMatchType operator~ (GSignalMatchType s1) {
return GSignalMatchType (~(
long long unsigned) s1); }
320 constexpr GSignalFlags operator& (GSignalFlags s1, GSignalFlags s2) {
return GSignalFlags (s1 & (
long long unsigned) s2); }
321 inline GSignalFlags& operator&= (GSignalFlags &s1, GSignalFlags s2) { s1 = s1 & s2;
return s1; }
322 constexpr GSignalFlags operator| (GSignalFlags s1, GSignalFlags s2) {
return GSignalFlags (s1 | (
long long unsigned) s2); }
323 inline GSignalFlags& operator|= (GSignalFlags &s1, GSignalFlags s2) { s1 = s1 | s2;
return s1; }
324 constexpr GSignalFlags operator~ (GSignalFlags s1) {
return GSignalFlags (~(
long long unsigned) s1); }
325 constexpr GConnectFlags operator& (GConnectFlags s1, GConnectFlags s2) {
return GConnectFlags (s1 & (
long long unsigned) s2); }
326 inline GConnectFlags& operator&= (GConnectFlags &s1, GConnectFlags s2) { s1 = s1 & s2;
return s1; }
327 constexpr GConnectFlags operator| (GConnectFlags s1, GConnectFlags s2) {
return GConnectFlags (s1 | (
long long unsigned) s2); }
328 inline GConnectFlags& operator|= (GConnectFlags &s1, GConnectFlags s2) { s1 = s1 | s2;
return s1; }
329 constexpr GConnectFlags operator~ (GConnectFlags s1) {
return GConnectFlags (~(
long long unsigned) s1); }
330 #endif // __cplusplus
338 using Rapicorn::String;
339 namespace Path = Rapicorn::Path;
343 enum InstallpathType {
344 INSTALLPATH_BSEINCLUDEDIR = 1,
346 INSTALLPATH_LOCALEBASE,
349 INSTALLPATH_USER_DATA,
350 INSTALLPATH_BSELIBDIR,
351 INSTALLPATH_BSELIBDIR_PLUGINS,
352 INSTALLPATH_BSELIBDIR_DRIVERS,
354 INSTALLPATH_DATADIR_DEMO,
355 INSTALLPATH_DATADIR_SAMPLES,
356 INSTALLPATH_DATADIR_EFFECTS,
357 INSTALLPATH_DATADIR_INSTRUMENTS,
358 INSTALLPATH_DATADIR_SCRIPTS,
359 INSTALLPATH_DATADIR_IMAGES,
360 INSTALLPATH_DATADIR_KEYS,
361 INSTALLPATH_DATADIR_SKINS,
362 INSTALLPATH_BEASTEXECDIR,
363 INSTALLPATH_PYBEASTDIR,
367 void installpath_override (
const String &topdir);
The Bse namespace contains all functions of the synthesis engine.
Definition: bstbseutils.cc:88
Definition: glib-extra.hh:152
std::string version()
Provide a string containing the BSE library version number.
Definition: glib-extra.cc:1074
std::string installpath(InstallpathType installpath_type)
Provide installation directories and searchpaths for various types of data.
Definition: glib-extra.cc:1044