project_files/frontlib/model/map.c
changeset 7230 240620f46dd7
parent 7224 5143861c83bd
child 7271 5608ac657362
equal deleted inserted replaced
7227:1c859f572d72 7230:240620f46dd7
     1 #include "map.h"
     1 #include "map.h"
     2 
     2 
     3 #include "../util/inihelper.h"
     3 #include "../util/inihelper.h"
     4 #include "../util/util.h"
     4 #include "../util/util.h"
     5 #include "../util/logging.h"
     5 #include "../util/logging.h"
       
     6 #include "../util/refcounter.h"
     6 
     7 
     7 #include <stdlib.h>
     8 #include <stdlib.h>
       
     9 
       
    10 static void flib_map_destroy(flib_map *map) {
       
    11 	if(map) {
       
    12 		free(map->drawData);
       
    13 		free(map->name);
       
    14 		free(map->theme);
       
    15 		free(map);
       
    16 	}
       
    17 }
     8 
    18 
     9 flib_map *flib_map_create_regular(const char *theme, int templateFilter) {
    19 flib_map *flib_map_create_regular(const char *theme, int templateFilter) {
    10 	flib_map *result = NULL;
    20 	flib_map *result = NULL;
    11 	if(!theme) {
    21 	if(!theme) {
    12 		flib_log_e("null parameter in flib_map_create_regular");
    22 		flib_log_e("null parameter in flib_map_create_regular");
    13 	} else {
    23 	} else {
    14 		flib_map *newmap = flib_calloc(1, sizeof(flib_map));
    24 		flib_map *newmap = flib_calloc(1, sizeof(flib_map));
    15 		if(newmap) {
    25 		if(newmap) {
       
    26 			newmap->_referenceCount = 1;
    16 			newmap->mapgen = MAPGEN_REGULAR;
    27 			newmap->mapgen = MAPGEN_REGULAR;
    17 			newmap->templateFilter = templateFilter;
    28 			newmap->templateFilter = templateFilter;
    18 			newmap->theme = flib_strdupnull(theme);
    29 			newmap->theme = flib_strdupnull(theme);
    19 			if(newmap->theme) {
    30 			if(newmap->theme) {
    20 				result = newmap;
    31 				result = newmap;
    31 	if(!theme) {
    42 	if(!theme) {
    32 		flib_log_e("null parameter in flib_map_create_maze");
    43 		flib_log_e("null parameter in flib_map_create_maze");
    33 	} else {
    44 	} else {
    34 		flib_map *newmap = flib_calloc(1, sizeof(flib_map));
    45 		flib_map *newmap = flib_calloc(1, sizeof(flib_map));
    35 		if(newmap) {
    46 		if(newmap) {
       
    47 			newmap->_referenceCount = 1;
    36 			newmap->mapgen = MAPGEN_MAZE;
    48 			newmap->mapgen = MAPGEN_MAZE;
    37 			newmap->mazeSize = mazeSize;
    49 			newmap->mazeSize = mazeSize;
    38 			newmap->theme = flib_strdupnull(theme);
    50 			newmap->theme = flib_strdupnull(theme);
    39 			if(newmap->theme) {
    51 			if(newmap->theme) {
    40 				result = newmap;
    52 				result = newmap;
    51 	if(!name) {
    63 	if(!name) {
    52 		flib_log_e("null parameter in flib_map_create_named");
    64 		flib_log_e("null parameter in flib_map_create_named");
    53 	} else {
    65 	} else {
    54 		flib_map *newmap = flib_calloc(1, sizeof(flib_map));
    66 		flib_map *newmap = flib_calloc(1, sizeof(flib_map));
    55 		if(newmap) {
    67 		if(newmap) {
       
    68 			newmap->_referenceCount = 1;
    56 			newmap->mapgen = MAPGEN_NAMED;
    69 			newmap->mapgen = MAPGEN_NAMED;
    57 			newmap->name = flib_strdupnull(name);
    70 			newmap->name = flib_strdupnull(name);
    58 			if(newmap->name) {
    71 			if(newmap->name) {
    59 				result = newmap;
    72 				result = newmap;
    60 				newmap = NULL;
    73 				newmap = NULL;
    70 	if(!theme || !drawData) {
    83 	if(!theme || !drawData) {
    71 		flib_log_e("null parameter in flib_map_create_named");
    84 		flib_log_e("null parameter in flib_map_create_named");
    72 	} else {
    85 	} else {
    73 		flib_map *newmap = flib_calloc(1, sizeof(flib_map));
    86 		flib_map *newmap = flib_calloc(1, sizeof(flib_map));
    74 		if(newmap) {
    87 		if(newmap) {
       
    88 			newmap->_referenceCount = 1;
    75 			newmap->mapgen = MAPGEN_DRAWN;
    89 			newmap->mapgen = MAPGEN_DRAWN;
    76 			newmap->drawData = flib_bufdupnull(drawData, drawDataSize);
    90 			newmap->drawData = flib_bufdupnull(drawData, drawDataSize);
    77 			newmap->drawDataSize = drawDataSize;
    91 			newmap->drawDataSize = drawDataSize;
    78 			if(newmap->drawData) {
    92 			if(newmap->drawData) {
    79 				result = newmap;
    93 				result = newmap;
    83 		flib_map_destroy(newmap);
    97 		flib_map_destroy(newmap);
    84 	}
    98 	}
    85 	return result;
    99 	return result;
    86 }
   100 }
    87 
   101 
    88 void flib_map_destroy(flib_map *map) {
   102 flib_map *flib_map_retain(flib_map *map) {
    89 	if(map) {
   103 	if(map) {
    90 		free(map->drawData);
   104 		flib_retain(&map->_referenceCount, "flib_map");
    91 		free(map->name);
   105 	}
    92 		free(map->theme);
   106 	return map;
    93 		free(map);
   107 }
       
   108 
       
   109 void flib_map_release(flib_map *map) {
       
   110 	if(map && flib_release(&map->_referenceCount, "flib_map")) {
       
   111 		flib_map_destroy(map);
    94 	}
   112 	}
    95 }
   113 }