mirror of
https://github.com/felt/tippecanoe.git
synced 2026-10-02 08:25:40 +02:00
Make the drop states a vector instead of an array
This commit is contained in:
@@ -301,7 +301,7 @@ struct drop_densest {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
int calc_feature_minzoom(struct index *ix, struct drop_state *ds, int maxzoom, double gamma) {
|
int calc_feature_minzoom(struct index *ix, std::vector<struct drop_state> &ds, int maxzoom, double gamma) {
|
||||||
int feature_minzoom = 0;
|
int feature_minzoom = 0;
|
||||||
|
|
||||||
if (gamma >= 0 && (ix->t == VT_POINT ||
|
if (gamma >= 0 && (ix->t == VT_POINT ||
|
||||||
@@ -333,9 +333,9 @@ int calc_feature_minzoom(struct index *ix, struct drop_state *ds, int maxzoom, d
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (feature_minzoom > maxzoom) {
|
if (feature_minzoom > ds.size()) {
|
||||||
fprintf(stderr, "why are we choosing %d beyond %d\n", feature_minzoom, maxzoom);
|
fprintf(stderr, "chose feature minzoom %d beyond %lu\n", feature_minzoom, ds.size());
|
||||||
feature_minzoom = maxzoom;
|
feature_minzoom = ds.size() - 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
// credit all the zooms that the feature appears in
|
// credit all the zooms that the feature appears in
|
||||||
@@ -360,7 +360,7 @@ int calc_feature_minzoom(struct index *ix, struct drop_state *ds, int maxzoom, d
|
|||||||
return feature_minzoom;
|
return feature_minzoom;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void merge(struct mergelist *merges, size_t nmerges, unsigned char *map, FILE *indexfile, int bytes, char *geom_map, FILE *geom_out, std::atomic<long long> *geompos, long long *progress, long long *progress_max, long long *progress_reported, int maxzoom, double gamma, struct drop_state *ds) {
|
static void merge(struct mergelist *merges, size_t nmerges, unsigned char *map, FILE *indexfile, int bytes, char *geom_map, FILE *geom_out, std::atomic<long long> *geompos, long long *progress, long long *progress_max, long long *progress_reported, int maxzoom, double gamma, std::vector<struct drop_state> &ds) {
|
||||||
struct mergelist *head = NULL;
|
struct mergelist *head = NULL;
|
||||||
|
|
||||||
for (size_t i = 0; i < nmerges; i++) {
|
for (size_t i = 0; i < nmerges; i++) {
|
||||||
@@ -753,7 +753,7 @@ void start_parsing(int fd, STREAM *fp, long long offset, long long len, std::ato
|
|||||||
parser_created = true;
|
parser_created = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
void radix1(int *geomfds_in, int *indexfds_in, int inputs, int prefix, int splits, long long mem, const char *tmpdir, long long *availfiles, FILE *geomfile, FILE *indexfile, std::atomic<long long> *geompos_out, long long *progress, long long *progress_max, long long *progress_reported, int maxzoom, int basezoom, double droprate, double gamma, struct drop_state *ds) {
|
void radix1(int *geomfds_in, int *indexfds_in, int inputs, int prefix, int splits, long long mem, const char *tmpdir, long long *availfiles, FILE *geomfile, FILE *indexfile, std::atomic<long long> *geompos_out, long long *progress, long long *progress_max, long long *progress_reported, int maxzoom, int basezoom, double droprate, double gamma, std::vector<struct drop_state> &ds) {
|
||||||
// Arranged as bits to facilitate subdividing again if a subdivided file is still huge
|
// Arranged as bits to facilitate subdividing again if a subdivided file is still huge
|
||||||
int splitbits = log(splits) / log(2);
|
int splitbits = log(splits) / log(2);
|
||||||
splits = 1 << splitbits;
|
splits = 1 << splitbits;
|
||||||
@@ -1061,9 +1061,9 @@ void radix1(int *geomfds_in, int *indexfds_in, int inputs, int prefix, int split
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void prep_drop_states(struct drop_state *ds, int maxzoom, int basezoom, double droprate) {
|
void prep_drop_states(std::vector<struct drop_state> &ds, int basezoom, double droprate) {
|
||||||
// Needs to be signed for interval calculation
|
// Needs to be signed for interval calculation
|
||||||
for (ssize_t i = 0; i <= std::max(maxzoom, basezoom); i++) {
|
for (size_t i = 0; i < ds.size(); i++) {
|
||||||
ds[i].gap = 0;
|
ds[i].gap = 0;
|
||||||
ds[i].previndex = 0;
|
ds[i].previndex = 0;
|
||||||
ds[i].interval = 0;
|
ds[i].interval = 0;
|
||||||
@@ -1146,8 +1146,8 @@ void radix(std::vector<struct reader> &readers, int nreaders, FILE *geomfile, FI
|
|||||||
geom_total += geomst.st_size;
|
geom_total += geomst.st_size;
|
||||||
}
|
}
|
||||||
|
|
||||||
struct drop_state ds[std::max(maxzoom, basezoom) + 1];
|
std::vector<struct drop_state> ds(std::max(maxzoom, basezoom) + 1);
|
||||||
prep_drop_states(ds, maxzoom, basezoom, droprate);
|
prep_drop_states(ds, basezoom, droprate);
|
||||||
|
|
||||||
long long progress = 0, progress_max = geom_total, progress_reported = -1;
|
long long progress = 0, progress_max = geom_total, progress_reported = -1;
|
||||||
long long availfiles_before = availfiles;
|
long long availfiles_before = availfiles;
|
||||||
@@ -2705,8 +2705,8 @@ std::pair<int, metadata> read_input(std::vector<source> &sources, char *fname, i
|
|||||||
madvise(geom, indexpos, MADV_SEQUENTIAL);
|
madvise(geom, indexpos, MADV_SEQUENTIAL);
|
||||||
madvise(geom, indexpos, MADV_WILLNEED);
|
madvise(geom, indexpos, MADV_WILLNEED);
|
||||||
|
|
||||||
struct drop_state ds[std::max(basezoom, maxzoom) + 1];
|
std::vector<struct drop_state> ds(std::max(basezoom, maxzoom) + 1);
|
||||||
prep_drop_states(ds, maxzoom, basezoom, droprate);
|
prep_drop_states(ds, basezoom, droprate);
|
||||||
|
|
||||||
if (drop_denser > 0) {
|
if (drop_denser > 0) {
|
||||||
std::vector<drop_densest> ddv;
|
std::vector<drop_densest> ddv;
|
||||||
|
|||||||
Reference in New Issue
Block a user