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_PRIMITIVES_H__ 00003 #define __SFI_PRIMITIVES_H__ 00004 00005 #include <sfi/sfivalues.hh> 00006 00007 G_BEGIN_DECLS 00008 00009 00010 /* --- SfiBBlock primitive type --- */ 00011 struct _SfiBBlock { 00012 guint ref_count; 00013 guint n_bytes; 00014 guint8 *bytes; 00015 }; 00016 SfiBBlock* sfi_bblock_new (void); 00017 SfiBBlock* sfi_bblock_new_sized (guint size); 00018 SfiBBlock* sfi_bblock_ref (SfiBBlock *bblock); 00019 void sfi_bblock_unref (SfiBBlock *bblock); 00020 void sfi_bblock_resize (SfiBBlock *bblock, 00021 guint size); 00022 SfiBBlock* sfi_bblock_copy_deep (const SfiBBlock *bblock); 00023 #define sfi_bblock_copy_shallow sfi_bblock_ref 00024 void sfi_bblock_append (SfiBBlock *bblock, 00025 guint n_bytes, 00026 const guint8 *bytes); 00027 void sfi_bblock_append1 (SfiBBlock *bblock, 00028 guint8 byte0); 00029 guint sfi_bblock_length (const SfiBBlock *bblock); 00030 guint8* sfi_bblock_get (const SfiBBlock *bblock); 00031 00032 00033 /* --- SfiFBlock primitive type --- */ 00034 struct _SfiFBlock { 00035 guint ref_count; 00036 guint n_values; 00037 gfloat *values; 00038 GFreeFunc freefunc; 00039 }; 00040 SfiFBlock* sfi_fblock_new (void); 00041 SfiFBlock* sfi_fblock_new_sized (guint size); 00042 SfiFBlock* sfi_fblock_new_foreign (guint n_values, 00043 gfloat *values, 00044 GFreeFunc freefunc); 00045 SfiFBlock* sfi_fblock_ref (SfiFBlock *fblock); 00046 void sfi_fblock_unref (SfiFBlock *fblock); 00047 void sfi_fblock_resize (SfiFBlock *fblock, 00048 guint size); 00049 SfiFBlock* sfi_fblock_copy_deep (const SfiFBlock *fblock); 00050 #define sfi_fblock_copy_shallow sfi_fblock_ref 00051 void sfi_fblock_append (SfiFBlock *fblock, 00052 guint n_values, 00053 const gfloat *values); 00054 void sfi_fblock_append1 (SfiFBlock *fblock, 00055 gfloat float0); 00056 guint sfi_fblock_length (const SfiFBlock *fblock); 00057 gfloat* sfi_fblock_get (const SfiFBlock *fblock); 00058 00059 00060 /* --- SfiSeq primitive type --- */ 00061 struct _SfiSeq { 00062 guint ref_count; 00063 guint n_elements; 00064 GValue *elements; 00065 }; 00066 SfiSeq* sfi_seq_new (void); 00067 SfiSeq* sfi_seq_ref (SfiSeq *seq); 00068 void sfi_seq_unref (SfiSeq *seq); 00069 SfiSeq* sfi_seq_copy_deep (const SfiSeq *seq); 00070 #define sfi_seq_copy_shallow sfi_seq_ref 00071 void sfi_seq_append (SfiSeq *seq, 00072 const GValue *value); 00073 GValue* sfi_seq_append_empty (SfiSeq *seq, 00074 GType value_type); 00075 void sfi_seq_clear (SfiSeq *seq); 00076 guint sfi_seq_length (const SfiSeq *seq); 00077 GValue* sfi_seq_get (const SfiSeq *seq, 00078 guint index); 00079 gboolean sfi_seq_check (SfiSeq *seq, 00080 GType element_type); 00081 gboolean sfi_seq_validate (SfiSeq *seq, 00082 GParamSpec *pspec); 00083 /* convenience */ 00084 void sfi_seq_append_bool (SfiSeq *seq, 00085 SfiBool v_bool); 00086 void sfi_seq_append_int (SfiSeq *seq, 00087 SfiInt v_int); 00088 void sfi_seq_append_num (SfiSeq *seq, 00089 SfiNum v_num); 00090 void sfi_seq_append_real (SfiSeq *seq, 00091 SfiReal v_real); 00092 void sfi_seq_append_string (SfiSeq *seq, 00093 const gchar *string); 00094 void sfi_seq_append_choice (SfiSeq *seq, 00095 const gchar *choice); 00096 void sfi_seq_append_bblock (SfiSeq *seq, 00097 SfiBBlock *bblock); 00098 void sfi_seq_append_fblock (SfiSeq *seq, 00099 SfiFBlock *fblock); 00100 void sfi_seq_append_pspec (SfiSeq *seq, 00101 GParamSpec *pspec); 00102 void sfi_seq_append_seq (SfiSeq *seq, 00103 SfiSeq *v_seq); 00104 void sfi_seq_append_rec (SfiSeq *seq, 00105 SfiRec *rec); 00106 void sfi_seq_append_proxy (SfiSeq *seq, 00107 SfiProxy proxy); 00108 SfiBool sfi_seq_get_bool (SfiSeq *seq, 00109 guint index); 00110 SfiInt sfi_seq_get_int (SfiSeq *seq, 00111 guint index); 00112 SfiNum sfi_seq_get_num (SfiSeq *seq, 00113 guint index); 00114 SfiReal sfi_seq_get_real (SfiSeq *seq, 00115 guint index); 00116 const gchar* sfi_seq_get_string (SfiSeq *seq, 00117 guint index); 00118 const gchar* sfi_seq_get_choice (SfiSeq *seq, 00119 guint index); 00120 SfiBBlock* sfi_seq_get_bblock (SfiSeq *seq, 00121 guint index); 00122 SfiFBlock* sfi_seq_get_fblock (SfiSeq *seq, 00123 guint index); 00124 GParamSpec* sfi_seq_get_pspec (SfiSeq *seq, 00125 guint index); 00126 SfiSeq* sfi_seq_get_seq (SfiSeq *seq, 00127 guint index); 00128 SfiRec* sfi_seq_get_rec (SfiSeq *seq, 00129 guint index); 00130 SfiProxy sfi_seq_get_proxy (SfiSeq *seq, 00131 guint index); 00132 /* conversion convenience */ 00133 gchar** sfi_seq_to_strv (SfiSeq *seq); 00134 SfiSeq* sfi_seq_from_strv (gchar **strv); 00135 SfiSeq* sfi_seq_from_cstrv (const gchar **strv); 00136 00137 00138 /* --- SfiRec primitive type --- */ 00139 struct _SfiRec { 00140 guint ref_count; 00141 guint n_fields; 00142 guint sorted : 1; 00143 GValue *fields; 00144 gchar **field_names; 00145 }; 00146 SfiRec* sfi_rec_new (void); 00147 SfiRec* sfi_rec_ref (SfiRec *rec); 00148 void sfi_rec_unref (SfiRec *rec); 00149 SfiRec* sfi_rec_copy_deep (SfiRec *rec); 00150 #define sfi_rec_copy_shallow sfi_rec_ref 00151 void sfi_rec_swap_fields (SfiRec *rec, 00152 SfiRec *swapper); 00153 gboolean sfi_rec_validate (SfiRec *rec, 00154 SfiRecFields fields); 00155 void sfi_rec_clear (SfiRec *rec); 00156 void sfi_rec_set (SfiRec *rec, 00157 const gchar *field_name, 00158 const GValue *value); 00159 GValue* sfi_rec_get (SfiRec *rec, 00160 const gchar *field_name); 00161 GValue* sfi_rec_forced_get (SfiRec *rec, 00162 const gchar *field_name, 00163 GType gtype); 00164 guint sfi_rec_n_fields (const SfiRec *rec); 00165 GValue* sfi_rec_field (const SfiRec *rec, 00166 guint index); 00167 gboolean sfi_rec_check (SfiRec *rec, 00168 SfiRecFields rfields); 00169 void sfi_rec_sort (SfiRec *rec); 00170 /* convenience */ 00171 void sfi_rec_set_bool (SfiRec *rec, 00172 const gchar *field_name, 00173 SfiBool v_bool); 00174 void sfi_rec_set_int (SfiRec *rec, 00175 const gchar *field_name, 00176 SfiInt v_int); 00177 void sfi_rec_set_num (SfiRec *rec, 00178 const gchar *field_name, 00179 SfiNum v_num); 00180 void sfi_rec_set_real (SfiRec *rec, 00181 const gchar *field_name, 00182 SfiReal v_real); 00183 void sfi_rec_set_string (SfiRec *rec, 00184 const gchar *field_name, 00185 const gchar *string); 00186 void sfi_rec_set_choice (SfiRec *rec, 00187 const gchar *field_name, 00188 const gchar *choice); 00189 void sfi_rec_set_bblock (SfiRec *rec, 00190 const gchar *field_name, 00191 SfiBBlock *bblock); 00192 void sfi_rec_set_fblock (SfiRec *rec, 00193 const gchar *field_name, 00194 SfiFBlock *fblock); 00195 void sfi_rec_set_pspec (SfiRec *rec, 00196 const gchar *field_name, 00197 GParamSpec *pspec); 00198 void sfi_rec_set_seq (SfiRec *rec, 00199 const gchar *field_name, 00200 SfiSeq *seq); 00201 void sfi_rec_set_rec (SfiRec *rec, 00202 const gchar *field_name, 00203 SfiRec *v_rec); 00204 void sfi_rec_set_proxy (SfiRec *rec, 00205 const gchar *field_name, 00206 SfiProxy proxy); 00207 SfiBool sfi_rec_get_bool (SfiRec *rec, 00208 const gchar *field_name); 00209 SfiInt sfi_rec_get_int (SfiRec *rec, 00210 const gchar *field_name); 00211 SfiNum sfi_rec_get_num (SfiRec *rec, 00212 const gchar *field_name); 00213 SfiReal sfi_rec_get_real (SfiRec *rec, 00214 const gchar *field_name); 00215 const gchar* sfi_rec_get_string (SfiRec *rec, 00216 const gchar *field_name); 00217 const gchar* sfi_rec_get_choice (SfiRec *rec, 00218 const gchar *field_name); 00219 SfiBBlock* sfi_rec_get_bblock (SfiRec *rec, 00220 const gchar *field_name); 00221 SfiFBlock* sfi_rec_get_fblock (SfiRec *rec, 00222 const gchar *field_name); 00223 GParamSpec* sfi_rec_get_pspec (SfiRec *rec, 00224 const gchar *field_name); 00225 SfiSeq* sfi_rec_get_seq (SfiRec *rec, 00226 const gchar *field_name); 00227 SfiRec* sfi_rec_get_rec (SfiRec *rec, 00228 const gchar *field_name); 00229 SfiProxy sfi_rec_get_proxy (SfiRec *rec, 00230 const gchar *field_name); 00231 00232 G_END_DECLS 00233 00234 #endif /* __SFI_PRIMITIVES_H__ */ 00235 00236 /* vim:set ts=8 sts=2 sw=2: */