X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=include%2Fvlc_variables.h;h=4a0de14f21a11ec05225d8934756519b15fcf37e;hb=594a75c4d01955e660b88421c02f87ab810f72ed;hp=24be87f013ac273e51c43bb0b14ac804d914d9f3;hpb=3a29031f75fe51fb7e3a95c0b074626608ccca0a;p=vlc diff --git a/include/vlc_variables.h b/include/vlc_variables.h index 24be87f013..4a0de14f21 100644 --- a/include/vlc_variables.h +++ b/include/vlc_variables.h @@ -117,16 +117,12 @@ * These are the different actions that can be used with var_GetAndSet() * @{ */ -/** - * Toggle the value of this boolean - * \param val Unused - */ -#define VLC_VAR_TOGGLE_BOOL 0x0010 -/** - * Increment or decrement an integer of a given value - * \param val the value - */ -#define VLC_VAR_INTEGER_INCDEC 0x0020 +enum { + VLC_VAR_BOOL_TOGGLE, /**< Invert a boolean value (param ignored) */ + VLC_VAR_INTEGER_ADD, /**< Add parameter to an integer value */ + VLC_VAR_INTEGER_OR, /**< Binary OR over an integer bits field */ + VLC_VAR_INTEGER_NAND,/**< Binary NAND over an integer bits field */ +}; /**@}*/ /***************************************************************************** @@ -151,9 +147,10 @@ VLC_EXPORT( int, var_Get, ( vlc_object_t *, const char *, vlc_value_t * ) ); #define var_Get(a,b,c) var_Get( VLC_OBJECT(a), b, c ) VLC_EXPORT( int, var_SetChecked, ( vlc_object_t *, const char *, int, vlc_value_t ) ); +#define var_SetChecked(o,n,t,v) var_SetChecked(VLC_OBJECT(o),n,t,v) VLC_EXPORT( int, var_GetChecked, ( vlc_object_t *, const char *, int, vlc_value_t * ) ); -VLC_EXPORT( int, var_GetAndSet, ( vlc_object_t *, const char *, int, vlc_value_t ) ); -#define var_GetAndSet(a,b,c,d) var_GetAndSet(VLC_OBJECT(a), b, c, d) +#define var_GetChecked(o,n,t,v) var_GetChecked(VLC_OBJECT(o),n,t,v) +VLC_EXPORT( int, var_GetAndSet, ( vlc_object_t *, const char *, int, vlc_value_t * ) ); VLC_EXPORT( int, var_Inherit, ( vlc_object_t *, const char *, int, vlc_value_t * ) ); @@ -226,6 +223,16 @@ static inline int var_SetTime( vlc_object_t *p_obj, const char *psz_name, int64_ return var_SetChecked( p_obj, psz_name, VLC_VAR_TIME, val ); } +static inline int var_SetCoords( vlc_object_t *obj, const char *name, + int32_t x, int32_t y ) +{ + vlc_value_t val; + val.coords.x = x; + val.coords.y = y; + return var_SetChecked (obj, name, VLC_VAR_COORDS, val); +} +#define var_SetCoords(o,n,x,y) var_SetCoords(VLC_OBJECT(o),n,x,y) + /** * Set the value of a float variable * @@ -326,6 +333,21 @@ static inline int64_t var_GetTime( vlc_object_t *p_obj, const char *psz_name ) return 0; } +static inline void var_GetCoords( vlc_object_t *obj, const char *name, + int32_t *px, int32_t *py ) +{ + vlc_value_t val; + + if (likely(!var_GetChecked (obj, name, VLC_VAR_COORDS, &val))) + { + *px = val.coords.x; + *py = val.coords.y; + } + else + *px = *py = 0; +} +#define var_GetCoords(o,n,x,y) var_GetCoords(VLC_OBJECT(o),n,x,y) + /** * Get a float value * @@ -385,11 +407,12 @@ static inline void *var_GetAddress( vlc_object_t *p_obj, const char *psz_name ) * \param p_obj the object that holds the variable * \param psz_name the name of the variable */ -static inline void var_IncInteger( vlc_object_t *p_obj, const char *psz_name ) +static inline int var_IncInteger( vlc_object_t *p_obj, const char *psz_name ) { vlc_value_t val; val.i_int = 1; - var_GetAndSet( p_obj, psz_name, VLC_VAR_INTEGER_INCDEC, val ); + var_GetAndSet( p_obj, psz_name, VLC_VAR_INTEGER_ADD, &val ); + return val.i_int; } #define var_IncInteger(a,b) var_IncInteger( VLC_OBJECT(a), b ) @@ -398,14 +421,35 @@ static inline void var_IncInteger( vlc_object_t *p_obj, const char *psz_name ) * \param p_obj the object that holds the variable * \param psz_name the name of the variable */ -static inline void var_DecInteger( vlc_object_t *p_obj, const char *psz_name ) +static inline int var_DecInteger( vlc_object_t *p_obj, const char *psz_name ) { vlc_value_t val; val.i_int = -1; - var_GetAndSet( p_obj, psz_name, VLC_VAR_INTEGER_INCDEC, val ); + var_GetAndSet( p_obj, psz_name, VLC_VAR_INTEGER_ADD, &val ); + return val.i_int; } #define var_DecInteger(a,b) var_DecInteger( VLC_OBJECT(a), b ) +static inline unsigned var_OrInteger( vlc_object_t *obj, const char *name, + unsigned v ) +{ + vlc_value_t val; + val.i_int = v; + var_GetAndSet( obj, name, VLC_VAR_INTEGER_OR, &val ); + return val.i_int; +} +#define var_OrInteger(a,b,c) var_OrInteger(VLC_OBJECT(a),b,c) + +static inline unsigned var_NAndInteger( vlc_object_t *obj, const char *name, + unsigned v ) +{ + vlc_value_t val; + val.i_int = v; + var_GetAndSet( obj, name, VLC_VAR_INTEGER_NAND, &val ); + return val.i_int; +} +#define var_NAndInteger(a,b,c) var_NAndInteger(VLC_OBJECT(a),b,c) + /** * Create a integer variable with inherit and get its value. * @@ -600,10 +644,11 @@ static inline int var_CountChoices( vlc_object_t *p_obj, const char *psz_name ) #define var_CountChoices(a,b) var_CountChoices( VLC_OBJECT(a),b) -static inline int var_ToggleBool( vlc_object_t *p_obj, const char *psz_name ) +static inline bool var_ToggleBool( vlc_object_t *p_obj, const char *psz_name ) { vlc_value_t val; - return var_GetAndSet( p_obj, psz_name, VLC_VAR_TOGGLE_BOOL, val ); + var_GetAndSet( p_obj, psz_name, VLC_VAR_BOOL_TOGGLE, &val ); + return val.b_bool; } #define var_ToggleBool(a,b) var_ToggleBool( VLC_OBJECT(a),b )