BEAST - Free Software Audio Synthesizer and Tracker  0.10.0
sfivalues.hh
Go to the documentation of this file.
1  // Licensed GNU LGPL v2.1 or later: http://www.gnu.org/licenses/lgpl.html
2 #ifndef __SFI_VALUES_H__
3 #define __SFI_VALUES_H__
4 
5 #include <sfi/sfitypes.hh>
6 
7 G_BEGIN_DECLS
8 
9 
10 /* --- Sfi value type aliases --- */
11 #define SFI_TYPE_BOOL G_TYPE_BOOLEAN
12 #define SFI_TYPE_INT G_TYPE_INT
13 #define SFI_TYPE_NUM G_TYPE_INT64
14 #define SFI_TYPE_REAL G_TYPE_DOUBLE
15 #define SFI_TYPE_SFI_STRING G_TYPE_STRING
16 #define SFI_TYPE_PSPEC G_TYPE_PARAM
17 
18 
19 /* --- Sfi value types --- */
20 #define SFI_TYPE_CHOICE (sfi__value_types[0])
21 #define SFI_TYPE_BBLOCK (sfi__value_types[1])
22 #define SFI_TYPE_FBLOCK (sfi__value_types[2])
23 #define SFI_TYPE_SEQ (sfi__value_types[3])
24 #define SFI_TYPE_REC (sfi__value_types[4])
25 #define SFI_TYPE_PROXY (sfi__value_types[5])
26 
27 
28 /* --- Sfi value macros --- */
29 #define SFI_IS_VALUE(value) (sfi_check_value (value))
30 #define SFI_VALUE_HOLDS_BOOL(value) (G_TYPE_CHECK_VALUE_TYPE ((value), SFI_TYPE_BOOL))
31 #define SFI_VALUE_HOLDS_INT(value) (G_TYPE_CHECK_VALUE_TYPE ((value), SFI_TYPE_INT))
32 #define SFI_VALUE_HOLDS_NUM(value) (G_TYPE_CHECK_VALUE_TYPE ((value), SFI_TYPE_NUM))
33 #define SFI_VALUE_HOLDS_REAL(value) (G_TYPE_CHECK_VALUE_TYPE ((value), SFI_TYPE_REAL))
34 #define SFI_VALUE_HOLDS_STRING(value) (G_TYPE_CHECK_VALUE_TYPE ((value), SFI_TYPE_SFI_STRING))
35 #define SFI_VALUE_HOLDS_CHOICE(value) (G_TYPE_CHECK_VALUE_TYPE ((value), SFI_TYPE_CHOICE))
36 #define SFI_VALUE_HOLDS_BBLOCK(value) (G_TYPE_CHECK_VALUE_TYPE ((value), SFI_TYPE_BBLOCK))
37 #define SFI_VALUE_HOLDS_FBLOCK(value) (G_TYPE_CHECK_VALUE_TYPE ((value), SFI_TYPE_FBLOCK))
38 #define SFI_VALUE_HOLDS_PSPEC(value) (G_TYPE_CHECK_VALUE_TYPE ((value), SFI_TYPE_PSPEC))
39 #define SFI_VALUE_HOLDS_SEQ(value) (G_TYPE_CHECK_VALUE_TYPE ((value), SFI_TYPE_SEQ))
40 #define SFI_VALUE_HOLDS_REC(value) (G_TYPE_CHECK_VALUE_TYPE ((value), SFI_TYPE_REC))
41 #define SFI_VALUE_HOLDS_PROXY(value) (G_TYPE_CHECK_VALUE_TYPE ((value), SFI_TYPE_PROXY))
42 
43 
44 /* --- Sfi value accessor aliases --- */
45 #define sfi_value_get_bool g_value_get_boolean
46 #define sfi_value_set_bool g_value_set_boolean
47 #define sfi_value_get_int g_value_get_int
48 #define sfi_value_set_int g_value_set_int
49 #define sfi_value_get_num g_value_get_int64
50 #define sfi_value_set_num g_value_set_int64
51 #define sfi_value_get_real g_value_get_double
52 #define sfi_value_set_real g_value_set_double
53 #define sfi_value_get_string g_value_get_string
54 #define sfi_value_set_string g_value_set_string
55 #define sfi_value_dup_string g_value_dup_string
56 #define sfi_value_set_static_string g_value_set_static_string
57 #define sfi_value_take_string g_value_take_string
58 
59 
60 /* --- Sfi value accessors --- */
61 const char* sfi_value_get_choice (const GValue *value);
62 void sfi_value_set_choice (GValue *value,
63  const gchar *choice_value);
64 SfiBBlock* sfi_value_get_bblock (const GValue *value);
65 SfiBBlock* sfi_value_dup_bblock (const GValue *value);
66 void sfi_value_set_bblock (GValue *value,
67  SfiBBlock *bblock);
68 void sfi_value_take_bblock (GValue *value,
69  SfiBBlock *bblock);
70 SfiFBlock* sfi_value_get_fblock (const GValue *value);
71 SfiFBlock* sfi_value_dup_fblock (const GValue *value);
72 void sfi_value_set_fblock (GValue *value,
73  SfiFBlock *fblock);
74 void sfi_value_take_fblock (GValue *value,
75  SfiFBlock *fblock);
76 GParamSpec* sfi_value_get_pspec (const GValue *value);
77 GParamSpec* sfi_value_dup_pspec (const GValue *value);
78 void sfi_value_set_pspec (GValue *value,
79  GParamSpec *pspec);
80 void sfi_value_take_pspec (GValue *value,
81  GParamSpec *pspec);
82 SfiSeq* sfi_value_get_seq (const GValue *value);
83 void sfi_value_set_seq (GValue *value,
84  SfiSeq *seq);
85 void sfi_value_take_seq (GValue *value,
86  SfiSeq *seq);
87 SfiRec* sfi_value_get_rec (const GValue *value);
88 SfiRec* sfi_value_dup_rec (const GValue *value);
89 void sfi_value_set_rec (GValue *value,
90  SfiRec *rec);
91 void sfi_value_take_rec (GValue *value,
92  SfiRec *rec);
93 SfiProxy sfi_value_get_proxy (const GValue *value);
94 void sfi_value_set_proxy (GValue *value,
95  SfiProxy proxy);
96 void sfi_value_copy_deep (const GValue *src_value,
97  GValue *dest_value);
98 #define sfi_value_copy_shallow g_value_copy
99 
100 
101 /* --- Sfi value constructors --- */
102 GValue* sfi_value_empty (void);
103 GValue* sfi_value_clone_deep (const GValue *value);
104 GValue* sfi_value_clone_shallow (const GValue *value);
105 GValue* sfi_value_bool (SfiBool vbool);
106 GValue* sfi_value_int (SfiInt vint);
107 GValue* sfi_value_num (SfiNum vnum);
108 GValue* sfi_value_real (SfiReal vreal);
109 GValue* sfi_value_string (const gchar *vstring);
110 GValue* sfi_value_lstring (const gchar *vstring,
111  guint length);
112 GValue* sfi_value_choice (const gchar *vchoice);
113 GValue* sfi_value_lchoice (const gchar *vchoice,
114  guint length);
115 GValue* sfi_value_choice_enum (const GValue *enum_value);
116 GValue* sfi_value_choice_genum (gint enum_value,
117  GType enum_type);
118 GValue* sfi_value_bblock (SfiBBlock *vfblock);
119 GValue* sfi_value_fblock (SfiFBlock *vfblock);
120 GValue* sfi_value_pspec (GParamSpec *pspec);
121 GValue* sfi_value_seq (SfiSeq *vseq);
122 GValue* sfi_value_new_take_seq (SfiSeq *vseq);
123 GValue* sfi_value_rec (SfiRec *vrec);
124 GValue* sfi_value_new_take_rec (SfiRec *vrec);
125 GValue* sfi_value_proxy (SfiProxy vproxy);
126 void sfi_value_free (GValue *value);
127 
128 
129 /* --- convenience aliases --- */
130 #define SFI_VALUE_HOLDS_NOTE(value) SFI_VALUE_HOLDS_INT(value)
131 #define sfi_value_get_note sfi_value_get_int
132 #define sfi_value_set_note sfi_value_set_int
133 #define sfi_value_note sfi_value_int
134 #define SFI_VALUE_HOLDS_TIME(value) SFI_VALUE_HOLDS_NUM(value)
135 #define sfi_value_get_time sfi_value_get_num
136 #define sfi_value_set_time sfi_value_set_num
137 #define sfi_value_time sfi_value_num
138 
139 
140 /* --- transformation --- */
141 #define SFI_CHOICE_ERROR_QUARK (g_quark_from_string ("sfi-choice-error"))
142 void sfi_value_choice2enum (const GValue *choice_value,
143  GValue *enum_value,
144  GParamSpec *fallback_param);
145 void sfi_value_choice2enum_simple (const GValue *choice_value,
146  GValue *enum_value);
147 void sfi_value_enum2choice (const GValue *enum_value,
148  GValue *choice_value);
149 gint sfi_choice2enum_checked (const gchar *choice_value,
150  GType enum_type,
151  GError **errorp);
152 gint sfi_choice2enum (const gchar *choice_value,
153  GType enum_type);
154 const gchar* sfi_enum2choice (gint enum_value,
155  GType enum_type);
156 gint sfi_value_get_enum_auto (GType enum_type,
157  const GValue *value);
158 void sfi_value_set_enum_auto (GType enum_type,
159  GValue *value,
160  gint enum_value);
161 /* transform functions to work around glib bugs */
162 gboolean sfi_value_transform (const GValue *src_value,
163  GValue *dest_value);
164 gboolean sfi_value_type_compatible (GType src_type,
165  GType dest_type);
166 gboolean sfi_value_type_transformable (GType src_type,
167  GType dest_type);
168 
169 
170 /* --- internal --- */
171 void _sfi_init_values (void);
172 extern GType *sfi__value_types;
173 gboolean sfi_check_value (const GValue *value);
174 
175 G_END_DECLS
176 
177 #endif /* __SFI_VALUES_H__ */
178 
179 /* vim:set ts=8 sts=2 sw=2: */