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