Lines Matching refs:array
99 sarray_at_put (struct sarray *array, sidx index, void *element) in sarray_at_put() argument
131 assert (soffset_decode (index) < array->capacity); /* Range check */ in sarray_at_put()
134 the_index = &(array->indices[ioffset]); in sarray_at_put()
137 the_bucket = &(array->buckets[boffset]); in sarray_at_put()
147 if ((*the_index) == array->empty_index) in sarray_at_put()
151 memcpy (new_index, array->empty_index, sizeof (struct sindex)); in sarray_at_put()
152 new_index->version.version = array->version.version; in sarray_at_put()
158 else if ((*the_index)->version.version != array->version.version) in sarray_at_put()
164 new_index->version.version = array->version.version; in sarray_at_put()
174 if ((*the_bucket) == array->empty_bucket) in sarray_at_put()
179 memcpy ((void *) new_bucket, (const void *) array->empty_bucket, in sarray_at_put()
181 new_bucket->version.version = array->version.version; in sarray_at_put()
187 else if ((*the_bucket)->version.version != array->version.version) in sarray_at_put()
193 new_bucket->version.version = array->version.version; in sarray_at_put()
202 sarray_at_put_safe (struct sarray *array, sidx index, void *element) in sarray_at_put_safe() argument
204 if (soffset_decode (index) >= array->capacity) in sarray_at_put_safe()
205 sarray_realloc (array, soffset_decode (index) + 1); in sarray_at_put_safe()
206 sarray_at_put (array, index, element); in sarray_at_put_safe()
290 sarray_realloc (struct sarray *array, int newsize) in sarray_realloc() argument
293 size_t old_max_index = (array->capacity - 1)/INDEX_CAPACITY; in sarray_realloc()
301 size_t old_max_index = (array->capacity - 1)/BUCKET_SIZE; in sarray_realloc()
315 if (rounded_size <= array->capacity) in sarray_realloc()
318 assert (array->ref_count == 1); /* stop if lazy copied... */ in sarray_realloc()
322 if (rounded_size > array->capacity) in sarray_realloc()
333 array->capacity = rounded_size; in sarray_realloc()
337 old_indices = array->indices; in sarray_realloc()
341 old_buckets = array->buckets; in sarray_realloc()
359 new_indices[counter] = array->empty_index; in sarray_realloc()
363 new_buckets[counter] = array->empty_bucket; in sarray_realloc()
368 array->indices = new_indices; in sarray_realloc()
370 array->buckets = new_buckets; in sarray_realloc()
388 sarray_free (struct sarray *array) { in sarray_free() argument
390 size_t old_max_index = (array->capacity - 1)/INDEX_CAPACITY; in sarray_free()
393 size_t old_max_index = (array->capacity - 1)/BUCKET_SIZE; in sarray_free()
398 assert (array->ref_count != 0); /* Freed multiple times!!! */ in sarray_free()
400 if (--(array->ref_count) != 0) /* There exists copies of me */ in sarray_free()
404 old_indices = array->indices; in sarray_free()
406 old_buckets = array->buckets; in sarray_free()
414 if ((idx != array->empty_index) in sarray_free()
415 && (idx->version.version == array->version.version)) in sarray_free()
421 if ((bkt != array->empty_bucket) in sarray_free()
422 && (bkt->version.version == array->version.version)) in sarray_free()
433 if ((bkt != array->empty_bucket) in sarray_free()
434 && (bkt->version.version == array->version.version)) in sarray_free()
444 if (array->empty_index->version.version == array->version.version) in sarray_free()
446 sarray_free_garbage (array->empty_index); in sarray_free()
452 if (array->empty_bucket->version.version == array->version.version) in sarray_free()
454 sarray_free_garbage (array->empty_bucket); in sarray_free()
462 sarray_free_garbage (array->indices); in sarray_free()
465 sarray_free_garbage (array->buckets); in sarray_free()
471 if (array->is_copy_of) in sarray_free()
472 sarray_free (array->is_copy_of); in sarray_free()
475 sarray_free_garbage (array); in sarray_free()