project_files/frontlib/model/map.c
changeset 7482 d70a5b0d1190
parent 7316 f7b49b2c5d84
child 7497 7e1d72fc03c7
equal deleted inserted replaced
7479:c8c552ee3acb 7482:d70a5b0d1190
    23 #include "../util/util.h"
    23 #include "../util/util.h"
    24 #include "../util/logging.h"
    24 #include "../util/logging.h"
    25 #include "../util/refcounter.h"
    25 #include "../util/refcounter.h"
    26 
    26 
    27 #include <stdlib.h>
    27 #include <stdlib.h>
    28 
       
    29 static void flib_map_destroy(flib_map *map) {
       
    30 	if(map) {
       
    31 		free(map->seed);
       
    32 		free(map->drawData);
       
    33 		free(map->name);
       
    34 		free(map->theme);
       
    35 		free(map);
       
    36 	}
       
    37 }
       
    38 
    28 
    39 flib_map *flib_map_create_regular(const char *seed, const char *theme, int templateFilter) {
    29 flib_map *flib_map_create_regular(const char *seed, const char *theme, int templateFilter) {
    40 	if(log_badargs_if2(seed==NULL, theme==NULL)) {
    30 	if(log_badargs_if2(seed==NULL, theme==NULL)) {
    41 		return NULL;
    31 		return NULL;
    42 	}
    32 	}
    72 	newmap.seed = (char*)seed;
    62 	newmap.seed = (char*)seed;
    73 	return flib_map_copy(&newmap);
    63 	return flib_map_copy(&newmap);
    74 }
    64 }
    75 
    65 
    76 flib_map *flib_map_create_drawn(const char *seed, const char *theme, const uint8_t *drawData, size_t drawDataSize) {
    66 flib_map *flib_map_create_drawn(const char *seed, const char *theme, const uint8_t *drawData, size_t drawDataSize) {
    77 	if(log_badargs_if3(seed==NULL, theme==NULL, drawData==NULL && drawDataSize>0)) {
    67 	if(log_badargs_if3(seed==NULL, theme==NULL, drawData==NULL)) {
    78 		return NULL;
    68 		return NULL;
    79 	}
    69 	}
    80 	flib_map newmap = {0};
    70 	flib_map newmap = {0};
    81 	newmap.mapgen = MAPGEN_DRAWN;
    71 	newmap.mapgen = MAPGEN_DRAWN;
    82 	newmap.name = "+drawn+";
    72 	newmap.name = "+drawn+";
    88 }
    78 }
    89 
    79 
    90 flib_map *flib_map_copy(const flib_map *map) {
    80 flib_map *flib_map_copy(const flib_map *map) {
    91 	flib_map *result = NULL;
    81 	flib_map *result = NULL;
    92 	if(map) {
    82 	if(map) {
    93 		flib_map *newmap = flib_map_retain(flib_calloc(1, sizeof(flib_map)));
    83 		flib_map *newmap = flib_calloc(1, sizeof(flib_map));
    94 		if(newmap) {
    84 		if(newmap) {
    95 			newmap->mapgen = map->mapgen;
    85 			newmap->mapgen = map->mapgen;
    96 			newmap->drawDataSize = map->drawDataSize;
    86 			newmap->drawDataSize = map->drawDataSize;
    97 			newmap->drawData = flib_bufdupnull(map->drawData, map->drawDataSize);
    87 			newmap->drawData = flib_bufdupnull(map->drawData, map->drawDataSize);
    98 			newmap->mazeSize = map->mazeSize;
    88 			newmap->mazeSize = map->mazeSize;
   103 			if((newmap->drawData || !map->drawData) && (newmap->name || !map->name) && (newmap->seed || !map->seed) && (newmap->theme || !map->theme)) {
    93 			if((newmap->drawData || !map->drawData) && (newmap->name || !map->name) && (newmap->seed || !map->seed) && (newmap->theme || !map->theme)) {
   104 				result = newmap;
    94 				result = newmap;
   105 				newmap = NULL;
    95 				newmap = NULL;
   106 			}
    96 			}
   107 		}
    97 		}
   108 		flib_map_release(newmap);
    98 		flib_map_destroy(newmap);
   109 	}
    99 	}
   110 	return result;
   100 	return result;
   111 }
   101 }
   112 
   102 
   113 flib_map *flib_map_retain(flib_map *map) {
   103 void flib_map_destroy(flib_map *map) {
   114 	if(map) {
   104 	if(map) {
   115 		flib_retain(&map->_referenceCount, "flib_map");
   105 		free(map->seed);
   116 	}
   106 		free(map->drawData);
   117 	return map;
   107 		free(map->name);
   118 }
   108 		free(map->theme);
   119 
   109 		free(map);
   120 void flib_map_release(flib_map *map) {
       
   121 	if(map && flib_release(&map->_referenceCount, "flib_map")) {
       
   122 		flib_map_destroy(map);
       
   123 	}
   110 	}
   124 }
   111 }