summaryrefslogtreecommitdiffstats
path: root/src/ccapi/common/cci_array_internal.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/ccapi/common/cci_array_internal.c')
-rw-r--r--src/ccapi/common/cci_array_internal.c111
1 files changed, 55 insertions, 56 deletions
diff --git a/src/ccapi/common/cci_array_internal.c b/src/ccapi/common/cci_array_internal.c
index b5a0f693bd..6e8bf21634 100644
--- a/src/ccapi/common/cci_array_internal.c
+++ b/src/ccapi/common/cci_array_internal.c
@@ -37,7 +37,7 @@ struct cci_array_d {
cci_array_object_t *objects;
cc_uint64 count;
cc_uint64 max_count;
-
+
cci_array_object_release_t object_release;
};
@@ -52,19 +52,19 @@ static cc_int32 cci_array_resize (cci_array_t io_array,
{
cc_int32 err = ccNoError;
cc_uint64 new_max_count = 0;
-
+
if (!io_array) { err = cci_check_error (ccErrBadParam); }
-
+
if (!err) {
cc_uint64 old_max_count = io_array->max_count;
new_max_count = io_array->max_count;
-
+
if (in_new_count > old_max_count) {
/* Expand the array */
while (in_new_count > new_max_count) {
new_max_count += CCI_ARRAY_COUNT_INCREMENT;
}
-
+
} else if ((in_new_count + CCI_ARRAY_COUNT_INCREMENT) < old_max_count) {
/* Shrink the array, but never drop below CC_ARRAY_COUNT_INCREMENT */
while ((in_new_count + CCI_ARRAY_COUNT_INCREMENT) < new_max_count &&
@@ -73,24 +73,24 @@ static cc_int32 cci_array_resize (cci_array_t io_array,
}
}
}
-
+
if (!err && io_array->max_count != new_max_count) {
cci_array_object_t *objects = io_array->objects;
-
+
if (!objects) {
objects = malloc (new_max_count * sizeof (*objects));
} else {
objects = realloc (objects, new_max_count * sizeof (*objects));
}
if (!objects) { err = cci_check_error (ccErrNoMem); }
-
+
if (!err) {
io_array->objects = objects;
io_array->max_count = new_max_count;
- }
+ }
}
-
- return cci_check_error (err);
+
+ return cci_check_error (err);
}
#ifdef TARGET_OS_MAC
@@ -104,27 +104,27 @@ cc_int32 cci_array_new (cci_array_t *out_array,
{
cc_int32 err = ccNoError;
cci_array_t array = NULL;
-
+
if (!out_array) { err = cci_check_error (ccErrBadParam); }
-
+
if (!err) {
array = malloc (sizeof (*array));
- if (array) {
+ if (array) {
*array = cci_array_initializer;
array->object_release = in_array_object_release;
} else {
- err = cci_check_error (ccErrNoMem);
+ err = cci_check_error (ccErrNoMem);
}
}
-
+
if (!err) {
*out_array = array;
array = NULL;
}
-
+
cci_array_release (array);
-
- return cci_check_error (err);
+
+ return cci_check_error (err);
}
/* ------------------------------------------------------------------------ */
@@ -132,10 +132,10 @@ cc_int32 cci_array_new (cci_array_t *out_array,
cc_int32 cci_array_release (cci_array_t io_array)
{
cc_int32 err = ccNoError;
-
+
if (!err && io_array) {
cc_uint64 i;
-
+
if (io_array->object_release) {
for (i = 0; i < io_array->count; i++) {
io_array->object_release (io_array->objects[i]);
@@ -144,8 +144,8 @@ cc_int32 cci_array_release (cci_array_t io_array)
free (io_array->objects);
free (io_array);
}
-
- return err;
+
+ return err;
}
/* ------------------------------------------------------------------------ */
@@ -166,9 +166,9 @@ cci_array_object_t cci_array_object_at_index (cci_array_t io_array,
if (!io_array) {
cci_debug_printf ("%s() got NULL array", __FUNCTION__);
} else {
- cci_debug_printf ("%s() got bad index %lld (count = %lld)", __FUNCTION__,
+ cci_debug_printf ("%s() got bad index %lld (count = %lld)", __FUNCTION__,
in_position, io_array->count);
- }
+ }
return NULL;
}
}
@@ -176,7 +176,7 @@ cci_array_object_t cci_array_object_at_index (cci_array_t io_array,
#ifdef TARGET_OS_MAC
#pragma mark -
#endif
-
+
/* ------------------------------------------------------------------------ */
cc_int32 cci_array_insert (cci_array_t io_array,
@@ -184,34 +184,34 @@ cc_int32 cci_array_insert (cci_array_t io_array,
cc_uint64 in_position)
{
cc_int32 err = ccNoError;
-
+
if (!io_array ) { err = cci_check_error (ccErrBadParam); }
if (!in_object) { err = cci_check_error (ccErrBadParam); }
-
+
if (!err) {
/* Don't try to insert past the end and don't overflow the array */
if (in_position > io_array->count || io_array->count == UINT64_MAX) {
err = cci_check_error (ccErrBadParam);
}
}
-
+
if (!err) {
err = cci_array_resize (io_array, io_array->count + 1);
}
-
+
if (!err) {
cc_uint64 move_count = io_array->count - in_position;
-
+
if (move_count > 0) {
memmove (&io_array->objects[in_position + 1], &io_array->objects[in_position],
move_count * sizeof (*io_array->objects));
}
-
+
io_array->objects[in_position] = in_object;
io_array->count++;
}
-
- return cci_check_error (err);
+
+ return cci_check_error (err);
}
/* ------------------------------------------------------------------------ */
@@ -220,29 +220,29 @@ cc_int32 cci_array_remove (cci_array_t io_array,
cc_uint64 in_position)
{
cc_int32 err = ccNoError;
-
+
if (!io_array) { err = cci_check_error (ccErrBadParam); }
-
+
if (!err && in_position >= io_array->count) {
err = cci_check_error (ccErrBadParam);
}
-
+
if (!err) {
cc_uint64 move_count = io_array->count - in_position - 1;
cci_array_object_t object = io_array->objects[in_position];
-
+
if (move_count > 0) {
memmove (&io_array->objects[in_position], &io_array->objects[in_position + 1],
move_count * sizeof (*io_array->objects));
}
io_array->count--;
-
+
if (io_array->object_release) { io_array->object_release (object); }
-
+
cci_array_resize (io_array, io_array->count);
}
-
- return cci_check_error (err);
+
+ return cci_check_error (err);
}
/* ------------------------------------------------------------------------ */
@@ -253,14 +253,14 @@ cc_int32 cci_array_move (cci_array_t io_array,
cc_uint64 *out_real_new_position)
{
cc_int32 err = ccNoError;
-
+
if (!io_array ) { err = cci_check_error (ccErrBadParam); }
if (!out_real_new_position) { err = cci_check_error (ccErrBadParam); }
-
+
if (!err && in_position >= io_array->count) {
err = cci_check_error (ccErrBadParam);
}
-
+
if (!err && in_new_position > io_array->count) {
err = cci_check_error (ccErrBadParam);
}
@@ -269,7 +269,7 @@ cc_int32 cci_array_move (cci_array_t io_array,
cc_uint64 move_to = 0;
cc_uint64 move_count = 0;
cc_uint64 real_new_position = 0;
-
+
if (in_position < in_new_position) {
/* shift right, making an empty space so the
* actual new position is one less in_new_position */
@@ -277,30 +277,30 @@ cc_int32 cci_array_move (cci_array_t io_array,
move_to = in_position;
move_count = in_new_position - in_position - 1;
real_new_position = in_new_position - 1;
-
+
} else if (in_position > in_new_position) {
/* shift left */
move_from = in_new_position;
move_to = in_new_position + 1;
- move_count = in_position - in_new_position;
+ move_count = in_position - in_new_position;
real_new_position = in_new_position;
-
+
} else {
real_new_position = in_new_position;
}
-
+
if (move_count > 0) {
cci_array_object_t object = io_array->objects[in_position];
-
- memmove (&io_array->objects[move_to], &io_array->objects[move_from],
+
+ memmove (&io_array->objects[move_to], &io_array->objects[move_from],
move_count * sizeof (*io_array->objects));
io_array->objects[real_new_position] = object;
}
-
+
*out_real_new_position = real_new_position;
}
-
- return cci_check_error (err);
+
+ return cci_check_error (err);
}
/* ------------------------------------------------------------------------ */
@@ -311,4 +311,3 @@ cc_int32 cci_array_push_front (cci_array_t io_array,
cc_uint64 real_new_position = 0;
return cci_array_move (io_array, in_position, 0, &real_new_position);
}
-