BEAST/BSE - Better Audio System and Sound Engine  0.8.2
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines
sfivalues.hh
Go to the documentation of this file.
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: */
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines