Changeset 5283
- Timestamp:
- 02/19/08 12:50:25 (11 months ago)
- Files:
-
- libwired/trunk/libwired/base/wi-private.h (modified) (2 diffs)
- libwired/trunk/libwired/collections/wi-array.c (modified) (3 diffs)
- libwired/trunk/libwired/collections/wi-enumerator.c (modified) (3 diffs)
- libwired/trunk/libwired/collections/wi-hash.c (modified) (6 diffs)
- libwired/trunk/libwired/collections/wi-set.c (modified) (2 diffs)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
libwired/trunk/libwired/base/wi-private.h
r5265 r5283 40 40 #include <wired/wi-thread.h> 41 41 42 #define WI_RUNTIME_MAGIC 0xAC1DFEED42 #define WI_RUNTIME_MAGIC 0xAC1DFEED 43 43 44 44 #define WI_RUNTIME_BASE(instance) \ … … 46 46 47 47 48 49 typedef void * wi_enumerator_func_t(wi_runtime_instance_t *, void *); 48 struct _wi_enumerator_context { 49 wi_uinteger_t index; 50 void *bucket; 51 }; 52 typedef struct _wi_enumerator_context wi_enumerator_context_t; 50 53 51 54 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 **); 55 typedef void * wi_enumerator_func_t(wi_runtime_instance_t *, wi_enumerator_context_t *); 119 56 120 57 121 WI_EXPORT wi_string_t * wi_full_path(wi_string_t *); 58 WI_EXPORT void wi_address_register(void); 59 WI_EXPORT void wi_array_register(void); 60 WI_EXPORT void wi_crypto_register(void); 61 WI_EXPORT void wi_data_register(void); 62 WI_EXPORT void wi_date_register(void); 63 WI_EXPORT void wi_enumerator_register(void); 64 WI_EXPORT void wi_error_register(void); 65 WI_EXPORT void wi_file_register(void); 66 WI_EXPORT void wi_hash_register(void); 67 WI_EXPORT void wi_host_register(void); 68 WI_EXPORT void wi_lock_register(void); 69 WI_EXPORT void wi_log_register(void); 70 WI_EXPORT void wi_number_register(void); 71 WI_EXPORT void wi_p7_message_register(void); 72 WI_EXPORT void wi_p7_socket_register(void); 73 WI_EXPORT void wi_p7_spec_register(void); 74 WI_EXPORT void wi_pool_register(void); 75 WI_EXPORT void wi_process_register(void); 76 WI_EXPORT void wi_regexp_register(void); 77 WI_EXPORT void wi_runtime_register(void); 78 WI_EXPORT void wi_set_register(void); 79 WI_EXPORT void wi_settings_register(void); 80 WI_EXPORT void wi_socket_register(void); 81 WI_EXPORT void wi_string_register(void); 82 WI_EXPORT void wi_task_register(void); 83 WI_EXPORT void wi_terminal_register(void); 84 WI_EXPORT void wi_test_register(void); 85 WI_EXPORT void wi_timer_register(void); 86 WI_EXPORT void wi_thread_register(void); 87 WI_EXPORT void wi_url_register(void); 88 WI_EXPORT void wi_uuid_register(void); 89 WI_EXPORT void wi_version_register(void); 122 90 91 WI_EXPORT void wi_address_initialize(void); 92 WI_EXPORT void wi_array_initialize(void); 93 WI_EXPORT void wi_crypto_initialize(void); 94 WI_EXPORT void wi_data_initialize(void); 95 WI_EXPORT void wi_date_initialize(void); 96 WI_EXPORT void wi_enumerator_initialize(void); 97 WI_EXPORT void wi_error_initialize(void); 98 WI_EXPORT void wi_file_initialize(void); 99 WI_EXPORT void wi_hash_initialize(void); 100 WI_EXPORT void wi_host_initialize(void); 101 WI_EXPORT void wi_lock_initialize(void); 102 WI_EXPORT void wi_log_initialize(void); 103 WI_EXPORT void wi_number_initialize(void); 104 WI_EXPORT void wi_p7_message_initialize(void); 105 WI_EXPORT void wi_p7_socket_initialize(void); 106 WI_EXPORT void wi_p7_spec_initialize(void); 107 WI_EXPORT void wi_pool_initialize(void); 108 WI_EXPORT void wi_process_initialize(void); 109 WI_EXPORT void wi_regexp_initialize(void); 110 WI_EXPORT void wi_runtime_initialize(void); 111 WI_EXPORT void wi_set_initialize(void); 112 WI_EXPORT void wi_settings_initialize(void); 113 WI_EXPORT void wi_socket_initialize(void); 114 WI_EXPORT void wi_string_initialize(void); 115 WI_EXPORT void wi_task_initialize(void); 116 WI_EXPORT void wi_terminal_initialize(void); 117 WI_EXPORT void wi_test_initialize(void); 118 WI_EXPORT void wi_timer_initialize(void); 119 WI_EXPORT void wi_thread_initialize(void); 120 WI_EXPORT void wi_url_initialize(void); 121 WI_EXPORT void wi_uuid_initialize(void); 122 WI_EXPORT void wi_version_initialize(void); 123 123 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); 124 WI_EXPORT void wi_process_load(int, const char **); 129 125 126 WI_EXPORT wi_string_t * wi_full_path(wi_string_t *); 130 127 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 *); 128 WI_EXPORT wi_hash_code_t wi_hash_cstring(const char *, wi_uinteger_t); 129 WI_EXPORT wi_hash_code_t wi_hash_pointer(const void *); 130 WI_EXPORT wi_hash_code_t wi_hash_int(int); 131 WI_EXPORT wi_hash_code_t wi_hash_double(double); 132 WI_EXPORT wi_hash_code_t wi_hash_data(const unsigned char *, wi_uinteger_t); 135 133 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 *); 134 WI_EXPORT wi_enumerator_t * wi_enumerator_alloc(void); 135 WI_EXPORT wi_enumerator_t * wi_enumerator_init_with_collection(wi_enumerator_t *, wi_runtime_instance_t *, wi_enumerator_func_t *); 142 136 137 WI_EXPORT void * wi_enumerator_array_data_enumerator(wi_runtime_instance_t *, wi_enumerator_context_t *); 138 WI_EXPORT void * wi_enumerator_array_reverse_data_enumerator(wi_runtime_instance_t *, wi_enumerator_context_t *); 139 WI_EXPORT void * wi_enumerator_hash_key_enumerator(wi_runtime_instance_t *, wi_enumerator_context_t *); 140 WI_EXPORT void * wi_enumerator_hash_data_enumerator(wi_runtime_instance_t *, wi_enumerator_context_t *); 141 WI_EXPORT void * wi_enumerator_set_data_enumerator(wi_runtime_instance_t *, wi_enumerator_context_t *); 143 142 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);143 WI_EXPORT void wi_error_enter_thread(void); 144 WI_EXPORT void wi_error_set_error(wi_error_domain_t, int); 145 WI_EXPORT void wi_error_set_errno(int); 147 146 148 147 #if defined(WI_CRYPTO) || defined(WI_SSL) 149 WI_EXPORT void wi_error_set_openssl_error(void);148 WI_EXPORT void wi_error_set_openssl_error(void); 150 149 #endif 151 150 152 151 #ifdef WI_LIBXML2 153 WI_EXPORT void wi_error_set_libxml2_error(void);152 WI_EXPORT void wi_error_set_libxml2_error(void); 154 153 #endif 155 154 156 WI_EXPORT void wi_error_set_regex_error(regex_t *, int);155 WI_EXPORT void wi_error_set_regex_error(regex_t *, int); 157 156 158 157 #ifdef WI_ZLIB 159 WI_EXPORT void wi_error_set_zlib_error(int);158 WI_EXPORT void wi_error_set_zlib_error(int); 160 159 #endif 161 160 162 WI_EXPORT void wi_error_set_libwired_error(int);163 WI_EXPORT void wi_error_set_libwired_p7_error(int, wi_string_t *, ...);161 WI_EXPORT void wi_error_set_libwired_error(int); 162 WI_EXPORT void wi_error_set_libwired_p7_error(int, wi_string_t *, ...); 164 163 164 WI_EXPORT void wi_socket_exit_thread(void); 165 165 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 *); 166 WI_EXPORT void wi_thread_set_poolstack(wi_thread_t *, void *); 167 WI_EXPORT void * wi_thread_poolstack(wi_thread_t *); 171 168 172 169 #endif /* WI_PRIVATE_H */ libwired/trunk/libwired/collections/wi-array.c
r5151 r5283 642 642 643 643 wi_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)); 645 645 } 646 646 … … 648 648 649 649 wi_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 655 void * wi_enumerator_array_data_enumerator(wi_runtime_instance_t *instance, wi_enumerator_context_t *context) { 656 656 wi_array_t *array = instance; 657 wi_uinteger_t *index = context;658 657 void *data; 659 658 660 if( *index == array->data_count)659 if(context->index == array->data_count) 661 660 return NULL; 662 661 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++; 666 665 667 666 return data; … … 670 669 671 670 672 void * wi_enumerator_array_reverse_data_enumerator(wi_runtime_instance_t *instance, void*context) {671 void * wi_enumerator_array_reverse_data_enumerator(wi_runtime_instance_t *instance, wi_enumerator_context_t *context) { 673 672 wi_array_t *array = instance; 674 wi_uinteger_t *index = context;675 673 void *data; 676 674 677 if( *index == array->data_count)675 if(context->index == array->data_count) 678 676 return NULL; 679 677 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++; 683 681 684 682 return data; libwired/trunk/libwired/collections/wi-enumerator.c
r4623 r5283 42 42 #include <wired/wi-string.h> 43 43 44 enum _wi_enumerator_type {45 _WI_ENUMERATOR_ARRAY,46 _WI_ENUMERATOR_HASH,47 _WI_ENUMERATOR_LIST,48 _WI_ENUMERATOR_SET49 };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 62 44 struct _wi_enumerator { 63 45 wi_runtime_base_t base; 64 46 65 _wi_enumerator_type_t type;66 67 47 wi_runtime_instance_t *collection; 68 48 wi_enumerator_func_t *func; 69 70 _wi_enumerator_context_t context; 49 wi_enumerator_context_t context; 71 50 }; 72 51 … … 114 93 115 94 116 static wi_enumerator_t * _wi_enumerator_init_with_collection(wi_enumerator_t *enumerator, wi_runtime_instance_t *collection, void*func) {95 wi_enumerator_t * wi_enumerator_init_with_collection(wi_enumerator_t *enumerator, wi_runtime_instance_t *collection, wi_enumerator_func_t *func) { 117 96 enumerator->collection = wi_retain(collection); 118 97 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;146 98 147 99 return enumerator; … … 172 124 173 125 void * 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); 199 127 } libwired/trunk/libwired/collections/wi-hash.c
r5229 r5283 126 126 127 127 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 135 128 static void _wi_hash_dealloc(wi_runtime_instance_t *); 136 129 static wi_runtime_instance_t * _wi_hash_copy(wi_runtime_instance_t *); … … 139 132 static wi_hash_code_t _wi_hash_hash(wi_runtime_instance_t *); 140 133 141 static _wi_hash_bucket_t * _wi_enumerator_hash_enumerator(wi_runtime_instance_t *, void*);134 static _wi_hash_bucket_t * _wi_enumerator_hash_enumerator(wi_runtime_instance_t *, wi_enumerator_context_t *); 142 135 143 136 static void _wi_hash_resize(wi_hash_t *); … … 530 523 531 524 wi_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)); 533 526 } 534 527 … … 536 529 537 530 wi_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 536 static _wi_hash_bucket_t * _wi_enumerator_hash_enumerator(wi_runtime_instance_t *instance, wi_enumerator_context_t *context) { 544 537 wi_hash_t *hash = instance; 545 _wi_hash_cursor_t *cursor = context;546 538 _wi_hash_bucket_t *bucket; 547 539 548 while(c ursor->index < hash->buckets_count) {549 bucket = c ursor->bucket;540 while(context->index < hash->buckets_count) { 541 bucket = context->bucket; 550 542 551 543 if(bucket) { 552 544 if(bucket->next) { 553 545 bucket = bucket->next; 554 c ursor->bucket = bucket;546 context->bucket = bucket; 555 547 556 548 return bucket; 557 549 } else { 558 c ursor->bucket = NULL;559 c ursor->index++;550 context->bucket = NULL; 551 context->index++; 560 552 } 561 553 } 562 554 563 bucket = hash->buckets[c ursor->index];555 bucket = hash->buckets[context->index]; 564 556 565 557 if(bucket) { 566 c ursor->bucket = bucket;558 context->bucket = bucket; 567 559 568 560 return bucket; 569 561 } else { 570 c ursor->index++;562 context->index++; 571 563 } 572 564 } … … 577 569 578 570 579 void * wi_enumerator_hash_key_enumerator(wi_runtime_instance_t *instance, void*context) {571 void * wi_enumerator_hash_key_enumerator(wi_runtime_instance_t *instance, wi_enumerator_context_t *context) { 580 572 _wi_hash_bucket_t *bucket; 581 573 … … 590 582 591 583 592 void * wi_enumerator_hash_data_enumerator(wi_runtime_instance_t *instance, void*context) {584 void * wi_enumerator_hash_data_enumerator(wi_runtime_instance_t *instance, wi_enumerator_context_t *context) { 593 585 _wi_hash_bucket_t *bucket; 594 586 libwired/trunk/libwired/collections/wi-set.c
r4800 r5283 108 108 109 109 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 117 110 static void _wi_set_dealloc(wi_runtime_instance_t *); 118 111 static wi_runtime_instance_t * _wi_set_copy(wi_runtime_instance_t *); … … 384 377 385 378 wi_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 384 void * wi_enumerator_set_data_enumerator(wi_runtime_instance_t *instance, wi_enumerator_context_t *context) { 392 385 wi_set_t *set = instance; 393 _wi_set_cursor_t *cursor = context;394 386 _wi_set_bucket_t *bucket; 395 387 396 while(c ursor->index < set->buckets_count) {397 bucket = c ursor->bucket;388 while(context->index < set->buckets_count) { 389 bucket = context->bucket; 398 390 399 391 if(bucket) { 400 392 if(bucket->next) { 401 393 bucket = bucket->next; 402 c ursor->bucket = bucket;394 context->bucket = bucket; 403 395 404 396 return bucket->data; 405 397 } else { 406 c ursor->index++;398 context->index++; 407 399 } 408 400 } 409 401 410 bucket = set->buckets[c ursor->index];402 bucket = set->buckets[context->index]; 411 403 412 404 if(bucket) { 413 c ursor->bucket = bucket;405 context->bucket = bucket; 414 406 415 407 return bucket->data; 416 408 } else { 417 c ursor->index++;409 context->index++; 418 410 } 419 411 }
