Changeset 7e436fa9470869077303878a5b655da1731236dc
- Timestamp:
- 02/25/08 18:50:10
(6 months ago)
- Author:
- Pierre d'Herbemont <pdherbemont@videolan.org>
- git-committer:
- Pierre d'Herbemont <pdherbemont@videolan.org> 1203961810 +0000
- git-parent:
[d68b821264ac7d5b93098271dd4aaf71fd1a3f41]
- git-author:
- Pierre d'Herbemont <pdherbemont@videolan.org> 1203961810 +0000
- Message:
control/event.c: Use vlc_array_t instead of the macros.
-
Files:
-
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
| r88fc2c2 |
r7e436fa |
|
| 43 | 43 | void libvlc_event_init( libvlc_instance_t *p_instance, libvlc_exception_t *p_e ) |
|---|
| 44 | 44 | { |
|---|
| | 45 | (void)p_instance;(void)p_e; |
|---|
| 45 | 46 | /* Will certainly be used to install libvlc_instance event */ |
|---|
| 46 | 47 | } |
|---|
| … | … | |
| 53 | 54 | void libvlc_event_fini( libvlc_instance_t *p_instance ) |
|---|
| 54 | 55 | { |
|---|
| | 56 | (void)p_instance; |
|---|
| 55 | 57 | } |
|---|
| 56 | 58 | |
|---|
| … | … | |
| 76 | 78 | p_em->p_libvlc_instance = p_libvlc_inst; |
|---|
| 77 | 79 | libvlc_retain( p_libvlc_inst ); |
|---|
| 78 | | ARRAY_INIT( p_em->listeners_groups ); |
|---|
| | 80 | vlc_array_init( &p_em->listeners_groups ); |
|---|
| 79 | 81 | vlc_mutex_init( p_libvlc_inst->p_libvlc_int, &p_em->object_lock ); |
|---|
| 80 | 82 | vlc_mutex_init( p_libvlc_inst->p_libvlc_int, &p_em->event_sending_lock ); |
|---|
| … | … | |
| 89 | 91 | void libvlc_event_manager_release( libvlc_event_manager_t * p_em ) |
|---|
| 90 | 92 | { |
|---|
| 91 | | libvlc_event_listeners_group_t * listeners_group; |
|---|
| 92 | | libvlc_event_listener_t * listener; |
|---|
| | 93 | libvlc_event_listeners_group_t * p_lg; |
|---|
| | 94 | int i,j ; |
|---|
| 93 | 95 | |
|---|
| 94 | 96 | vlc_mutex_destroy( &p_em->event_sending_lock ); |
|---|
| 95 | 97 | vlc_mutex_destroy( &p_em->object_lock ); |
|---|
| 96 | 98 | |
|---|
| 97 | | FOREACH_ARRAY( listeners_group, p_em->listeners_groups ) |
|---|
| 98 | | FOREACH_ARRAY( listener, listeners_group->listeners ) |
|---|
| 99 | | free( listener ); |
|---|
| 100 | | FOREACH_END() |
|---|
| 101 | | ARRAY_RESET( listeners_group->listeners ); |
|---|
| 102 | | free( listeners_group ); |
|---|
| 103 | | FOREACH_END() |
|---|
| 104 | | ARRAY_RESET( p_em->listeners_groups ); |
|---|
| 105 | | |
|---|
| | 99 | for( i = 0; i < vlc_array_count(&p_em->listeners_groups); i++) |
|---|
| | 100 | { |
|---|
| | 101 | p_lg = vlc_array_item_at_index( &p_em->listeners_groups, i ); |
|---|
| | 102 | |
|---|
| | 103 | for( j = 0; j < vlc_array_count(&p_lg->listeners); j++) |
|---|
| | 104 | free( vlc_array_item_at_index( &p_em->listeners_groups, i ) ); |
|---|
| | 105 | |
|---|
| | 106 | vlc_array_clear( &p_lg->listeners ); |
|---|
| | 107 | free( p_lg ); |
|---|
| | 108 | } |
|---|
| | 109 | vlc_array_clear( &p_em->listeners_groups ); |
|---|
| 106 | 110 | libvlc_release( p_em->p_libvlc_instance ); |
|---|
| 107 | 111 | free( p_em ); |
|---|
| … | … | |
| 127 | 131 | |
|---|
| 128 | 132 | listeners_group->event_type = event_type; |
|---|
| 129 | | ARRAY_INIT( listeners_group->listeners ); |
|---|
| | 133 | vlc_array_init( &listeners_group->listeners ); |
|---|
| 130 | 134 | |
|---|
| 131 | 135 | vlc_mutex_lock( &p_em->object_lock ); |
|---|
| 132 | | ARRAY_APPEND( p_em->listeners_groups, listeners_group ); |
|---|
| | 136 | vlc_array_append( &p_em->listeners_groups, listeners_group ); |
|---|
| 133 | 137 | vlc_mutex_unlock( &p_em->object_lock ); |
|---|
| 134 | 138 | } |
|---|
| … | … | |
| 154 | 158 | |
|---|
| 155 | 159 | vlc_mutex_lock( &p_em->object_lock ); |
|---|
| 156 | | FOREACH_ARRAY( listeners_group, p_em->listeners_groups ) |
|---|
| | 160 | for( i = 0; i < vlc_array_count(&p_em->listeners_groups); i++) |
|---|
| | 161 | { |
|---|
| | 162 | listeners_group = vlc_array_item_at_index(&p_em->listeners_groups, i); |
|---|
| 157 | 163 | if( listeners_group->event_type == p_event->type ) |
|---|
| 158 | 164 | { |
|---|
| 159 | | if( listeners_group->listeners.i_size <= 0 ) |
|---|
| | 165 | if( vlc_array_count( &listeners_group->listeners ) <= 0 ) |
|---|
| 160 | 166 | break; |
|---|
| 161 | 167 | |
|---|
| 162 | 168 | /* Cache a copy of the listener to avoid locking issues */ |
|---|
| 163 | | i_cached_listeners = listeners_group->listeners.i_size; |
|---|
| | 169 | i_cached_listeners = vlc_array_count(&listeners_group->listeners); |
|---|
| 164 | 170 | array_listeners_cached = malloc(sizeof(libvlc_event_listener_t)*(i_cached_listeners)); |
|---|
| 165 | 171 | if( !array_listeners_cached ) |
|---|
| … | … | |
| 170 | 176 | |
|---|
| 171 | 177 | listener_cached = array_listeners_cached; |
|---|
| 172 | | FOREACH_ARRAY( listener, listeners_group->listeners ) |
|---|
| 173 | | memcpy( listener_cached, listener, sizeof(libvlc_event_listener_t)); |
|---|
| | 178 | for( i = 0; i < vlc_array_count(&listeners_group->listeners); i++) |
|---|
| | 179 | { |
|---|
| | 180 | listener = vlc_array_item_at_index(&listeners_group->listeners, i); |
|---|
| | 181 | memcpy( listener_cached, listener, sizeof(libvlc_event_listener_t) ); |
|---|
| 174 | 182 | listener_cached++; |
|---|
| 175 | | FOREACH_END() |
|---|
| | 183 | } |
|---|
| 176 | 184 | break; |
|---|
| 177 | 185 | } |
|---|
| 178 | | FOREACH_END() |
|---|
| | 186 | } |
|---|
| 179 | 187 | |
|---|
| 180 | 188 | vlc_mutex_unlock( &p_em->object_lock ); |
|---|
| … | … | |
| 262 | 270 | libvlc_event_listeners_group_t * listeners_group; |
|---|
| 263 | 271 | libvlc_event_listener_t * listener; |
|---|
| | 272 | int i; |
|---|
| | 273 | |
|---|
| 264 | 274 | listener = malloc(sizeof(libvlc_event_listener_t)); |
|---|
| 265 | 275 | if( !listener ) |
|---|
| … | … | |
| 274 | 284 | |
|---|
| 275 | 285 | vlc_mutex_lock( &p_event_manager->object_lock ); |
|---|
| 276 | | FOREACH_ARRAY( listeners_group, p_event_manager->listeners_groups ) |
|---|
| | 286 | for( i = 0; i < vlc_array_count(&p_event_manager->listeners_groups); i++ ) |
|---|
| | 287 | { |
|---|
| | 288 | listeners_group = vlc_array_item_at_index(&p_event_manager->listeners_groups, i); |
|---|
| 277 | 289 | if( listeners_group->event_type == listener->event_type ) |
|---|
| 278 | 290 | { |
|---|
| 279 | | ARRAY_APPEND( listeners_group->listeners, listener ); |
|---|
| | 291 | vlc_array_append( &listeners_group->listeners, listener ); |
|---|
| 280 | 292 | vlc_mutex_unlock( &p_event_manager->object_lock ); |
|---|
| 281 | 293 | return; |
|---|
| 282 | 294 | } |
|---|
| 283 | | FOREACH_END() |
|---|
| | 295 | } |
|---|
| 284 | 296 | vlc_mutex_unlock( &p_event_manager->object_lock ); |
|---|
| 285 | 297 | |
|---|
| … | … | |
| 319 | 331 | libvlc_event_listeners_group_t * listeners_group; |
|---|
| 320 | 332 | libvlc_event_listener_t * listener; |
|---|
| | 333 | int i; |
|---|
| 321 | 334 | |
|---|
| 322 | 335 | if( lockstate == libvlc_UnLocked ) |
|---|
| 323 | 336 | vlc_mutex_lock( &p_event_manager->event_sending_lock ); |
|---|
| 324 | 337 | vlc_mutex_lock( &p_event_manager->object_lock ); |
|---|
| 325 | | FOREACH_ARRAY( listeners_group, p_event_manager->listeners_groups ) |
|---|
| | 338 | for( i = 0; i < vlc_array_count(&p_event_manager->listeners_groups); i++) |
|---|
| | 339 | { |
|---|
| | 340 | listeners_group = vlc_array_item_at_index(&p_event_manager->listeners_groups, i); |
|---|
| 326 | 341 | if( listeners_group->event_type == event_type ) |
|---|
| 327 | 342 | { |
|---|
| 328 | | FOREACH_ARRAY( listener, listeners_group->listeners ) |
|---|
| | 343 | for( i = 0; i < vlc_array_count(&listeners_group->listeners); i++) |
|---|
| | 344 | { |
|---|
| | 345 | listener = vlc_array_item_at_index(&listeners_group->listeners, i); |
|---|
| 329 | 346 | if( listener->event_type == event_type && |
|---|
| 330 | 347 | listener->pf_callback == pf_callback && |
|---|
| … | … | |
| 333 | 350 | /* that's our listener */ |
|---|
| 334 | 351 | free( listener ); |
|---|
| 335 | | ARRAY_REMOVE( listeners_group->listeners, |
|---|
| 336 | | fe_idx /* This comes from the macro (and that's why |
|---|
| 337 | | I hate macro) */ ); |
|---|
| | 352 | vlc_array_remove( &listeners_group->listeners, i ); |
|---|
| 338 | 353 | vlc_mutex_unlock( &p_event_manager->object_lock ); |
|---|
| 339 | 354 | if( lockstate == libvlc_UnLocked ) |
|---|
| … | … | |
| 341 | 356 | return; |
|---|
| 342 | 357 | } |
|---|
| 343 | | FOREACH_END() |
|---|
| | 358 | } |
|---|
| 344 | 359 | } |
|---|
| 345 | | FOREACH_END() |
|---|
| | 360 | } |
|---|
| 346 | 361 | vlc_mutex_unlock( &p_event_manager->object_lock ); |
|---|
| 347 | 362 | if( lockstate == libvlc_UnLocked ) |
|---|