Changeset 4485
- Timestamp:
- 02/05/07 17:44:17 (2 years ago)
- Files:
-
- libwired/trunk/libwired/base/wi-base.c (modified) (2 diffs)
- libwired/trunk/libwired/base/wi-runtime.h (modified) (1 diff)
- libwired/trunk/libwired/collections/wi-array.c (modified) (3 diffs)
- libwired/trunk/libwired/collections/wi-hash.c (modified) (3 diffs)
- libwired/trunk/libwired/collections/wi-set.c (modified) (3 diffs)
- libwired/trunk/libwired/data/wi-data.c (modified) (3 diffs)
- libwired/trunk/libwired/data/wi-uuid.c (modified) (2 diffs)
- libwired/trunk/libwired/net/wi-address.c (modified) (4 diffs)
- libwired/trunk/libwired/net/wi-host.c (modified) (3 diffs)
- libwired/trunk/libwired/private/wi-private.h (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
libwired/trunk/libwired/base/wi-base.c
r4437 r4485 190 190 191 191 wi_hash_code_t wi_hash_pointer(const void *p) { 192 #if defined(__x86_64__) || defined(__ppc64__) || defined(__sparc64__)192 #ifdef __LP64__ 193 193 return (wi_hash_code_t) ((((uint64_t) p) >> 32) ^ ((uint64_t) p)); 194 194 #else … … 212 212 return (wi_hash_code_t) fmod(i, (double) 0xFFFFFFFF) + ((d - i) * 0xFFFFFFFF); 213 213 } 214 215 216 217 #define _WI_ELF_STEP(byte, hash) \ 218 WI_STMT_START \ 219 (hash) = ((hash) << 4) + (byte); \ 220 (hash) ^= ((hash) >> 24) & 0xF0; \ 221 WI_STMT_END 222 223 224 225 wi_hash_code_t wi_hash_data(unsigned char *bytes, wi_uinteger_t length) { 226 wi_hash_code_t hash = 0; 227 wi_uinteger_t i; 228 229 i = length; 230 231 while(i > 3) { 232 _WI_ELF_STEP(bytes[length - i ], hash); 233 _WI_ELF_STEP(bytes[length - i + 1], hash); 234 _WI_ELF_STEP(bytes[length - i + 2], hash); 235 _WI_ELF_STEP(bytes[length - i + 3], hash); 236 i -= 4; 237 } 238 239 switch (i) { 240 case 3: _WI_ELF_STEP(bytes[length - 3], hash); 241 case 2: _WI_ELF_STEP(bytes[length - 2], hash); 242 case 1: _WI_ELF_STEP(bytes[length - 1], hash); 243 } 244 245 return hash; 246 } libwired/trunk/libwired/base/wi-runtime.h
r4437 r4485 43 43 typedef wi_runtime_instance_t * wi_copy_func_t(wi_runtime_instance_t *); 44 44 typedef wi_boolean_t wi_is_equal_func_t(wi_runtime_instance_t *, wi_runtime_instance_t *); 45 typedef wi_string_t * wi_description_func_t(wi_runtime_instance_t *); 45 46 typedef wi_hash_code_t wi_hash_func_t(wi_runtime_instance_t *); 46 typedef wi_string_t * wi_description_func_t(wi_runtime_instance_t *);47 47 48 48 typedef wi_runtime_instance_t * wi_retain_func_t(wi_runtime_instance_t *); libwired/trunk/libwired/collections/wi-array.c
r4437 r4485 112 112 static wi_boolean_t _wi_array_is_equal(wi_runtime_instance_t *, wi_runtime_instance_t *); 113 113 static wi_string_t * _wi_array_description(wi_runtime_instance_t *); 114 static wi_hash_code_t _wi_array_hash(wi_runtime_instance_t *); 114 115 115 116 static void _wi_array_grow(wi_array_t *, wi_uinteger_t); … … 149 150 _wi_array_is_equal, 150 151 _wi_array_description, 151 NULL152 _wi_array_hash 152 153 }; 153 154 … … 435 436 436 437 438 static wi_hash_code_t _wi_array_hash(wi_runtime_instance_t *instance) { 439 wi_array_t *array = instance; 440 441 return array->data_count; 442 } 443 444 445 437 446 #pragma mark - 438 447 libwired/trunk/libwired/collections/wi-hash.c
r4437 r4485 138 138 static wi_boolean_t _wi_hash_is_equal(wi_runtime_instance_t *, wi_runtime_instance_t *); 139 139 static wi_string_t * _wi_hash_description(wi_runtime_instance_t *); 140 static wi_hash_code_t _wi_hash_hash(wi_runtime_instance_t *); 140 141 141 142 static _wi_hash_bucket_t * _wi_enumerator_hash_enumerator(wi_runtime_instance_t *, void *); … … 182 183 _wi_hash_is_equal, 183 184 _wi_hash_description, 184 NULL185 _wi_hash_hash 185 186 }; 186 187 … … 356 357 } 357 358 359 360 361 static wi_hash_code_t _wi_hash_hash(wi_runtime_instance_t *instance) { 362 wi_hash_t *hash = instance; 363 364 return hash->key_count; 365 } 358 366 359 367 libwired/trunk/libwired/collections/wi-set.c
r4473 r4485 120 120 static wi_boolean_t _wi_set_is_equal(wi_runtime_instance_t *, wi_runtime_instance_t *); 121 121 static wi_string_t * _wi_set_description(wi_runtime_instance_t *); 122 static wi_hash_code_t _wi_set_hash(wi_runtime_instance_t *); 122 123 123 124 static void _wi_set_resize(wi_set_t *); … … 145 146 _wi_set_is_equal, 146 147 _wi_set_description, 147 NULL148 _wi_set_hash 148 149 }; 149 150 … … 313 314 } 314 315 316 317 318 static wi_hash_code_t _wi_set_hash(wi_runtime_instance_t *instance) { 319 wi_set_t *set = instance; 320 321 return set->data_count; 322 } 315 323 316 324 libwired/trunk/libwired/data/wi-data.c
r4437 r4485 56 56 static wi_runtime_instance_t * _wi_data_copy(wi_runtime_instance_t *); 57 57 static wi_boolean_t _wi_data_is_equal(wi_runtime_instance_t *, wi_runtime_instance_t *); 58 static wi_string_t * _wi_data_description(wi_runtime_instance_t *); 58 59 static wi_hash_code_t _wi_data_hash(wi_runtime_instance_t *); 59 static wi_string_t * _wi_data_description(wi_runtime_instance_t *);60 60 61 61 … … 245 245 246 246 247 static wi_hash_code_t _wi_data_hash(wi_runtime_instance_t *instance) {248 wi_data_t *data = instance;249 250 return wi_hash_pointer(data);251 }252 253 254 255 247 static wi_string_t * _wi_data_description(wi_runtime_instance_t *instance) { 256 248 wi_data_t *data = instance; … … 270 262 271 263 return description; 264 } 265 266 267 268 static wi_hash_code_t _wi_data_hash(wi_runtime_instance_t *instance) { 269 wi_data_t *data = instance; 270 271 return wi_hash_data(data->bytes, data->length); 272 272 } 273 273 libwired/trunk/libwired/data/wi-uuid.c
r4437 r4485 353 353 354 354 355 static wi_hash_code_t _wi_uuid_hash(wi_runtime_instance_t *instance) {356 wi_uuid_t *uuid = instance;357 358 return wi_hash(_wi_uuid_string(uuid));359 }360 361 362 363 355 static wi_string_t * _wi_uuid_description(wi_runtime_instance_t *instance) { 364 356 wi_uuid_t *uuid = instance; … … 368 360 uuid, 369 361 _wi_uuid_string(uuid)); 362 } 363 364 365 366 static wi_hash_code_t _wi_uuid_hash(wi_runtime_instance_t *instance) { 367 wi_uuid_t *uuid = instance; 368 369 return wi_hash(_wi_uuid_string(uuid)); 370 370 } 371 371 libwired/trunk/libwired/net/wi-address.c
r4437 r4485 85 85 86 86 static wi_runtime_instance_t * _wi_address_copy(wi_runtime_instance_t *); 87 static wi_boolean_t _wi_address_is_equal(wi_runtime_instance_t *, wi_runtime_instance_t *); 87 88 static wi_string_t * _wi_address_description(wi_runtime_instance_t *); 88 static wi_ boolean_t _wi_address_is_equal(wi_runtime_instance_t *,wi_runtime_instance_t *);89 static wi_hash_code_t _wi_address_hash(wi_runtime_instance_t *); 89 90 90 91 … … 96 97 _wi_address_is_equal, 97 98 _wi_address_description, 98 NULL99 _wi_address_hash 99 100 }; 100 101 … … 187 188 188 189 190 static wi_boolean_t _wi_address_is_equal(wi_runtime_instance_t *instance1, wi_runtime_instance_t *instance2) { 191 wi_address_t *address1 = instance1; 192 wi_address_t *address2 = instance2; 193 194 return wi_is_equal(wi_address_string(address1), wi_address_string(address2)); 195 } 196 197 198 189 199 static wi_string_t * _wi_address_description(wi_runtime_instance_t *instance) { 190 200 wi_address_t *address = instance; … … 216 226 217 227 218 static wi_boolean_t _wi_address_is_equal(wi_runtime_instance_t *instance1, wi_runtime_instance_t *instance2) { 219 wi_address_t *address1 = instance1; 220 wi_address_t *address2 = instance2; 221 222 return wi_is_equal(wi_address_string(address1), wi_address_string(address2)); 228 static wi_hash_code_t _wi_address_hash(wi_runtime_instance_t *instance) { 229 wi_address_t *address = instance; 230 231 return wi_hash(wi_address_string(address)); 223 232 } 224 233 libwired/trunk/libwired/net/wi-host.c
r4437 r4485 65 65 static wi_boolean_t _wi_host_is_equal(wi_runtime_instance_t *, wi_runtime_instance_t *); 66 66 static wi_string_t * _wi_host_description(wi_runtime_instance_t *); 67 static wi_hash_code_t _wi_host_hash(wi_runtime_instance_t *); 67 68 68 69 static wi_array_t * _wi_host_all_interface_addresses(void); … … 77 78 _wi_host_is_equal, 78 79 _wi_host_description, 79 NULL80 _wi_host_hash 80 81 }; 81 82 … … 199 200 200 201 202 static wi_hash_code_t _wi_host_hash(wi_runtime_instance_t *instance) { 203 wi_host_t *host = instance; 204 205 return wi_hash(wi_host_addresses(host)); 206 } 207 208 209 201 210 #pragma mark - 202 211 libwired/trunk/libwired/private/wi-private.h
r4437 r4485 106 106 WI_EXPORT wi_hash_code_t wi_hash_int(int); 107 107 WI_EXPORT wi_hash_code_t wi_hash_double(double); 108 WI_EXPORT wi_hash_code_t wi_hash_data(unsigned char *, wi_uinteger_t); 108 109 109 110
