void tiled_free_map (TILED_MAP *map) { _al_list_destroy(map->tilesets); _al_list_destroy(map->layers); _al_list_destroy(map->layers_fore); _al_list_destroy(map->layers_back); aa_free (map->properties); _al_list_destroy(map->strings); aa_free (map->tiles); al_free(map); }
static void dtor_tileset(void *value, void *user_data) { TILED_TILESET *tileset = value; al_free (tileset->name); al_free (tileset->image_source); aa_free (tileset->properties); al_destroy_bitmap (tileset->bitmap); for (int i=0; i<tileset->num_tiles; i++) { aa_free (tileset->tiles[i].properties); al_destroy_bitmap (tileset->tiles[i].bitmap); } al_free (tileset->tiles); al_free (tileset); }
static aa_node * aa_delete_r(aa_tree *tree, aa_node **nodep, void *key) { aa_node *node, *pred, *succ; void *ret; int cmp; ret = NULL; if ((node = *nodep) == &aa_nil) { return (NULL); } else if ((cmp = tree->compare(key, node->data)) == 0) { if (node->left == &aa_nil && node->right == &aa_nil) { ret = node->data; aa_free(node); *nodep = &aa_nil; tree->size--; return (ret); } else if (node->left == &aa_nil) { succ = node->right; while (succ->left != &aa_nil) succ = succ->left; node->data = succ->data; ret = aa_delete_r(tree, &node->right, succ->data); } else { pred = node->left; while (pred->right != &aa_nil) pred = pred->right; node->data = pred->data; ret = aa_delete_r(tree, &node->left, pred->data); } } else if (cmp < 0) { ret = aa_delete_r(tree, &node->left, key); } else /* (cmp > 0) */ { ret = aa_delete_r(tree, &node->right, key); } if (node->left->level < node->level - 1 || node->right->level < node->level - 1) node->level = node->level - 1; node = aa_skew(node); node->right = aa_skew(node->right); node->right->right = aa_skew(node->right->right); node = aa_split(node); node->right = aa_split(node->right); *nodep = node; return (ret); }
static void dtor_object (void *value, void *user_data) { TILED_OBJECT *cobject = (TILED_OBJECT *) value; al_free (cobject->name); al_free (cobject->type_str); aa_free (cobject->properties); switch (cobject->type) { TILED_OBJECT_GEOM *object_geom; case OBJECT_TYPE_GEOM: object_geom = (TILED_OBJECT_GEOM *) cobject; al_free (object_geom->points); //al_free (object_geom); break; } al_free (cobject); }
static void dtor_layer(void *value, void *user_data) { TILED_LAYER *layer = (TILED_LAYER*)value; al_free (layer->name); aa_free (layer->properties); switch (layer->type) { TILED_LAYER_TILE *tile_layer; TILED_LAYER_OBJECT *object_layer; case LAYER_TYPE_TILE: tile_layer = (TILED_LAYER_TILE *) layer; for (int i = 0; i < layer->height; i++) al_free (tile_layer->tiles[i]); al_free (tile_layer->tiles); break; case LAYER_TYPE_OBJECT: object_layer = (TILED_LAYER_OBJECT *) layer; _al_list_destroy (object_layer->objects); break; } al_free (layer); }
static void cleanup(aa * tree) { aa_freedata(tree); aa_free(tree); }