ucx/map.c

changeset 69
fb59270b1de3
parent 67
27e67e725d35
child 70
6721482eaf8e
equal deleted inserted replaced
68:88dbea299440 69:fb59270b1de3
175 175
176 UcxKey ucx_key(void *data, size_t len) { 176 UcxKey ucx_key(void *data, size_t len) {
177 UcxKey key; 177 UcxKey key;
178 key.data = data; 178 key.data = data;
179 key.len = len; 179 key.len = len;
180 key.hash = ucx_hash(data, len); 180 key.hash = ucx_hash((const char*) data, len);
181 return key; 181 return key;
182 } 182 }
183 183
184 184
185 int ucx_hash(const char *data, size_t len) { 185 int ucx_hash(const char *data, size_t len) {
279 continue; 279 continue;
280 } 280 }
281 281
282 /* read into key buffer */ 282 /* read into key buffer */
283 n = 16; 283 n = 16;
284 key = malloc(n); 284 key = (char*) malloc(n);
285 r = 0; 285 r = 0;
286 do { 286 do {
287 if (c == '=') break; 287 if (c == '=') break;
288 if (r > n - 2) { 288 if (r > n - 2) {
289 n *= 2; 289 n *= 2;
290 key = realloc(key, n); 290 key = (char*) realloc(key, n);
291 } 291 }
292 key[r] = c; 292 key[r] = c;
293 r++; 293 r++;
294 } while ((c = fgetc(f)) > 0); 294 } while ((c = fgetc(f)) > 0);
295 if (c <= 0) { 295 if (c <= 0) {
308 return 1; 308 return 1;
309 } 309 }
310 310
311 /* read into value buffer */ 311 /* read into value buffer */
312 n = 64; 312 n = 64;
313 value = malloc(n); 313 value = (char*) malloc(n);
314 r = 0; 314 r = 0;
315 do { 315 do {
316 if (c == '\n') break; 316 if (c == '\n') break;
317 if (r > n - 2) { 317 if (r > n - 2) {
318 n *= 2; 318 n *= 2;
319 value = realloc(value, n); 319 value = (char*) realloc(value, n);
320 } 320 }
321 value[r] = c; 321 value[r] = c;
322 r++; 322 r++;
323 } while ((c = fgetc(f)) > 0); 323 } while ((c = fgetc(f)) > 0);
324 value[r] = 0; 324 value[r] = 0;
326 326
327 if (decoder) { 327 if (decoder) {
328 size_t decodedSize; 328 size_t decodedSize;
329 void *decoded = decoder(value, decdata, &decodedSize); 329 void *decoded = decoder(value, decdata, &decodedSize);
330 free(value); 330 free(value);
331 value = decoded; 331 value = (char*) decoded;
332 r = decodedSize; 332 r = decodedSize;
333 } else { 333 } else {
334 r += 2; 334 r += 2;
335 value = realloc(value, r); 335 value = (char*) realloc(value, r);
336 } 336 }
337 337
338 if (allocator.pool) { 338 if (allocator.pool) {
339 void *pooledValue = allocator.malloc(allocator.pool, r); 339 void *pooledValue = allocator.malloc(allocator.pool, r);
340 memcpy(pooledValue, value, r); 340 memcpy(pooledValue, value, r);
341 free(value); 341 free(value);
342 value = pooledValue; 342 value = (char*) pooledValue;
343 } 343 }
344 344
345 ucx_map_cstr_put(map, key, value); 345 ucx_map_cstr_put(map, key, value);
346 free(key); 346 free(key);
347 } 347 }
360 k = (char*) iter.cur->key.data; 360 k = (char*) iter.cur->key.data;
361 key = sstr(k); 361 key = sstr(k);
362 if (encoder) { 362 if (encoder) {
363 size_t encodedSize; 363 size_t encodedSize;
364 void *encoded = encoder(v, encdata, &encodedSize); 364 void *encoded = encoder(v, encdata, &encodedSize);
365 value = sstrn(encoded,encodedSize - 1); 365 value = sstrn((char*) encoded,encodedSize - 1);
366 } else { 366 } else {
367 value = sstr(v); 367 value = sstr(v);
368 } 368 }
369 369
370 written = 0; 370 written = 0;

mercurial