Lines Matching refs:is
55 static int64_t _intsetGetEncoded(intset *is, int pos, uint8_t enc) { in _intsetGetEncoded() argument
61 memcpy(&v64,((int64_t*)is->contents)+pos,sizeof(v64)); in _intsetGetEncoded()
65 memcpy(&v32,((int32_t*)is->contents)+pos,sizeof(v32)); in _intsetGetEncoded()
69 memcpy(&v16,((int16_t*)is->contents)+pos,sizeof(v16)); in _intsetGetEncoded()
76 static int64_t _intsetGet(intset *is, int pos) { in _intsetGet() argument
77 return _intsetGetEncoded(is,pos,intrev32ifbe(is->encoding)); in _intsetGet()
81 static void _intsetSet(intset *is, int pos, int64_t value) { in _intsetSet() argument
82 uint32_t encoding = intrev32ifbe(is->encoding); in _intsetSet()
85 ((int64_t*)is->contents)[pos] = value; in _intsetSet()
86 memrev64ifbe(((int64_t*)is->contents)+pos); in _intsetSet()
88 ((int32_t*)is->contents)[pos] = value; in _intsetSet()
89 memrev32ifbe(((int32_t*)is->contents)+pos); in _intsetSet()
91 ((int16_t*)is->contents)[pos] = value; in _intsetSet()
92 memrev16ifbe(((int16_t*)is->contents)+pos); in _intsetSet()
98 intset *is = zmalloc(sizeof(intset)); in intsetNew() local
99 is->encoding = intrev32ifbe(INTSET_ENC_INT16); in intsetNew()
100 is->length = 0; in intsetNew()
101 return is; in intsetNew()
105 static intset *intsetResize(intset *is, uint32_t len) { in intsetResize() argument
106 uint32_t size = len*intrev32ifbe(is->encoding); in intsetResize()
107 is = zrealloc(is,sizeof(intset)+size); in intsetResize()
108 return is; in intsetResize()
115 static uint8_t intsetSearch(intset *is, int64_t value, uint32_t *pos) { in intsetSearch() argument
116 int min = 0, max = intrev32ifbe(is->length)-1, mid = -1; in intsetSearch()
120 if (intrev32ifbe(is->length) == 0) { in intsetSearch()
126 if (value > _intsetGet(is,intrev32ifbe(is->length)-1)) { in intsetSearch()
127 if (pos) *pos = intrev32ifbe(is->length); in intsetSearch()
129 } else if (value < _intsetGet(is,0)) { in intsetSearch()
137 cur = _intsetGet(is,mid); in intsetSearch()
157 static intset *intsetUpgradeAndAdd(intset *is, int64_t value) { in intsetUpgradeAndAdd() argument
158 uint8_t curenc = intrev32ifbe(is->encoding); in intsetUpgradeAndAdd()
160 int length = intrev32ifbe(is->length); in intsetUpgradeAndAdd()
164 is->encoding = intrev32ifbe(newenc); in intsetUpgradeAndAdd()
165 is = intsetResize(is,intrev32ifbe(is->length)+1); in intsetUpgradeAndAdd()
171 _intsetSet(is,length+prepend,_intsetGetEncoded(is,length,curenc)); in intsetUpgradeAndAdd()
175 _intsetSet(is,0,value); in intsetUpgradeAndAdd()
177 _intsetSet(is,intrev32ifbe(is->length),value); in intsetUpgradeAndAdd()
178 is->length = intrev32ifbe(intrev32ifbe(is->length)+1); in intsetUpgradeAndAdd()
179 return is; in intsetUpgradeAndAdd()
182 static void intsetMoveTail(intset *is, uint32_t from, uint32_t to) { in intsetMoveTail() argument
184 uint32_t bytes = intrev32ifbe(is->length)-from; in intsetMoveTail()
185 uint32_t encoding = intrev32ifbe(is->encoding); in intsetMoveTail()
188 src = (int64_t*)is->contents+from; in intsetMoveTail()
189 dst = (int64_t*)is->contents+to; in intsetMoveTail()
192 src = (int32_t*)is->contents+from; in intsetMoveTail()
193 dst = (int32_t*)is->contents+to; in intsetMoveTail()
196 src = (int16_t*)is->contents+from; in intsetMoveTail()
197 dst = (int16_t*)is->contents+to; in intsetMoveTail()
204 intset *intsetAdd(intset *is, int64_t value, uint8_t *success) { in intsetAdd() argument
212 if (valenc > intrev32ifbe(is->encoding)) { in intsetAdd()
214 return intsetUpgradeAndAdd(is,value); in intsetAdd()
219 if (intsetSearch(is,value,&pos)) { in intsetAdd()
221 return is; in intsetAdd()
224 is = intsetResize(is,intrev32ifbe(is->length)+1); in intsetAdd()
225 if (pos < intrev32ifbe(is->length)) intsetMoveTail(is,pos,pos+1); in intsetAdd()
228 _intsetSet(is,pos,value); in intsetAdd()
229 is->length = intrev32ifbe(intrev32ifbe(is->length)+1); in intsetAdd()
230 return is; in intsetAdd()
234 intset *intsetRemove(intset *is, int64_t value, int *success) { in intsetRemove() argument
239 if (valenc <= intrev32ifbe(is->encoding) && intsetSearch(is,value,&pos)) { in intsetRemove()
240 uint32_t len = intrev32ifbe(is->length); in intsetRemove()
246 if (pos < (len-1)) intsetMoveTail(is,pos+1,pos); in intsetRemove()
247 is = intsetResize(is,len-1); in intsetRemove()
248 is->length = intrev32ifbe(len-1); in intsetRemove()
250 return is; in intsetRemove()
254 uint8_t intsetFind(intset *is, int64_t value) { in intsetFind() argument
256 return valenc <= intrev32ifbe(is->encoding) && intsetSearch(is,value,NULL); in intsetFind()
260 int64_t intsetRandom(intset *is) { in intsetRandom() argument
261 return _intsetGet(is,rand()%intrev32ifbe(is->length)); in intsetRandom()
266 uint8_t intsetGet(intset *is, uint32_t pos, int64_t *value) { in intsetGet() argument
267 if (pos < intrev32ifbe(is->length)) { in intsetGet()
268 *value = _intsetGet(is,pos); in intsetGet()
275 uint32_t intsetLen(intset *is) { in intsetLen() argument
276 return intrev32ifbe(is->length); in intsetLen()
280 size_t intsetBlobLen(intset *is) { in intsetBlobLen() argument
281 return sizeof(intset)+intrev32ifbe(is->length)*intrev32ifbe(is->encoding); in intsetBlobLen()
289 static void intsetRepr(intset *is) {
290 for (uint32_t i = 0; i < intrev32ifbe(is->length); i++) {
291 printf("%lld\n", (uint64_t)_intsetGet(is,i));
321 intset *is = intsetNew(); in createSet() local
329 is = intsetAdd(is,value,NULL); in createSet()
331 return is; in createSet()
334 static void checkConsistency(intset *is) { in checkConsistency() argument
335 for (uint32_t i = 0; i < (intrev32ifbe(is->length)-1); i++) { in checkConsistency()
336 uint32_t encoding = intrev32ifbe(is->encoding); in checkConsistency()
339 int16_t *i16 = (int16_t*)is->contents; in checkConsistency()
342 int32_t *i32 = (int32_t*)is->contents; in checkConsistency()
345 int64_t *i64 = (int64_t*)is->contents; in checkConsistency()
355 intset *is; in intsetTest() local
378 is = intsetNew(); in intsetTest()
379 is = intsetAdd(is,5,&success); assert(success); in intsetTest()
380 is = intsetAdd(is,6,&success); assert(success); in intsetTest()
381 is = intsetAdd(is,4,&success); assert(success); in intsetTest()
382 is = intsetAdd(is,4,&success); assert(!success); in intsetTest()
388 is = intsetNew(); in intsetTest()
390 is = intsetAdd(is,rand()%0x800,&success); in intsetTest()
393 assert(intrev32ifbe(is->length) == inserts); in intsetTest()
394 checkConsistency(is); in intsetTest()
399 is = intsetNew(); in intsetTest()
400 is = intsetAdd(is,32,NULL); in intsetTest()
401 assert(intrev32ifbe(is->encoding) == INTSET_ENC_INT16); in intsetTest()
402 is = intsetAdd(is,65535,NULL); in intsetTest()
403 assert(intrev32ifbe(is->encoding) == INTSET_ENC_INT32); in intsetTest()
404 assert(intsetFind(is,32)); in intsetTest()
405 assert(intsetFind(is,65535)); in intsetTest()
406 checkConsistency(is); in intsetTest()
408 is = intsetNew(); in intsetTest()
409 is = intsetAdd(is,32,NULL); in intsetTest()
410 assert(intrev32ifbe(is->encoding) == INTSET_ENC_INT16); in intsetTest()
411 is = intsetAdd(is,-65535,NULL); in intsetTest()
412 assert(intrev32ifbe(is->encoding) == INTSET_ENC_INT32); in intsetTest()
413 assert(intsetFind(is,32)); in intsetTest()
414 assert(intsetFind(is,-65535)); in intsetTest()
415 checkConsistency(is); in intsetTest()
420 is = intsetNew(); in intsetTest()
421 is = intsetAdd(is,32,NULL); in intsetTest()
422 assert(intrev32ifbe(is->encoding) == INTSET_ENC_INT16); in intsetTest()
423 is = intsetAdd(is,4294967295,NULL); in intsetTest()
424 assert(intrev32ifbe(is->encoding) == INTSET_ENC_INT64); in intsetTest()
425 assert(intsetFind(is,32)); in intsetTest()
426 assert(intsetFind(is,4294967295)); in intsetTest()
427 checkConsistency(is); in intsetTest()
429 is = intsetNew(); in intsetTest()
430 is = intsetAdd(is,32,NULL); in intsetTest()
431 assert(intrev32ifbe(is->encoding) == INTSET_ENC_INT16); in intsetTest()
432 is = intsetAdd(is,-4294967295,NULL); in intsetTest()
433 assert(intrev32ifbe(is->encoding) == INTSET_ENC_INT64); in intsetTest()
434 assert(intsetFind(is,32)); in intsetTest()
435 assert(intsetFind(is,-4294967295)); in intsetTest()
436 checkConsistency(is); in intsetTest()
441 is = intsetNew(); in intsetTest()
442 is = intsetAdd(is,65535,NULL); in intsetTest()
443 assert(intrev32ifbe(is->encoding) == INTSET_ENC_INT32); in intsetTest()
444 is = intsetAdd(is,4294967295,NULL); in intsetTest()
445 assert(intrev32ifbe(is->encoding) == INTSET_ENC_INT64); in intsetTest()
446 assert(intsetFind(is,65535)); in intsetTest()
447 assert(intsetFind(is,4294967295)); in intsetTest()
448 checkConsistency(is); in intsetTest()
450 is = intsetNew(); in intsetTest()
451 is = intsetAdd(is,65535,NULL); in intsetTest()
452 assert(intrev32ifbe(is->encoding) == INTSET_ENC_INT32); in intsetTest()
453 is = intsetAdd(is,-4294967295,NULL); in intsetTest()
454 assert(intrev32ifbe(is->encoding) == INTSET_ENC_INT64); in intsetTest()
455 assert(intsetFind(is,65535)); in intsetTest()
456 assert(intsetFind(is,-4294967295)); in intsetTest()
457 checkConsistency(is); in intsetTest()
465 is = createSet(bits,size); in intsetTest()
466 checkConsistency(is); in intsetTest()
469 for (i = 0; i < num; i++) intsetSearch(is,rand() % ((1<<bits)-1),NULL); in intsetTest()
476 is = intsetNew(); in intsetTest()
479 is = intsetAdd(is,v1,NULL); in intsetTest()
480 assert(intsetFind(is,v1)); in intsetTest()
483 is = intsetRemove(is,v2,NULL); in intsetTest()
484 assert(!intsetFind(is,v2)); in intsetTest()
486 checkConsistency(is); in intsetTest()