Changeset 5283

Show
Ignore:
Timestamp:
02/19/08 12:50:25 (11 months ago)
Author:
morris
Message:

Change how we work with enumerator context, unify them into a single struct

Hopefully fixes crash bug on Linux

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • libwired/trunk/libwired/base/wi-private.h

    r5265 r5283  
    4040#include <wired/wi-thread.h> 
    4141 
    42 #define WI_RUNTIME_MAGIC                0xAC1DFEED 
     42#define WI_RUNTIME_MAGIC                               0xAC1DFEED 
    4343 
    4444#define WI_RUNTIME_BASE(instance) \ 
     
    4646 
    4747 
    48  
    49 typedef void *                                  wi_enumerator_func_t(wi_runtime_instance_t *, void *); 
     48struct _wi_enumerator_context { 
     49        wi_uinteger_t                                           index; 
     50        void                                                            *bucket; 
     51}; 
     52typedef struct _wi_enumerator_context   wi_enumerator_context_t; 
    5053 
    5154 
    52 WI_EXPORT void                                  wi_address_register(void); 
    53 WI_EXPORT void                                  wi_array_register(void); 
    54 WI_EXPORT void                                  wi_crypto_register(void); 
    55 WI_EXPORT void                                  wi_data_register(void); 
    56 WI_EXPORT void                                  wi_date_register(void); 
    57 WI_EXPORT void                                  wi_enumerator_register(void); 
    58 WI_EXPORT void                                  wi_error_register(void); 
    59 WI_EXPORT void                                  wi_file_register(void); 
    60 WI_EXPORT void                                  wi_hash_register(void); 
    61 WI_EXPORT void                                  wi_host_register(void); 
    62 WI_EXPORT void                                  wi_lock_register(void); 
    63 WI_EXPORT void                                  wi_log_register(void); 
    64 WI_EXPORT void                                  wi_number_register(void); 
    65 WI_EXPORT void                                  wi_p7_message_register(void); 
    66 WI_EXPORT void                                  wi_p7_socket_register(void); 
    67 WI_EXPORT void                                  wi_p7_spec_register(void); 
    68 WI_EXPORT void                                  wi_pool_register(void); 
    69 WI_EXPORT void                                  wi_process_register(void); 
    70 WI_EXPORT void                                  wi_regexp_register(void); 
    71 WI_EXPORT void                                  wi_runtime_register(void); 
    72 WI_EXPORT void                                  wi_set_register(void); 
    73 WI_EXPORT void                                  wi_settings_register(void); 
    74 WI_EXPORT void                                  wi_socket_register(void); 
    75 WI_EXPORT void                                  wi_string_register(void); 
    76 WI_EXPORT void                                  wi_task_register(void); 
    77 WI_EXPORT void                                  wi_terminal_register(void); 
    78 WI_EXPORT void                                  wi_test_register(void); 
    79 WI_EXPORT void                                  wi_timer_register(void); 
    80 WI_EXPORT void                                  wi_thread_register(void); 
    81 WI_EXPORT void                                  wi_url_register(void); 
    82 WI_EXPORT void                                  wi_uuid_register(void); 
    83 WI_EXPORT void                                  wi_version_register(void); 
    84  
    85 WI_EXPORT void                                  wi_address_initialize(void); 
    86 WI_EXPORT void                                  wi_array_initialize(void); 
    87 WI_EXPORT void                                  wi_crypto_initialize(void); 
    88 WI_EXPORT void                                  wi_data_initialize(void); 
    89 WI_EXPORT void                                  wi_date_initialize(void); 
    90 WI_EXPORT void                                  wi_enumerator_initialize(void); 
    91 WI_EXPORT void                                  wi_error_initialize(void); 
    92 WI_EXPORT void                                  wi_file_initialize(void); 
    93 WI_EXPORT void                                  wi_hash_initialize(void); 
    94 WI_EXPORT void                                  wi_host_initialize(void); 
    95 WI_EXPORT void                                  wi_lock_initialize(void); 
    96 WI_EXPORT void                                  wi_log_initialize(void); 
    97 WI_EXPORT void                                  wi_number_initialize(void); 
    98 WI_EXPORT void                                  wi_p7_message_initialize(void); 
    99 WI_EXPORT void                                  wi_p7_socket_initialize(void); 
    100 WI_EXPORT void                                  wi_p7_spec_initialize(void); 
    101 WI_EXPORT void                                  wi_pool_initialize(void); 
    102 WI_EXPORT void                                  wi_process_initialize(void); 
    103 WI_EXPORT void                                  wi_regexp_initialize(void); 
    104 WI_EXPORT void                                  wi_runtime_initialize(void); 
    105 WI_EXPORT void                                  wi_set_initialize(void); 
    106 WI_EXPORT void                                  wi_settings_initialize(void); 
    107 WI_EXPORT void                                  wi_socket_initialize(void); 
    108 WI_EXPORT void                                  wi_string_initialize(void); 
    109 WI_EXPORT void                                  wi_task_initialize(void); 
    110 WI_EXPORT void                                  wi_terminal_initialize(void); 
    111 WI_EXPORT void                                  wi_test_initialize(void); 
    112 WI_EXPORT void                                  wi_timer_initialize(void); 
    113 WI_EXPORT void                                  wi_thread_initialize(void); 
    114 WI_EXPORT void                                  wi_url_initialize(void); 
    115 WI_EXPORT void                                  wi_uuid_initialize(void); 
    116 WI_EXPORT void                                  wi_version_initialize(void); 
    117  
    118 WI_EXPORT void                                  wi_process_load(int, const char **); 
     55typedef void *                                                  wi_enumerator_func_t(wi_runtime_instance_t *, wi_enumerator_context_t *); 
    11956 
    12057 
    121 WI_EXPORT wi_string_t *                 wi_full_path(wi_string_t *); 
     58WI_EXPORT void                                                  wi_address_register(void); 
     59WI_EXPORT void                                                  wi_array_register(void); 
     60WI_EXPORT void                                                  wi_crypto_register(void); 
     61WI_EXPORT void                                                  wi_data_register(void); 
     62WI_EXPORT void                                                  wi_date_register(void); 
     63WI_EXPORT void                                                  wi_enumerator_register(void); 
     64WI_EXPORT void                                                  wi_error_register(void); 
     65WI_EXPORT void                                                  wi_file_register(void); 
     66WI_EXPORT void                                                  wi_hash_register(void); 
     67WI_EXPORT void                                                  wi_host_register(void); 
     68WI_EXPORT void                                                  wi_lock_register(void); 
     69WI_EXPORT void                                                  wi_log_register(void); 
     70WI_EXPORT void                                                  wi_number_register(void); 
     71WI_EXPORT void                                                  wi_p7_message_register(void); 
     72WI_EXPORT void                                                  wi_p7_socket_register(void); 
     73WI_EXPORT void                                                  wi_p7_spec_register(void); 
     74WI_EXPORT void                                                  wi_pool_register(void); 
     75WI_EXPORT void                                                  wi_process_register(void); 
     76WI_EXPORT void                                                  wi_regexp_register(void); 
     77WI_EXPORT void                                                  wi_runtime_register(void); 
     78WI_EXPORT void                                                  wi_set_register(void); 
     79WI_EXPORT void                                                  wi_settings_register(void); 
     80WI_EXPORT void                                                  wi_socket_register(void); 
     81WI_EXPORT void                                                  wi_string_register(void); 
     82WI_EXPORT void                                                  wi_task_register(void); 
     83WI_EXPORT void                                                  wi_terminal_register(void); 
     84WI_EXPORT void                                                  wi_test_register(void); 
     85WI_EXPORT void                                                  wi_timer_register(void); 
     86WI_EXPORT void                                                  wi_thread_register(void); 
     87WI_EXPORT void                                                  wi_url_register(void); 
     88WI_EXPORT void                                                  wi_uuid_register(void); 
     89WI_EXPORT void                                                  wi_version_register(void); 
    12290 
     91WI_EXPORT void                                                  wi_address_initialize(void); 
     92WI_EXPORT void                                                  wi_array_initialize(void); 
     93WI_EXPORT void                                                  wi_crypto_initialize(void); 
     94WI_EXPORT void                                                  wi_data_initialize(void); 
     95WI_EXPORT void                                                  wi_date_initialize(void); 
     96WI_EXPORT void                                                  wi_enumerator_initialize(void); 
     97WI_EXPORT void                                                  wi_error_initialize(void); 
     98WI_EXPORT void                                                  wi_file_initialize(void); 
     99WI_EXPORT void                                                  wi_hash_initialize(void); 
     100WI_EXPORT void                                                  wi_host_initialize(void); 
     101WI_EXPORT void                                                  wi_lock_initialize(void); 
     102WI_EXPORT void                                                  wi_log_initialize(void); 
     103WI_EXPORT void                                                  wi_number_initialize(void); 
     104WI_EXPORT void                                                  wi_p7_message_initialize(void); 
     105WI_EXPORT void                                                  wi_p7_socket_initialize(void); 
     106WI_EXPORT void                                                  wi_p7_spec_initialize(void); 
     107WI_EXPORT void                                                  wi_pool_initialize(void); 
     108WI_EXPORT void                                                  wi_process_initialize(void); 
     109WI_EXPORT void                                                  wi_regexp_initialize(void); 
     110WI_EXPORT void                                                  wi_runtime_initialize(void); 
     111WI_EXPORT void                                                  wi_set_initialize(void); 
     112WI_EXPORT void                                                  wi_settings_initialize(void); 
     113WI_EXPORT void                                                  wi_socket_initialize(void); 
     114WI_EXPORT void                                                  wi_string_initialize(void); 
     115WI_EXPORT void                                                  wi_task_initialize(void); 
     116WI_EXPORT void                                                  wi_terminal_initialize(void); 
     117WI_EXPORT void                                                  wi_test_initialize(void); 
     118WI_EXPORT void                                                  wi_timer_initialize(void); 
     119WI_EXPORT void                                                  wi_thread_initialize(void); 
     120WI_EXPORT void                                                  wi_url_initialize(void); 
     121WI_EXPORT void                                                  wi_uuid_initialize(void); 
     122WI_EXPORT void                                                  wi_version_initialize(void); 
    123123 
    124 WI_EXPORT wi_hash_code_t                wi_hash_cstring(const char *, wi_uinteger_t); 
    125 WI_EXPORT wi_hash_code_t                wi_hash_pointer(const void *); 
    126 WI_EXPORT wi_hash_code_t                wi_hash_int(int); 
    127 WI_EXPORT wi_hash_code_t                wi_hash_double(double); 
    128 WI_EXPORT wi_hash_code_t                wi_hash_data(const unsigned char *, wi_uinteger_t); 
     124WI_EXPORT void                                                  wi_process_load(int, const char **); 
    129125 
     126WI_EXPORT wi_string_t *                                 wi_full_path(wi_string_t *); 
    130127 
    131 WI_EXPORT wi_enumerator_t *             wi_enumerator_alloc(void); 
    132 WI_EXPORT wi_enumerator_t *             wi_enumerator_init_with_array(wi_enumerator_t *, wi_array_t *, wi_enumerator_func_t *); 
    133 WI_EXPORT wi_enumerator_t *             wi_enumerator_init_with_hash(wi_enumerator_t *, wi_hash_t *, wi_enumerator_func_t *); 
    134 WI_EXPORT wi_enumerator_t *             wi_enumerator_init_with_set(wi_enumerator_t *, wi_set_t *, wi_enumerator_func_t *); 
     128WI_EXPORT wi_hash_code_t                                wi_hash_cstring(const char *, wi_uinteger_t); 
     129WI_EXPORT wi_hash_code_t                                wi_hash_pointer(const void *); 
     130WI_EXPORT wi_hash_code_t                                wi_hash_int(int); 
     131WI_EXPORT wi_hash_code_t                                wi_hash_double(double); 
     132WI_EXPORT wi_hash_code_t                                wi_hash_data(const unsigned char *, wi_uinteger_t); 
    135133 
    136 WI_EXPORT void *                                wi_enumerator_array_data_enumerator(wi_runtime_instance_t *, void *); 
    137 WI_EXPORT void *                                wi_enumerator_array_reverse_data_enumerator(wi_runtime_instance_t *, void *); 
    138 WI_EXPORT void *                                wi_enumerator_hash_key_enumerator(wi_runtime_instance_t *, void *); 
    139 WI_EXPORT void *                                wi_enumerator_hash_data_enumerator(wi_runtime_instance_t *, void *); 
    140 WI_EXPORT void *                                wi_enumerator_list_data_enumerator(wi_runtime_instance_t *, void *); 
    141 WI_EXPORT void *                                wi_enumerator_set_data_enumerator(wi_runtime_instance_t *, void *); 
     134WI_EXPORT wi_enumerator_t *                             wi_enumerator_alloc(void); 
     135WI_EXPORT wi_enumerator_t *                             wi_enumerator_init_with_collection(wi_enumerator_t *, wi_runtime_instance_t *, wi_enumerator_func_t *); 
    142136 
     137WI_EXPORT void *                                                wi_enumerator_array_data_enumerator(wi_runtime_instance_t *, wi_enumerator_context_t *); 
     138WI_EXPORT void *                                                wi_enumerator_array_reverse_data_enumerator(wi_runtime_instance_t *, wi_enumerator_context_t *); 
     139WI_EXPORT void *                                                wi_enumerator_hash_key_enumerator(wi_runtime_instance_t *, wi_enumerator_context_t *); 
     140WI_EXPORT void *                                                wi_enumerator_hash_data_enumerator(wi_runtime_instance_t *, wi_enumerator_context_t *); 
     141WI_EXPORT void *                                                wi_enumerator_set_data_enumerator(wi_runtime_instance_t *, wi_enumerator_context_t *); 
    143142 
    144 WI_EXPORT void                                  wi_error_enter_thread(void); 
    145 WI_EXPORT void                                  wi_error_set_error(wi_error_domain_t, int); 
    146 WI_EXPORT void                                  wi_error_set_errno(int); 
     143WI_EXPORT void                                                 wi_error_enter_thread(void); 
     144WI_EXPORT void                                                 wi_error_set_error(wi_error_domain_t, int); 
     145WI_EXPORT void                                                 wi_error_set_errno(int); 
    147146 
    148147#if defined(WI_CRYPTO) || defined(WI_SSL) 
    149 WI_EXPORT void                                  wi_error_set_openssl_error(void); 
     148WI_EXPORT void                                                 wi_error_set_openssl_error(void); 
    150149#endif 
    151150 
    152151#ifdef WI_LIBXML2 
    153 WI_EXPORT void                                  wi_error_set_libxml2_error(void); 
     152WI_EXPORT void                                                 wi_error_set_libxml2_error(void); 
    154153#endif 
    155154 
    156 WI_EXPORT void                                  wi_error_set_regex_error(regex_t *, int); 
     155WI_EXPORT void                                                 wi_error_set_regex_error(regex_t *, int); 
    157156 
    158157#ifdef WI_ZLIB 
    159 WI_EXPORT void                                  wi_error_set_zlib_error(int); 
     158WI_EXPORT void                                                 wi_error_set_zlib_error(int); 
    160159#endif 
    161160 
    162 WI_EXPORT void                                  wi_error_set_libwired_error(int); 
    163 WI_EXPORT void                                  wi_error_set_libwired_p7_error(int, wi_string_t *, ...); 
     161WI_EXPORT void                                                 wi_error_set_libwired_error(int); 
     162WI_EXPORT void                                                 wi_error_set_libwired_p7_error(int, wi_string_t *, ...); 
    164163 
     164WI_EXPORT void                                                  wi_socket_exit_thread(void); 
    165165 
    166 WI_EXPORT void                                  wi_socket_exit_thread(void); 
    167  
    168  
    169 WI_EXPORT void                                  wi_thread_set_poolstack(wi_thread_t *, void *); 
    170 WI_EXPORT void *                                wi_thread_poolstack(wi_thread_t *); 
     166WI_EXPORT void                                                  wi_thread_set_poolstack(wi_thread_t *, void *); 
     167WI_EXPORT void *                                                wi_thread_poolstack(wi_thread_t *); 
    171168 
    172169#endif /* WI_PRIVATE_H */ 
  • libwired/trunk/libwired/collections/wi-array.c

    r5151 r5283  
    642642 
    643643wi_enumerator_t * wi_array_data_enumerator(wi_array_t *array) { 
    644         return wi_autorelease(wi_enumerator_init_with_array(wi_enumerator_alloc(), array, wi_enumerator_array_data_enumerator)); 
     644        return wi_autorelease(wi_enumerator_init_with_collection(wi_enumerator_alloc(), array, wi_enumerator_array_data_enumerator)); 
    645645} 
    646646 
     
    648648 
    649649wi_enumerator_t * wi_array_reverse_data_enumerator(wi_array_t *array) { 
    650         return wi_autorelease(wi_enumerator_init_with_array(wi_enumerator_alloc(), array, wi_enumerator_array_reverse_data_enumerator)); 
    651 } 
    652  
    653  
    654  
    655 void * wi_enumerator_array_data_enumerator(wi_runtime_instance_t *instance, void *context) { 
     650        return wi_autorelease(wi_enumerator_init_with_collection(wi_enumerator_alloc(), array, wi_enumerator_array_reverse_data_enumerator)); 
     651} 
     652 
     653 
     654 
     655void * wi_enumerator_array_data_enumerator(wi_runtime_instance_t *instance, wi_enumerator_context_t *context) { 
    656656        wi_array_t              *array = instance; 
    657         wi_uinteger_t   *index = context; 
    658657        void                    *data; 
    659658         
    660         if(*index == array->data_count) 
     659        if(context->index == array->data_count) 
    661660                return NULL; 
    662661         
    663         data = wi_array_data_at_index(array, *index); 
    664          
    665         (*index)++; 
     662        data = wi_array_data_at_index(array, context->index); 
     663         
     664        context->index++; 
    666665         
    667666        return data; 
     
    670669 
    671670 
    672 void * wi_enumerator_array_reverse_data_enumerator(wi_runtime_instance_t *instance, void *context) { 
     671void * wi_enumerator_array_reverse_data_enumerator(wi_runtime_instance_t *instance, wi_enumerator_context_t *context) { 
    673672        wi_array_t              *array = instance; 
    674         wi_uinteger_t   *index = context; 
    675673        void                    *data; 
    676674         
    677         if(*index == array->data_count) 
     675        if(context->index == array->data_count) 
    678676                return NULL; 
    679677         
    680         data = wi_array_data_at_index(array, array->data_count - *index - 1); 
    681          
    682         (*index)++; 
     678        data = wi_array_data_at_index(array, array->data_count - context->index - 1); 
     679         
     680        context->index++; 
    683681         
    684682        return data; 
  • libwired/trunk/libwired/collections/wi-enumerator.c

    r4623 r5283  
    4242#include <wired/wi-string.h> 
    4343 
    44 enum _wi_enumerator_type { 
    45         _WI_ENUMERATOR_ARRAY, 
    46         _WI_ENUMERATOR_HASH, 
    47         _WI_ENUMERATOR_LIST, 
    48         _WI_ENUMERATOR_SET 
    49 }; 
    50 typedef enum _wi_enumerator_type                _wi_enumerator_type_t; 
    51  
    52  
    53 union _wi_enumerator_context { 
    54         wi_uinteger_t                                           array; 
    55         void                                                            *hash; 
    56         void                                                            *list; 
    57         void                                                            *set; 
    58 }; 
    59 typedef union _wi_enumerator_context    _wi_enumerator_context_t; 
    60  
    61  
    6244struct _wi_enumerator { 
    6345        wi_runtime_base_t                                       base; 
    6446         
    65         _wi_enumerator_type_t                           type; 
    66          
    6747        wi_runtime_instance_t                           *collection; 
    6848        wi_enumerator_func_t                            *func; 
    69          
    70         _wi_enumerator_context_t                        context; 
     49        wi_enumerator_context_t                         context; 
    7150}; 
    7251 
     
    11493 
    11594 
    116 static wi_enumerator_t * _wi_enumerator_init_with_collection(wi_enumerator_t *enumerator, wi_runtime_instance_t *collection, void *func) { 
     95wi_enumerator_t * wi_enumerator_init_with_collection(wi_enumerator_t *enumerator, wi_runtime_instance_t *collection, wi_enumerator_func_t *func) { 
    11796        enumerator->collection  = wi_retain(collection); 
    11897        enumerator->func                = func; 
    119          
    120         return enumerator; 
    121 } 
    122  
    123  
    124  
    125 wi_enumerator_t * wi_enumerator_init_with_array(wi_enumerator_t *enumerator, wi_array_t *array, wi_enumerator_func_t *func) { 
    126         enumerator                      = _wi_enumerator_init_with_collection(enumerator, array, func); 
    127         enumerator->type        = _WI_ENUMERATOR_ARRAY; 
    128          
    129         return enumerator; 
    130 } 
    131  
    132  
    133  
    134 wi_enumerator_t * wi_enumerator_init_with_hash(wi_enumerator_t *enumerator, wi_hash_t *hash, wi_enumerator_func_t *func) { 
    135         enumerator                      = _wi_enumerator_init_with_collection(enumerator, hash, func); 
    136         enumerator->type        = _WI_ENUMERATOR_HASH; 
    137          
    138         return enumerator; 
    139 } 
    140  
    141  
    142  
    143 wi_enumerator_t * wi_enumerator_init_with_set(wi_enumerator_t *enumerator, wi_set_t *set, wi_enumerator_func_t *func) { 
    144         enumerator                      = _wi_enumerator_init_with_collection(enumerator, set, func); 
    145         enumerator->type        = _WI_ENUMERATOR_SET; 
    14698         
    14799        return enumerator; 
     
    172124 
    173125void * wi_enumerator_next_data(wi_enumerator_t *enumerator) { 
    174         void            *context; 
    175          
    176         switch(enumerator->type) { 
    177                 case _WI_ENUMERATOR_ARRAY: 
    178                         context = &enumerator->context.array; 
    179                         break; 
    180                          
    181                 case _WI_ENUMERATOR_HASH: 
    182                         context = &enumerator->context.hash; 
    183                         break; 
    184                          
    185                 case _WI_ENUMERATOR_LIST: 
    186                         context = &enumerator->context.list; 
    187                         break; 
    188                          
    189                 case _WI_ENUMERATOR_SET: 
    190                         context = &enumerator->context.set; 
    191                         break; 
    192                  
    193                 default: 
    194                         return NULL; 
    195                         break; 
    196         } 
    197          
    198         return (*enumerator->func)(enumerator->collection, context); 
     126        return (*enumerator->func)(enumerator->collection, &enumerator->context); 
    199127} 
  • libwired/trunk/libwired/collections/wi-hash.c

    r5229 r5283  
    126126 
    127127 
    128 struct _wi_hash_cursor { 
    129         wi_uinteger_t                                           index; 
    130         _wi_hash_bucket_t                                       *bucket; 
    131 }; 
    132 typedef struct _wi_hash_cursor                  _wi_hash_cursor_t; 
    133  
    134  
    135128static void                                                             _wi_hash_dealloc(wi_runtime_instance_t *); 
    136129static wi_runtime_instance_t *                  _wi_hash_copy(wi_runtime_instance_t *); 
     
    139132static wi_hash_code_t                                   _wi_hash_hash(wi_runtime_instance_t *); 
    140133 
    141 static _wi_hash_bucket_t *                              _wi_enumerator_hash_enumerator(wi_runtime_instance_t *, void *); 
     134static _wi_hash_bucket_t *                              _wi_enumerator_hash_enumerator(wi_runtime_instance_t *, wi_enumerator_context_t *); 
    142135 
    143136static void                                                             _wi_hash_resize(wi_hash_t *); 
     
    530523 
    531524wi_enumerator_t * wi_hash_key_enumerator(wi_hash_t *hash) { 
    532         return wi_autorelease(wi_enumerator_init_with_hash(wi_enumerator_alloc(), hash, wi_enumerator_hash_key_enumerator)); 
     525        return wi_autorelease(wi_enumerator_init_with_collection(wi_enumerator_alloc(), hash, wi_enumerator_hash_key_enumerator)); 
    533526} 
    534527 
     
    536529 
    537530wi_enumerator_t * wi_hash_data_enumerator(wi_hash_t *hash) { 
    538         return wi_autorelease(wi_enumerator_init_with_hash(wi_enumerator_alloc(), hash, wi_enumerator_hash_data_enumerator)); 
    539 } 
    540  
    541  
    542  
    543 static _wi_hash_bucket_t * _wi_enumerator_hash_enumerator(wi_runtime_instance_t *instance, void *context) { 
     531        return wi_autorelease(wi_enumerator_init_with_collection(wi_enumerator_alloc(), hash, wi_enumerator_hash_data_enumerator)); 
     532} 
     533 
     534 
     535 
     536static _wi_hash_bucket_t * _wi_enumerator_hash_enumerator(wi_runtime_instance_t *instance, wi_enumerator_context_t *context) { 
    544537        wi_hash_t                               *hash = instance; 
    545         _wi_hash_cursor_t               *cursor = context; 
    546538        _wi_hash_bucket_t               *bucket; 
    547539         
    548         while(cursor->index < hash->buckets_count) { 
    549                 bucket = cursor->bucket; 
     540        while(context->index < hash->buckets_count) { 
     541                bucket = context->bucket; 
    550542                 
    551543                if(bucket) { 
    552544                        if(bucket->next) { 
    553545                                bucket = bucket->next; 
    554                                 cursor->bucket = bucket; 
     546                                context->bucket = bucket; 
    555547                                 
    556548                                return bucket; 
    557549                        } else { 
    558                                 cursor->bucket = NULL; 
    559                                 cursor->index++; 
     550                                context->bucket = NULL; 
     551                                context->index++; 
    560552                        } 
    561553                } 
    562554                 
    563                 bucket = hash->buckets[cursor->index]; 
     555                bucket = hash->buckets[context->index]; 
    564556                 
    565557                if(bucket) { 
    566                         cursor->bucket = bucket; 
     558                        context->bucket = bucket; 
    567559                         
    568560                        return bucket; 
    569561                } else { 
    570                         cursor->index++; 
     562                        context->index++; 
    571563                } 
    572564        } 
     
    577569 
    578570 
    579 void * wi_enumerator_hash_key_enumerator(wi_runtime_instance_t *instance, void *context) { 
     571void * wi_enumerator_hash_key_enumerator(wi_runtime_instance_t *instance, wi_enumerator_context_t *context) { 
    580572        _wi_hash_bucket_t               *bucket; 
    581573         
     
    590582 
    591583 
    592 void * wi_enumerator_hash_data_enumerator(wi_runtime_instance_t *instance, void *context) { 
     584void * wi_enumerator_hash_data_enumerator(wi_runtime_instance_t *instance, wi_enumerator_context_t *context) { 
    593585        _wi_hash_bucket_t               *bucket; 
    594586         
  • libwired/trunk/libwired/collections/wi-set.c

    r4800 r5283  
    108108 
    109109 
    110 struct _wi_set_cursor { 
    111         wi_uinteger_t                                           index; 
    112         _wi_set_bucket_t                                        *bucket; 
    113 }; 
    114 typedef struct _wi_set_cursor                   _wi_set_cursor_t; 
    115  
    116  
    117110static void                                                             _wi_set_dealloc(wi_runtime_instance_t *); 
    118111static wi_runtime_instance_t *                  _wi_set_copy(wi_runtime_instance_t *); 
     
    384377 
    385378wi_enumerator_t * wi_set_data_enumerator(wi_set_t *set) { 
    386         return wi_autorelease(wi_enumerator_init_with_set(wi_enumerator_alloc(), set, wi_enumerator_set_data_enumerator)); 
    387 } 
    388  
    389  
    390  
    391 void * wi_enumerator_set_data_enumerator(wi_runtime_instance_t *instance, void *context) { 
     379        return wi_autorelease(wi_enumerator_init_with_collection(wi_enumerator_alloc(), set, wi_enumerator_set_data_enumerator)); 
     380} 
     381 
     382 
     383 
     384void * wi_enumerator_set_data_enumerator(wi_runtime_instance_t *instance, wi_enumerator_context_t *context) { 
    392385        wi_set_t                                *set = instance; 
    393         _wi_set_cursor_t                *cursor = context; 
    394386        _wi_set_bucket_t                *bucket; 
    395387         
    396         while(cursor->index < set->buckets_count) { 
    397                 bucket = cursor->bucket; 
     388        while(context->index < set->buckets_count) { 
     389                bucket = context->bucket; 
    398390                 
    399391                if(bucket) { 
    400392                        if(bucket->next) { 
    401393                                bucket = bucket->next; 
    402                                 cursor->bucket = bucket; 
     394                                context->bucket = bucket; 
    403395                                 
    404396                                return bucket->data; 
    405397                        } else { 
    406                                 cursor->index++; 
     398                                context->index++; 
    407399                        } 
    408400                } 
    409401                 
    410                 bucket = set->buckets[cursor->index]; 
     402                bucket = set->buckets[context->index]; 
    411403                 
    412404                if(bucket) { 
    413                         cursor->bucket = bucket; 
     405                        context->bucket = bucket; 
    414406                         
    415407                        return bucket->data; 
    416408                } else { 
    417                         cursor->index++; 
     409                        context->index++; 
    418410                } 
    419411        }