END_TEST START_TEST(eina_inarray_test_reverse) { Eina_Inarray *array; int i; eina_init(); array = eina_inarray_new(sizeof(short), 1); fail_unless(array != NULL); for (i = 0; i < numbers_count; i++) { short val = i; eina_inarray_push(array, &val); } eina_inarray_reverse(array); for (i = 0; i < numbers_count; i++) { short *member = eina_inarray_nth(array, i); fail_unless(*member == (numbers_count - i - 1)); } eina_inarray_free(array); eina_shutdown(); }
int main(int argc, char **argv) { const char* strings[] = { "helo", "hera", "starbuck", "kat", "boomer", "hotdog", "longshot", "jammer", "crashdown", "hardball", "duck", "racetrack", "apolo", "husker", "freaker", "skulls", "bulldog", "flat top", "hammerhead", "gonzo" }; char **str, **str2; Eina_Inarray *iarr; int i; eina_init(); iarr = eina_inarray_new(sizeof(char *), 0); for (i = 0; i < 20; i++){ str = (char **)(&strings[i]); eina_inarray_push(iarr, str); } printf("Inline array of strings:\n"); EINA_INARRAY_FOREACH(iarr, str2) printf("string: %s(pointer: %p)\n", *str2, str2); eina_inarray_free(iarr); eina_shutdown(); }
EAPI int eina_inarray_insert(Eina_Inarray *array, const void *data, Eina_Compare_Cb compare) { const unsigned char *itr, *itr_end; unsigned int sz; EINA_MAGIC_CHECK_INARRAY(array, -1); EINA_SAFETY_ON_NULL_RETURN_VAL(data, -1); EINA_SAFETY_ON_NULL_RETURN_VAL(compare, -1); sz = array->member_size; itr = array->members; itr_end = itr + array->len * sz; for (; itr < itr_end; itr += sz) { unsigned int offset, position; int cmp = compare(itr, data); if (cmp <= 0) continue; offset = itr - (unsigned char *)array->members; position = offset / sz; if (!eina_inarray_insert_at(array, position, data)) return -1; return position; } return eina_inarray_push(array, data); }
static int cache_scan(Eet_File *ef, Eina_Inarray *stack, const char *path, const char *base_id, int priority, int recurse, int *changed) { char *file_id = NULL; char id[PATH_MAX]; Eina_Iterator *it; Eina_File_Direct_Info *info; struct stat st; int ret = 1; if (!ecore_file_is_dir(path)) return 1; if (stat(path, &st) == -1) return 1; if (eina_inarray_search(stack, &st, stat_cmp) >= 0) return 1; eina_inarray_push(stack, &st); it = eina_file_stat_ls(path); if (!it) goto end; id[0] = '\0'; EINA_ITERATOR_FOREACH(it, info) { const char *fname = info->path + info->name_start; if (info->path[info->name_start] == '.') continue; if (base_id) { if (*base_id) snprintf(id, sizeof(id), "%s-%s", base_id, fname); else { strncpy(id, fname, PATH_MAX); id[PATH_MAX - 1] = 0; } file_id = id; } if (((info->type == EINA_FILE_LNK) && (ecore_file_is_dir(info->path))) || (info->type == EINA_FILE_DIR)) { if (recurse) { ret = cache_scan(ef, stack, info->path, file_id, priority, recurse, changed); if (!ret) break; } } else { ret = cache_add(ef, info->path, file_id, priority, changed); if (!ret) break; } } eina_iterator_free(it); end: eina_inarray_pop(stack); return ret; }
END_TEST START_TEST(eina_inarray_test_sort) { Eina_Inarray *array; int i; eina_init(); array = eina_inarray_new(sizeof(short), 1); fail_unless(array != NULL); for (i = 0; i < numbers_count; i++) { short val = rand_numbers[i]; eina_inarray_push(array, &val); } eina_inarray_sort(array, short_cmp); fail_unless(check_short_sorted(array)); eina_inarray_free(array); eina_shutdown(); }
int main(int argc, char **argv) { Eina_Inarray *iarr; char ch, *ch2; int a, *b; eina_init(); iarr = eina_inarray_new(sizeof(char), 0); ch = 'a'; eina_inarray_push(iarr, &ch); ch = 'b'; eina_inarray_push(iarr, &ch); ch = 'c'; eina_inarray_push(iarr, &ch); ch = 'd'; eina_inarray_push(iarr, &ch); printf("Inline array of chars:\n"); EINA_INARRAY_FOREACH(iarr, ch2) printf("char: %c(pointer: %p)\n", *ch2, ch2); eina_inarray_flush(iarr); eina_inarray_step_set(iarr, sizeof(Eina_Inarray), sizeof(int), 4); a = 97; eina_inarray_push(iarr, &a); a = 98; eina_inarray_push(iarr, &a); a = 100; eina_inarray_push(iarr, &a); a = 99; eina_inarray_insert_sorted(iarr, &a, cmp); printf("Inline array of integers with %d elements:\n", eina_inarray_count(iarr)); EINA_INARRAY_FOREACH(iarr, b) printf("int: %d(pointer: %p)\n", *b, b); eina_inarray_free(iarr); eina_shutdown(); }