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