mirror of
https://github.com/mapbox/tippecanoe.git
synced 2025-02-08 12:00:26 +00:00
Get rid of some more explicit memory management
This commit is contained in:
parent
67272bfe4a
commit
84370c59b8
37
geojson.cpp
37
geojson.cpp
@ -251,9 +251,9 @@ int serialize_geometry(json_object *geometry, json_object *properties, json_obje
|
|||||||
|
|
||||||
long long metastart = *metapos;
|
long long metastart = *metapos;
|
||||||
char *metakey[nprop];
|
char *metakey[nprop];
|
||||||
const char *metaval[nprop];
|
std::vector<std::string> metaval;
|
||||||
|
metaval.resize(nprop);
|
||||||
int metatype[nprop];
|
int metatype[nprop];
|
||||||
int mustfree[nprop];
|
|
||||||
int m = 0;
|
int m = 0;
|
||||||
|
|
||||||
int i;
|
int i;
|
||||||
@ -274,26 +274,26 @@ int serialize_geometry(json_object *geometry, json_object *properties, json_obje
|
|||||||
tas.type = -1;
|
tas.type = -1;
|
||||||
|
|
||||||
metakey[m] = properties->keys[i]->string;
|
metakey[m] = properties->keys[i]->string;
|
||||||
mustfree[m] = 0;
|
|
||||||
|
|
||||||
if (properties->values[i] != NULL && properties->values[i]->type == JSON_STRING) {
|
if (properties->values[i] != NULL && properties->values[i]->type == JSON_STRING) {
|
||||||
tas.type = metatype[m] = VT_STRING;
|
tas.type = metatype[m] = VT_STRING;
|
||||||
metaval[m] = properties->values[i]->string;
|
metaval[m] = std::string(properties->values[i]->string);
|
||||||
m++;
|
m++;
|
||||||
} else if (properties->values[i] != NULL && properties->values[i]->type == JSON_NUMBER) {
|
} else if (properties->values[i] != NULL && properties->values[i]->type == JSON_NUMBER) {
|
||||||
tas.type = metatype[m] = VT_NUMBER;
|
tas.type = metatype[m] = VT_NUMBER;
|
||||||
metaval[m] = properties->values[i]->string;
|
metaval[m] = std::string(properties->values[i]->string);
|
||||||
m++;
|
m++;
|
||||||
} else if (properties->values[i] != NULL && (properties->values[i]->type == JSON_TRUE || properties->values[i]->type == JSON_FALSE)) {
|
} else if (properties->values[i] != NULL && (properties->values[i]->type == JSON_TRUE || properties->values[i]->type == JSON_FALSE)) {
|
||||||
tas.type = metatype[m] = VT_BOOLEAN;
|
tas.type = metatype[m] = VT_BOOLEAN;
|
||||||
metaval[m] = properties->values[i]->type == JSON_TRUE ? "true" : "false";
|
metaval[m] = std::string(properties->values[i]->type == JSON_TRUE ? "true" : "false");
|
||||||
m++;
|
m++;
|
||||||
} else if (properties->values[i] != NULL && (properties->values[i]->type == JSON_NULL)) {
|
} else if (properties->values[i] != NULL && (properties->values[i]->type == JSON_NULL)) {
|
||||||
;
|
;
|
||||||
} else {
|
} else {
|
||||||
tas.type = metatype[m] = VT_STRING;
|
tas.type = metatype[m] = VT_STRING;
|
||||||
metaval[m] = json_stringify(properties->values[i]);
|
const char *v = json_stringify(properties->values[i]);
|
||||||
mustfree[m] = 1;
|
metaval[m] = std::string(v);
|
||||||
|
free((void *) v);
|
||||||
m++;
|
m++;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -303,6 +303,12 @@ int serialize_geometry(json_object *geometry, json_object *properties, json_obje
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
drawvec dv;
|
||||||
|
long long g = parse_geometry(t, coordinates, bbox, dv, VT_MOVETO, fname, line, initialized, initial_x, initial_y);
|
||||||
|
if (mb_geometry[t] == VT_POLYGON) {
|
||||||
|
dv = fix_polygon(dv);
|
||||||
|
}
|
||||||
|
|
||||||
long long geomstart = *geompos;
|
long long geomstart = *geompos;
|
||||||
|
|
||||||
serialize_byte(geomfile, mb_geometry[t], geompos, fname);
|
serialize_byte(geomfile, mb_geometry[t], geompos, fname);
|
||||||
@ -321,11 +327,6 @@ int serialize_geometry(json_object *geometry, json_object *properties, json_obje
|
|||||||
|
|
||||||
serialize_int(geomfile, segment, geompos, fname);
|
serialize_int(geomfile, segment, geompos, fname);
|
||||||
|
|
||||||
drawvec dv;
|
|
||||||
long long g = parse_geometry(t, coordinates, bbox, dv, VT_MOVETO, fname, line, initialized, initial_x, initial_y);
|
|
||||||
if (mb_geometry[t] == VT_POLYGON) {
|
|
||||||
dv = fix_polygon(dv);
|
|
||||||
}
|
|
||||||
write_geometry(dv, geompos, geomfile, fname, *initial_x >> geometry_scale, *initial_y >> geometry_scale);
|
write_geometry(dv, geompos, geomfile, fname, *initial_x >> geometry_scale, *initial_y >> geometry_scale);
|
||||||
serialize_byte(geomfile, VT_END, geompos, fname);
|
serialize_byte(geomfile, VT_END, geompos, fname);
|
||||||
|
|
||||||
@ -358,20 +359,14 @@ int serialize_geometry(json_object *geometry, json_object *properties, json_obje
|
|||||||
|
|
||||||
for (i = 0; i < m; i++) {
|
for (i = 0; i < m; i++) {
|
||||||
serialize_long_long(geomfile, addpool(poolfile, treefile, metakey[i], VT_STRING), geompos, fname);
|
serialize_long_long(geomfile, addpool(poolfile, treefile, metakey[i], VT_STRING), geompos, fname);
|
||||||
serialize_long_long(geomfile, addpool(poolfile, treefile, metaval[i], metatype[i]), geompos, fname);
|
serialize_long_long(geomfile, addpool(poolfile, treefile, metaval[i].c_str(), metatype[i]), geompos, fname);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
serialize_long_long(geomfile, metastart, geompos, fname);
|
serialize_long_long(geomfile, metastart, geompos, fname);
|
||||||
|
|
||||||
for (i = 0; i < m; i++) {
|
for (i = 0; i < m; i++) {
|
||||||
serialize_long_long(metafile, addpool(poolfile, treefile, metakey[i], VT_STRING), metapos, fname);
|
serialize_long_long(metafile, addpool(poolfile, treefile, metakey[i], VT_STRING), metapos, fname);
|
||||||
serialize_long_long(metafile, addpool(poolfile, treefile, metaval[i], metatype[i]), metapos, fname);
|
serialize_long_long(metafile, addpool(poolfile, treefile, metaval[i].c_str(), metatype[i]), metapos, fname);
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
for (i = 0; i < m; i++) {
|
|
||||||
if (mustfree[i]) {
|
|
||||||
free((void *) metaval[i]);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user