-/**
- * find an object given its ID
- *
- * This function looks for the object whose i_object_id field is i_id. We
- * use a dichotomy so that lookups are in log2(n).
- *****************************************************************************/
-void * vlc_object_get( int i_id )
-{
- int i_max, i_middle;
- vlc_object_t **pp_objects;
- libvlc_global_data_t *p_libvlc_global = vlc_global();
-
- vlc_mutex_lock( &structure_lock );
-
- pp_objects = p_libvlc_global->pp_objects;
-
- /* Perform our dichotomy */
- for( i_max = p_libvlc_global->i_objects - 1 ; ; )
- {
- i_middle = i_max / 2;
-
- if( pp_objects[i_middle]->i_object_id > i_id )
- {
- i_max = i_middle;
- }
- else if( pp_objects[i_middle]->i_object_id < i_id )
- {
- if( i_middle )
- {
- pp_objects += i_middle;
- i_max -= i_middle;
- }
- else
- {
- /* This happens when there are only two remaining objects */
- if( pp_objects[i_middle+1]->i_object_id == i_id
- && pp_objects[i_middle+1]->p_internals->i_refcount > 0 )
- {
- vlc_object_yield_locked( pp_objects[i_middle+1] );
- vlc_mutex_unlock( &structure_lock );
- return pp_objects[i_middle+1];
- }
- break;
- }
- }
- else if( pp_objects[i_middle]->p_internals->i_refcount > 0 )
- {
- vlc_object_yield_locked( pp_objects[i_middle] );
- vlc_mutex_unlock( &structure_lock );
- return pp_objects[i_middle];
- }
-
- if( i_max == 0 )
- {
- /* this means that i_max == i_middle, and since we have already
- * tested pp_objects[i_middle]), p_found is properly set. */
- break;
- }
- }
-
- vlc_mutex_unlock( &structure_lock );
- return NULL;
-}
-
-/**
- ****************************************************************************