]> git.sesse.net Git - vlc/blobdiff - src/misc/variables.h
Use var_Inherit* instead of var_CreateGet*.
[vlc] / src / misc / variables.h
index 2565edb88e43d2ed5ce54656c5dbf03850f5a6ff..b0de92de2d943e2149f58713bfa59d41a9c4022f 100644 (file)
 # error This header file can only be included from LibVLC.
 #endif
 
-#ifndef __LIBVLC_VARIABLES_H
-# define __LIBVLC_VARIABLES_H 1
+#ifndef LIBVLC_VARIABLES_H
+# define LIBVLC_VARIABLES_H 1
 
 typedef struct callback_entry_t callback_entry_t;
 
+typedef struct variable_ops_t
+{
+    int  (*pf_cmp) ( vlc_value_t, vlc_value_t );
+    void (*pf_dup) ( vlc_value_t * );
+    void (*pf_free) ( vlc_value_t * );
+} variable_ops_t;
+
 /**
  * The structure describing a variable.
  * \note vlc_value_t is the common union for variable values
  */
 struct variable_t
 {
+    char *       psz_name; /**< The variable unique name (must be first) */
+
     /** The variable's exported value */
     vlc_value_t  val;
 
-    char *       psz_name; /**< The variable unique name */
-    uint32_t     i_hash;   /**< (almost) unique hashed value */
-    int          i_type;   /**< The type of the variable */
-
     /** The variable display name, mainly for use by the interfaces */
     char *       psz_text;
 
-    /** A pointer to a comparison function */
-    int      ( * pf_cmp ) ( vlc_value_t, vlc_value_t );
-    /** A pointer to a duplication function */
-    void     ( * pf_dup ) ( vlc_value_t * );
-    /** A pointer to a deallocation function */
-    void     ( * pf_free ) ( vlc_value_t * );
+    const variable_ops_t *ops;
 
-    /** Creation count: we only destroy the variable if it reaches 0 */
-    int          i_usage;
+    int          i_type;   /**< The type of the variable */
+    unsigned     i_usage;  /**< Reference count */
 
     /** If the variable has min/max/step values */
     vlc_value_t  min, max, step;
@@ -68,11 +68,14 @@ struct variable_t
     vlc_list_t   choices_text;
 
     /** Set to TRUE if the variable is in a callback */
-    vlc_bool_t   b_incallback;
+    bool   b_incallback;
 
     /** Number of registered callbacks */
     int                i_entries;
     /** Array of registered callbacks */
     callback_entry_t * p_entries;
 };
+
+extern void var_DestroyAll( vlc_object_t * );
+
 #endif