Lines Matching refs:array
100 sarray_at_put (struct sarray *array, sidx index, void *element) in sarray_at_put() argument
132 assert (soffset_decode (index) < array->capacity); /* Range check */ in sarray_at_put()
135 the_index = &(array->indices[ioffset]); in sarray_at_put()
138 the_bucket = &(array->buckets[boffset]); in sarray_at_put()
148 if ((*the_index) == array->empty_index) in sarray_at_put()
152 memcpy (new_index, array->empty_index, sizeof (struct sindex)); in sarray_at_put()
153 new_index->version.version = array->version.version; in sarray_at_put()
159 else if ((*the_index)->version.version != array->version.version) in sarray_at_put()
165 new_index->version.version = array->version.version; in sarray_at_put()
175 if ((*the_bucket) == array->empty_bucket) in sarray_at_put()
180 memcpy ((void *) new_bucket, (const void *) array->empty_bucket, in sarray_at_put()
182 new_bucket->version.version = array->version.version; in sarray_at_put()
188 else if ((*the_bucket)->version.version != array->version.version) in sarray_at_put()
194 new_bucket->version.version = array->version.version; in sarray_at_put()
203 sarray_at_put_safe (struct sarray *array, sidx index, void *element) in sarray_at_put_safe() argument
205 if (soffset_decode (index) >= array->capacity) in sarray_at_put_safe()
206 sarray_realloc (array, soffset_decode (index) + 1); in sarray_at_put_safe()
207 sarray_at_put (array, index, element); in sarray_at_put_safe()
291 sarray_realloc (struct sarray *array, int newsize) in sarray_realloc() argument
294 size_t old_max_index = (array->capacity - 1)/INDEX_CAPACITY; in sarray_realloc()
302 size_t old_max_index = (array->capacity - 1)/BUCKET_SIZE; in sarray_realloc()
316 if (rounded_size <= array->capacity) in sarray_realloc()
319 assert (array->ref_count == 1); /* stop if lazy copied... */ in sarray_realloc()
323 if (rounded_size > array->capacity) in sarray_realloc()
334 array->capacity = rounded_size; in sarray_realloc()
338 old_indices = array->indices; in sarray_realloc()
342 old_buckets = array->buckets; in sarray_realloc()
360 new_indices[counter] = array->empty_index; in sarray_realloc()
364 new_buckets[counter] = array->empty_bucket; in sarray_realloc()
369 array->indices = new_indices; in sarray_realloc()
371 array->buckets = new_buckets; in sarray_realloc()
389 sarray_free (struct sarray *array) { in sarray_free() argument
391 size_t old_max_index = (array->capacity - 1)/INDEX_CAPACITY; in sarray_free()
394 size_t old_max_index = (array->capacity - 1)/BUCKET_SIZE; in sarray_free()
399 assert (array->ref_count != 0); /* Freed multiple times!!! */ in sarray_free()
401 if (--(array->ref_count) != 0) /* There exists copies of me */ in sarray_free()
405 old_indices = array->indices; in sarray_free()
407 old_buckets = array->buckets; in sarray_free()
415 if ((idx != array->empty_index) in sarray_free()
416 && (idx->version.version == array->version.version)) in sarray_free()
422 if ((bkt != array->empty_bucket) in sarray_free()
423 && (bkt->version.version == array->version.version)) in sarray_free()
434 if ((bkt != array->empty_bucket) in sarray_free()
435 && (bkt->version.version == array->version.version)) in sarray_free()
445 if (array->empty_index->version.version == array->version.version) in sarray_free()
447 sarray_free_garbage (array->empty_index); in sarray_free()
453 if (array->empty_bucket->version.version == array->version.version) in sarray_free()
455 sarray_free_garbage (array->empty_bucket); in sarray_free()
463 sarray_free_garbage (array->indices); in sarray_free()
466 sarray_free_garbage (array->buckets); in sarray_free()
472 if (array->is_copy_of) in sarray_free()
473 sarray_free (array->is_copy_of); in sarray_free()
476 sarray_free_garbage (array); in sarray_free()