BEAST/BSE - Better Audio System and Sound Engine
0.8.2
|
00001 // Licensed GNU LGPL v2.1 or later: http://www.gnu.org/licenses/lgpl.html 00002 #ifndef __SFI_VALUES_H__ 00003 #define __SFI_VALUES_H__ 00004 00005 #include <sfi/sfitypes.hh> 00006 00007 G_BEGIN_DECLS 00008 00009 00010 /* --- Sfi value type aliases --- */ 00011 #define SFI_TYPE_BOOL G_TYPE_BOOLEAN 00012 #define SFI_TYPE_INT G_TYPE_INT 00013 #define SFI_TYPE_NUM G_TYPE_INT64 00014 #define SFI_TYPE_REAL G_TYPE_DOUBLE 00015 #define SFI_TYPE_STRING G_TYPE_STRING 00016 #define SFI_TYPE_PSPEC G_TYPE_PARAM 00017 00018 00019 /* --- Sfi value types --- */ 00020 #define SFI_TYPE_CHOICE (sfi__value_types[0]) 00021 #define SFI_TYPE_BBLOCK (sfi__value_types[1]) 00022 #define SFI_TYPE_FBLOCK (sfi__value_types[2]) 00023 #define SFI_TYPE_SEQ (sfi__value_types[3]) 00024 #define SFI_TYPE_REC (sfi__value_types[4]) 00025 #define SFI_TYPE_PROXY (sfi__value_types[5]) 00026 00027 00028 /* --- Sfi value macros --- */ 00029 #define SFI_IS_VALUE(value) (sfi_check_value (value)) 00030 #define SFI_VALUE_HOLDS_BOOL(value) (G_TYPE_CHECK_VALUE_TYPE ((value), SFI_TYPE_BOOL)) 00031 #define SFI_VALUE_HOLDS_INT(value) (G_TYPE_CHECK_VALUE_TYPE ((value), SFI_TYPE_INT)) 00032 #define SFI_VALUE_HOLDS_NUM(value) (G_TYPE_CHECK_VALUE_TYPE ((value), SFI_TYPE_NUM)) 00033 #define SFI_VALUE_HOLDS_REAL(value) (G_TYPE_CHECK_VALUE_TYPE ((value), SFI_TYPE_REAL)) 00034 #define SFI_VALUE_HOLDS_STRING(value) (G_TYPE_CHECK_VALUE_TYPE ((value), SFI_TYPE_STRING)) 00035 #define SFI_VALUE_HOLDS_CHOICE(value) (G_TYPE_CHECK_VALUE_TYPE ((value), SFI_TYPE_CHOICE)) 00036 #define SFI_VALUE_HOLDS_BBLOCK(value) (G_TYPE_CHECK_VALUE_TYPE ((value), SFI_TYPE_BBLOCK)) 00037 #define SFI_VALUE_HOLDS_FBLOCK(value) (G_TYPE_CHECK_VALUE_TYPE ((value), SFI_TYPE_FBLOCK)) 00038 #define SFI_VALUE_HOLDS_PSPEC(value) (G_TYPE_CHECK_VALUE_TYPE ((value), SFI_TYPE_PSPEC)) 00039 #define SFI_VALUE_HOLDS_SEQ(value) (G_TYPE_CHECK_VALUE_TYPE ((value), SFI_TYPE_SEQ)) 00040 #define SFI_VALUE_HOLDS_REC(value) (G_TYPE_CHECK_VALUE_TYPE ((value), SFI_TYPE_REC)) 00041 #define SFI_VALUE_HOLDS_PROXY(value) (G_TYPE_CHECK_VALUE_TYPE ((value), SFI_TYPE_PROXY)) 00042 00043 00044 /* --- Sfi value accessor aliases --- */ 00045 #define sfi_value_get_bool g_value_get_boolean 00046 #define sfi_value_set_bool g_value_set_boolean 00047 #define sfi_value_get_int g_value_get_int 00048 #define sfi_value_set_int g_value_set_int 00049 #define sfi_value_get_num g_value_get_int64 00050 #define sfi_value_set_num g_value_set_int64 00051 #define sfi_value_get_real g_value_get_double 00052 #define sfi_value_set_real g_value_set_double 00053 #define sfi_value_get_string g_value_get_string 00054 #define sfi_value_set_string g_value_set_string 00055 #define sfi_value_dup_string g_value_dup_string 00056 #define sfi_value_set_static_string g_value_set_static_string 00057 #define sfi_value_take_string g_value_take_string 00058 00059 00060 /* --- Sfi value accessors --- */ 00061 const char* sfi_value_get_choice (const GValue *value); 00062 void sfi_value_set_choice (GValue *value, 00063 const gchar *choice_value); 00064 SfiBBlock* sfi_value_get_bblock (const GValue *value); 00065 SfiBBlock* sfi_value_dup_bblock (const GValue *value); 00066 void sfi_value_set_bblock (GValue *value, 00067 SfiBBlock *bblock); 00068 void sfi_value_take_bblock (GValue *value, 00069 SfiBBlock *bblock); 00070 SfiFBlock* sfi_value_get_fblock (const GValue *value); 00071 SfiFBlock* sfi_value_dup_fblock (const GValue *value); 00072 void sfi_value_set_fblock (GValue *value, 00073 SfiFBlock *fblock); 00074 void sfi_value_take_fblock (GValue *value, 00075 SfiFBlock *fblock); 00076 GParamSpec* sfi_value_get_pspec (const GValue *value); 00077 GParamSpec* sfi_value_dup_pspec (const GValue *value); 00078 void sfi_value_set_pspec (GValue *value, 00079 GParamSpec *pspec); 00080 void sfi_value_take_pspec (GValue *value, 00081 GParamSpec *pspec); 00082 SfiSeq* sfi_value_get_seq (const GValue *value); 00083 void sfi_value_set_seq (GValue *value, 00084 SfiSeq *seq); 00085 void sfi_value_take_seq (GValue *value, 00086 SfiSeq *seq); 00087 SfiRec* sfi_value_get_rec (const GValue *value); 00088 SfiRec* sfi_value_dup_rec (const GValue *value); 00089 void sfi_value_set_rec (GValue *value, 00090 SfiRec *rec); 00091 void sfi_value_take_rec (GValue *value, 00092 SfiRec *rec); 00093 SfiProxy sfi_value_get_proxy (const GValue *value); 00094 void sfi_value_set_proxy (GValue *value, 00095 SfiProxy proxy); 00096 void sfi_value_copy_deep (const GValue *src_value, 00097 GValue *dest_value); 00098 #define sfi_value_copy_shallow g_value_copy 00099 00100 00101 /* --- Sfi value constructors --- */ 00102 GValue* sfi_value_empty (void); 00103 GValue* sfi_value_clone_deep (const GValue *value); 00104 GValue* sfi_value_clone_shallow (const GValue *value); 00105 GValue* sfi_value_bool (SfiBool vbool); 00106 GValue* sfi_value_int (SfiInt vint); 00107 GValue* sfi_value_num (SfiNum vnum); 00108 GValue* sfi_value_real (SfiReal vreal); 00109 GValue* sfi_value_string (const gchar *vstring); 00110 GValue* sfi_value_lstring (const gchar *vstring, 00111 guint length); 00112 GValue* sfi_value_choice (const gchar *vchoice); 00113 GValue* sfi_value_lchoice (const gchar *vchoice, 00114 guint length); 00115 GValue* sfi_value_choice_enum (const GValue *enum_value); 00116 GValue* sfi_value_choice_genum (gint enum_value, 00117 GType enum_type); 00118 GValue* sfi_value_bblock (SfiBBlock *vfblock); 00119 GValue* sfi_value_fblock (SfiFBlock *vfblock); 00120 GValue* sfi_value_pspec (GParamSpec *pspec); 00121 GValue* sfi_value_seq (SfiSeq *vseq); 00122 GValue* sfi_value_new_take_seq (SfiSeq *vseq); 00123 GValue* sfi_value_rec (SfiRec *vrec); 00124 GValue* sfi_value_new_take_rec (SfiRec *vrec); 00125 GValue* sfi_value_proxy (SfiProxy vproxy); 00126 void sfi_value_free (GValue *value); 00127 00128 00129 /* --- convenience aliases --- */ 00130 #define SFI_VALUE_HOLDS_NOTE(value) SFI_VALUE_HOLDS_INT(value) 00131 #define sfi_value_get_note sfi_value_get_int 00132 #define sfi_value_set_note sfi_value_set_int 00133 #define sfi_value_note sfi_value_int 00134 #define SFI_VALUE_HOLDS_TIME(value) SFI_VALUE_HOLDS_NUM(value) 00135 #define sfi_value_get_time sfi_value_get_num 00136 #define sfi_value_set_time sfi_value_set_num 00137 #define sfi_value_time sfi_value_num 00138 00139 00140 /* --- transformation --- */ 00141 #define SFI_CHOICE_ERROR_QUARK (g_quark_from_string ("sfi-choice-error")) 00142 void sfi_value_choice2enum (const GValue *choice_value, 00143 GValue *enum_value, 00144 GParamSpec *fallback_param); 00145 void sfi_value_choice2enum_simple (const GValue *choice_value, 00146 GValue *enum_value); 00147 void sfi_value_enum2choice (const GValue *enum_value, 00148 GValue *choice_value); 00149 gint sfi_choice2enum_checked (const gchar *choice_value, 00150 GType enum_type, 00151 GError **errorp); 00152 gint sfi_choice2enum (const gchar *choice_value, 00153 GType enum_type); 00154 const gchar* sfi_enum2choice (gint enum_value, 00155 GType enum_type); 00156 gint sfi_value_get_enum_auto (GType enum_type, 00157 const GValue *value); 00158 void sfi_value_set_enum_auto (GType enum_type, 00159 GValue *value, 00160 gint enum_value); 00161 /* transform functions to work around glib bugs */ 00162 gboolean sfi_value_transform (const GValue *src_value, 00163 GValue *dest_value); 00164 gboolean sfi_value_type_compatible (GType src_type, 00165 GType dest_type); 00166 gboolean sfi_value_type_transformable (GType src_type, 00167 GType dest_type); 00168 00169 00170 /* --- internal --- */ 00171 void _sfi_init_values (void); 00172 extern GType *sfi__value_types; 00173 gboolean sfi_check_value (const GValue *value); 00174 00175 G_END_DECLS 00176 00177 #endif /* __SFI_VALUES_H__ */ 00178 00179 /* vim:set ts=8 sts=2 sw=2: */