vlc_arrays: add vlc_dictionary_is_empty
authorFrancois Cartegnie <fcvlcdev@free.fr>
Wed, 21 Jun 2017 16:18:27 +0000 (18:18 +0200)
committerFrancois Cartegnie <fcvlcdev@free.fr>
Thu, 22 Jun 2017 08:58:47 +0000 (10:58 +0200)
avoids walking every key/entry

include/vlc_arrays.h
modules/codec/ttml/substtml.c
modules/control/dbus/dbus.c
src/test/dictionary.c

index 5e5ef45..8c4419c 100644 (file)
@@ -473,6 +473,16 @@ vlc_dictionary_keys_count( const vlc_dictionary_t * p_dict )
     return count;
 }
 
     return count;
 }
 
+static inline bool
+vlc_dictionary_is_empty( const vlc_dictionary_t * p_dict )
+{
+    if( p_dict->p_entries )
+        for( int i = 0; i < p_dict->i_size; i++ )
+            if( p_dict->p_entries[i] )
+                return false;
+    return true;
+}
+
 static inline char **
 vlc_dictionary_all_keys( const vlc_dictionary_t * p_dict )
 {
 static inline char **
 vlc_dictionary_all_keys( const vlc_dictionary_t * p_dict )
 {
index 373dc24..84f13f5 100644 (file)
@@ -519,7 +519,7 @@ static ttml_style_t * InheritTTMLStyles( ttml_context_t *p_ctx, tt_node_t *p_nod
             DictMergeWithRegionID( p_ctx, psz_regionid, &merged );
     }
 
             DictMergeWithRegionID( p_ctx, psz_regionid, &merged );
     }
 
-    if( vlc_dictionary_keys_count( &merged ) && (p_ttml_style = ttml_style_New()) )
+    if( !vlc_dictionary_is_empty( &merged ) && (p_ttml_style = ttml_style_New()) )
     {
         DictToTTMLStyle( &merged, p_ttml_style );
     }
     {
         DictToTTMLStyle( &merged, p_ttml_style );
     }
index 87be4d2..5afe8bb 100644 (file)
@@ -616,13 +616,13 @@ static void ProcessEvents( intf_thread_t *p_intf,
         free( p_events[i] );
     }
 
         free( p_events[i] );
     }
 
-    if( vlc_dictionary_keys_count( &player_properties ) )
+    if( !vlc_dictionary_is_empty( &player_properties ) )
         PlayerPropertiesChangedEmit( p_intf, &player_properties );
 
         PlayerPropertiesChangedEmit( p_intf, &player_properties );
 
-    if( vlc_dictionary_keys_count( &tracklist_properties ) )
+    if( !vlc_dictionary_is_empty( &tracklist_properties ) )
         TrackListPropertiesChangedEmit( p_intf, &tracklist_properties );
 
         TrackListPropertiesChangedEmit( p_intf, &tracklist_properties );
 
-    if( vlc_dictionary_keys_count( &root_properties ) )
+    if( !vlc_dictionary_is_empty( &root_properties ) )
         RootPropertiesChangedEmit( p_intf, &root_properties );
 
     vlc_dictionary_clear( &player_properties,    NULL, NULL );
         RootPropertiesChangedEmit( p_intf, &root_properties );
 
     vlc_dictionary_clear( &player_properties,    NULL, NULL );
index 2e686e4..44d1b50 100644 (file)
@@ -74,6 +74,7 @@ int main (void)
     vlc_dictionary_init( &dict, 0 );
 
     assert( vlc_dictionary_keys_count( &dict ) == 0 );
     vlc_dictionary_init( &dict, 0 );
 
     assert( vlc_dictionary_keys_count( &dict ) == 0 );
+    assert( vlc_dictionary_is_empty( &dict ) );
 
     keys = vlc_dictionary_all_keys( &dict );
     assert( keys && !keys[0] );
 
     keys = vlc_dictionary_all_keys( &dict );
     assert( keys && !keys[0] );
@@ -89,6 +90,7 @@ int main (void)
             assert( !vlc_dictionary_has_key(&dict, our_keys[j]) );
     }
 
             assert( !vlc_dictionary_has_key(&dict, our_keys[j]) );
     }
 
+    assert( !vlc_dictionary_is_empty( &dict ) );
     test_dictionary_validity( &dict, our_keys, size );
 
     vlc_dictionary_remove_value_for_key( &dict, our_keys[size-1], NULL, NULL );
     test_dictionary_validity( &dict, our_keys, size );
 
     vlc_dictionary_remove_value_for_key( &dict, our_keys[size-1], NULL, NULL );
@@ -98,5 +100,6 @@ int main (void)
     vlc_dictionary_clear( &dict, NULL, NULL );
 
     assert( vlc_dictionary_keys_count( &dict ) == 0 );
     vlc_dictionary_clear( &dict, NULL, NULL );
 
     assert( vlc_dictionary_keys_count( &dict ) == 0 );
+    assert( vlc_dictionary_is_empty( &dict ) );
     return 0;
 }
     return 0;
 }