[vlc-devel] commit: Variable lookup: small code factorization ( Rémi Denis-Courmont )

git version control git at videolan.org
Sun Jan 3 18:21:59 CET 2010


vlc | branch: master | Rémi Denis-Courmont <remi at remlab.net> | Sun Jan  3 18:18:09 2010 +0200| [c36ef0c80c6ba0ef336045c848ea7035bfa40238] | committer: Rémi Denis-Courmont 

Variable lookup: small code factorization

> http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=c36ef0c80c6ba0ef336045c848ea7035bfa40238
---

 src/misc/variables.c |   27 ++++++++++++++-------------
 1 files changed, 14 insertions(+), 13 deletions(-)

diff --git a/src/misc/variables.c b/src/misc/variables.c
index b4f3230..9bb2112 100644
--- a/src/misc/variables.c
+++ b/src/misc/variables.c
@@ -156,7 +156,7 @@ static int      GetUnused   ( vlc_object_t *, const char * );
 static uint32_t HashString  ( const char * );
 static int      Insert      ( variable_t **, int, const char * );
 static int      InsertInner ( variable_t **, int, uint32_t );
-static int      Lookup      ( variable_t *const *, size_t, const char * );
+static int      Lookup      ( vlc_object_t *, const char * );
 
 static void     CheckValue  ( variable_t *, vlc_value_t * );
 
@@ -291,7 +291,7 @@ int __var_Create( vlc_object_t *p_this, const char *psz_name, int i_type )
      * duplicate the lookups. It's not that serious, but if anyone finds some
      * time to rework Insert() so that only one lookup has to be done, feel
      * free to do so. */
-    i_new = Lookup( p_priv->pp_vars, p_priv->i_vars, psz_name );
+    i_new = Lookup( p_this, psz_name );
 
     if( i_new >= 0 )
     {
@@ -414,7 +414,7 @@ int __var_Change( vlc_object_t *p_this, const char *psz_name,
 
     vlc_mutex_lock( &p_priv->var_lock );
 
-    i_var = Lookup( p_priv->pp_vars, p_priv->i_vars, psz_name );
+    i_var = Lookup( p_this, psz_name );
 
     if( i_var < 0 )
     {
@@ -713,7 +713,7 @@ int __var_Type( vlc_object_t *p_this, const char *psz_name )
 
     vlc_mutex_lock( &p_priv->var_lock );
 
-    i_var = Lookup( p_priv->pp_vars, p_priv->i_vars, psz_name );
+    i_var = Lookup( p_this, psz_name );
 
     if( i_var < 0 )
     {
@@ -799,7 +799,7 @@ int var_GetChecked( vlc_object_t *p_this, const char *psz_name,
 
     vlc_mutex_lock( &p_priv->var_lock );
 
-    i_var = Lookup( p_priv->pp_vars, p_priv->i_vars, psz_name );
+    i_var = Lookup( p_this, psz_name );
     if( i_var >= 0 )
     {
         variable_t *p_var = p_priv->pp_vars[i_var];
@@ -1153,7 +1153,7 @@ static int GetUnused( vlc_object_t *p_this, const char *psz_name )
     {
         int i_var;
 
-        i_var = Lookup( p_priv->pp_vars, p_priv->i_vars, psz_name );
+        i_var = Lookup( p_this, psz_name );
         if( i_var < 0 )
         {
             return VLC_ENOVAR;
@@ -1260,20 +1260,21 @@ static int u32cmp( const void *key, const void *data )
  * We use a recursive inner function indexed on the hash. Care is taken of
  * possible hash collisions.
  *****************************************************************************/
-static int Lookup( variable_t *const *pp_vars, size_t i_count,
-                   const char *psz_name )
+static int Lookup( vlc_object_t *obj, const char *psz_name )
 {
+    vlc_object_internals_t *priv = vlc_internals( obj );
+    variable_t **pp_vars = priv->pp_vars;
+    size_t i_vars = priv->i_vars;
     variable_t **pp_var;
-    uint32_t i_hash;
+    uint32_t i_hash = HashString( psz_name );
 
-    i_hash = HashString( psz_name );
-    pp_var = bsearch( &i_hash, pp_vars, i_count, sizeof( *pp_var ), u32cmp );
+    pp_var = bsearch( &i_hash, pp_vars, i_vars, sizeof( *pp_var ), u32cmp );
 
     /* Hash not found */
     if( pp_var == NULL )
         return -1;
 
-    assert( i_count > 0 );
+    assert( i_vars > 0 );
 
     /* Find the first entry with the right hash */
     while( (pp_var > pp_vars) && (i_hash == pp_var[-1]->i_hash) )
@@ -1284,7 +1285,7 @@ static int Lookup( variable_t *const *pp_vars, size_t i_count,
     /* Hash collision should be very unlikely, but we cannot guarantee
      * it will never happen. So we do an exhaustive search amongst all
      * entries with the same hash. Typically, there is only one anyway. */
-    for( variable_t *const *p_end = pp_vars + i_count;
+    for( variable_t *const *p_end = pp_vars + i_vars;
          (pp_var < p_end) && (i_hash == (*pp_var)->i_hash);
          pp_var++ )
     {




More information about the vlc-devel mailing list