void testLifecycleAkwarde(void) { Entity *mainStruct = yeCreateArray(NULL, NULL); Entity *subStruct1 = yeCreateArray(mainStruct, NULL); Entity *subStruct2 = yeCreateArray(subStruct1, NULL); Entity *test3 = yeCreateString("i am an int entity", NULL, NULL); g_assert(mainStruct); g_assert(subStruct1); g_assert(subStruct2); g_assert(test3); g_assert(mainStruct->refCount == 1); g_assert(subStruct1->refCount == 1); g_assert(subStruct2->refCount == 1); g_assert(test3->refCount == 1); g_assert(!yePushBack(mainStruct, test3, NULL)); g_assert(test3->refCount == 2); g_assert(!yePushBack(subStruct1, test3, NULL)); g_assert(test3->refCount == 3); g_assert(!yePushBack(subStruct2, test3, NULL)); g_assert(test3->refCount == 4); YE_DESTROY(mainStruct); g_assert(test3->refCount == 1); g_assert(mainStruct == NULL); YE_DESTROY(test3); }
/* this tests is actually usefull only with valgrind */ void testLifecycleFlow(void) { Entity *mainStruct = yeCreateArray(NULL, NULL); Entity *subStruct1 = yeCreateArray(mainStruct, NULL); Entity *subStruct2 = yeCreateArray(NULL, NULL); Entity *test2 = yeCreateInt(1, subStruct2, NULL); Entity *test3 = yeCreateFloat(1, subStruct2, NULL); g_assert(test2); g_assert(test3); g_assert(mainStruct); g_assert(subStruct1); g_assert(subStruct2); g_assert(yeLen(mainStruct) == 1); g_assert(yeLen(subStruct2) == 2); g_assert(!yePushBack(mainStruct, subStruct2, NULL)); g_assert(yeLen(mainStruct) == 2); g_assert(mainStruct->refCount == 1); g_assert(subStruct1->refCount == 1); g_assert(test3->refCount == 1); g_assert(test2->refCount == 1); g_assert(subStruct2->refCount == 2); YE_DESTROY(subStruct2); g_assert(subStruct2); g_assert(subStruct2->refCount == 1); YE_DESTROY(mainStruct); g_assert(mainStruct == NULL); }
// I have no index... static void create_tild_multi_layers(Entity *mod_description, int tild, Entity **map, Entity *desc, int pos, int width) { Entity *sp = yeGetByStrFast(desc, "start_pos"); int start_pos = yeGetInt(yeGetByIdx(sp, 0)) + yeGetInt(yeGetByIdx(sp, 0)) * (width ? width : 8000); if (start_pos == pos) { yePushBack(yeCreateArrayAt(map[1], NULL, pos), yeGetByStrFast(desc, "start_id"), NULL); } Y_BLOCK_ARRAY_FOREACH_PTR(YE_TO_ARRAY(mod_description)->values, tmp, it, ArrayEntry) { const char *char_str; if (!tmp) continue; char_str = yeGetString(yeGetByStr(tmp->entity, "map-char")); if (char_str[0] == tild) { if (yeStringIndexChar(yeGetByStrFast(desc, "ground_char"), char_str) >= 0) { yeCreateInt(it, yeCreateArrayAt(map[0], NULL, pos), NULL); } else { yeCreateInt(it, yeCreateArrayAt(map[2], NULL, pos), NULL); } return; } } yeCreateInt(tild, yeCreateArrayAt(map[0], NULL, pos), NULL); }
void testLifecycleComplex(void) { Entity *mainStruct = yeCreateArray(NULL, NULL); Entity *subStruct1 = yeCreateArray(mainStruct, NULL); Entity *subStruct2 = yeCreateArray(mainStruct, NULL); Entity *test3 = yeCreateFloat(1, subStruct2, NULL); g_assert(mainStruct); g_assert(subStruct1); g_assert(subStruct2); g_assert(!yePushBack(subStruct1, subStruct2, NULL)); yeExpandArray(subStruct2, 5); yeAttach(subStruct2, test3, 2, NULL); g_assert(mainStruct->refCount == 1); g_assert(subStruct1->refCount == 1); g_assert(subStruct2->refCount == 2); YE_DESTROY(mainStruct); g_assert(mainStruct == NULL); }
void *load_entity(int nb, void **args) { Entity *desc = args[0]; if (nb != 1) { DPRINT_ERR("numbers of arguments incorect\n"); return NULL; } const char *file_name = yeGetString(yeGetByStrFast(desc, "map")); int fd = open(file_name, O_RDONLY); int width = 0, len = 0; Entity *resources = ywMapGetResourcesFromEntity(desc); char *name = nb > 2 ? args[2] : NULL; Entity *father = nb > 1 ? args[1] : NULL; int ret = 0; Entity *entries; if (fd < 1) { DPRINT_ERR("error when opening '%s'\n", file_name); goto error; } yeReCreateString("container", desc, "<type>"); yeCreateString("stacking", desc, "cnt-type"); entries = yeCreateArray(desc, "entries"); yeCreateArray(entries, NULL); yeCreateArray(entries, NULL); yeCreateArray(entries, NULL); if (read_map(fd, entries, resources, file_name, &width, &len, desc)) goto error; YE_ARRAY_FOREACH(entries, map) { yeCreateString("map", map, "<type>"); yeCreateInt(width, map, "width"); yeCreateInt(len, map, "len"); yePushBack(map, resources, "resources"); }
int ywMapPushElem(YWidgetState *state, Entity *toPush, Entity *pos, const char *name) { int ret = yePushBack(ywMapGetCase(state, pos), toPush, name); return ret; }