equal
deleted
inserted
replaced
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 } |