Exemple #1
0
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);
}
Exemple #2
0
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);
}
Exemple #3
0
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);
}
Exemple #4
0
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);
}
Exemple #5
0
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);
}
Exemple #6
0
static void cleanup(aa * tree)
{
    aa_freedata(tree);
    aa_free(tree);
}