mirror of
https://github.com/felt/tippecanoe.git
synced 2026-10-06 10:25:41 +02:00
Move serialization code to its own file
This commit is contained in:
@@ -42,7 +42,7 @@ C = $(wildcard *.c) $(wildcard *.cpp)
|
|||||||
INCLUDES = -I/usr/local/include -I.
|
INCLUDES = -I/usr/local/include -I.
|
||||||
LIBS = -L/usr/local/lib
|
LIBS = -L/usr/local/lib
|
||||||
|
|
||||||
tippecanoe: geojson.o jsonpull.o tile.o pool.o mbtiles.o geometry.o projection.o memfile.o clipper.o mvt.o
|
tippecanoe: geojson.o jsonpull.o tile.o pool.o mbtiles.o geometry.o projection.o memfile.o clipper.o mvt.o serial.o
|
||||||
$(CXX) $(PG) $(LIBS) $(FINAL_FLAGS) $(CXXFLAGS) -o $@ $^ $(LDFLAGS) -lm -lz -lsqlite3 -lpthread
|
$(CXX) $(PG) $(LIBS) $(FINAL_FLAGS) $(CXXFLAGS) -o $@ $^ $(LDFLAGS) -lm -lz -lsqlite3 -lpthread
|
||||||
|
|
||||||
tippecanoe-enumerate: enumerate.o
|
tippecanoe-enumerate: enumerate.o
|
||||||
|
|||||||
+1
-133
@@ -40,6 +40,7 @@ extern "C" {
|
|||||||
#include "projection.hpp"
|
#include "projection.hpp"
|
||||||
#include "version.hpp"
|
#include "version.hpp"
|
||||||
#include "memfile.hpp"
|
#include "memfile.hpp"
|
||||||
|
#include "serial.hpp"
|
||||||
|
|
||||||
static int low_detail = 12;
|
static int low_detail = 12;
|
||||||
static int full_detail = -1;
|
static int full_detail = -1;
|
||||||
@@ -206,53 +207,6 @@ void init_cpus() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
size_t fwrite_check(const void *ptr, size_t size, size_t nitems, FILE *stream, const char *fname) {
|
|
||||||
size_t w = fwrite(ptr, size, nitems, stream);
|
|
||||||
if (w != nitems) {
|
|
||||||
fprintf(stderr, "%s: Write to temporary file failed: %s\n", fname, strerror(errno));
|
|
||||||
exit(EXIT_FAILURE);
|
|
||||||
}
|
|
||||||
return w;
|
|
||||||
}
|
|
||||||
|
|
||||||
void serialize_int(FILE *out, int n, long long *fpos, const char *fname) {
|
|
||||||
serialize_long_long(out, n, fpos, fname);
|
|
||||||
}
|
|
||||||
|
|
||||||
void serialize_long_long(FILE *out, long long n, long long *fpos, const char *fname) {
|
|
||||||
unsigned long long zigzag = (n << 1) ^ (n >> 63);
|
|
||||||
|
|
||||||
while (1) {
|
|
||||||
unsigned char b = zigzag & 0x7F;
|
|
||||||
if ((zigzag >> 7) != 0) {
|
|
||||||
b |= 0x80;
|
|
||||||
if (putc(b, out) == EOF) {
|
|
||||||
fprintf(stderr, "%s: Write to temporary file failed: %s\n", fname, strerror(errno));
|
|
||||||
exit(EXIT_FAILURE);
|
|
||||||
}
|
|
||||||
*fpos += 1;
|
|
||||||
zigzag >>= 7;
|
|
||||||
} else {
|
|
||||||
if (putc(b, out) == EOF) {
|
|
||||||
fprintf(stderr, "%s: Write to temporary file failed: %s\n", fname, strerror(errno));
|
|
||||||
exit(EXIT_FAILURE);
|
|
||||||
}
|
|
||||||
*fpos += 1;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void serialize_byte(FILE *out, signed char n, long long *fpos, const char *fname) {
|
|
||||||
fwrite_check(&n, sizeof(signed char), 1, out, fname);
|
|
||||||
*fpos += sizeof(signed char);
|
|
||||||
}
|
|
||||||
|
|
||||||
void serialize_uint(FILE *out, unsigned n, long long *fpos, const char *fname) {
|
|
||||||
fwrite_check(&n, sizeof(unsigned), 1, out, fname);
|
|
||||||
*fpos += sizeof(unsigned);
|
|
||||||
}
|
|
||||||
|
|
||||||
void parse_geometry(int t, json_object *j, long long *bbox, long long *fpos, FILE *out, int op, const char *fname, int line, long long *wx, long long *wy, int *initialized, unsigned *initial_x, unsigned *initial_y) {
|
void parse_geometry(int t, json_object *j, long long *bbox, long long *fpos, FILE *out, int op, const char *fname, int line, long long *wx, long long *wy, int *initialized, unsigned *initial_x, unsigned *initial_y) {
|
||||||
if (j == NULL || j->type != JSON_ARRAY) {
|
if (j == NULL || j->type != JSON_ARRAY) {
|
||||||
fprintf(stderr, "%s:%d: expected array for type %d\n", fname, line, t);
|
fprintf(stderr, "%s:%d: expected array for type %d\n", fname, line, t);
|
||||||
@@ -344,92 +298,6 @@ void parse_geometry(int t, json_object *j, long long *bbox, long long *fpos, FIL
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void deserialize_int(char **f, int *n) {
|
|
||||||
long long ll;
|
|
||||||
deserialize_long_long(f, &ll);
|
|
||||||
*n = ll;
|
|
||||||
}
|
|
||||||
|
|
||||||
void deserialize_long_long(char **f, long long *n) {
|
|
||||||
unsigned long long zigzag = 0;
|
|
||||||
int shift = 0;
|
|
||||||
|
|
||||||
while (1) {
|
|
||||||
if ((**f & 0x80) == 0) {
|
|
||||||
zigzag |= ((unsigned long long) **f) << shift;
|
|
||||||
*f += 1;
|
|
||||||
shift += 7;
|
|
||||||
break;
|
|
||||||
} else {
|
|
||||||
zigzag |= ((unsigned long long) (**f & 0x7F)) << shift;
|
|
||||||
*f += 1;
|
|
||||||
shift += 7;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
*n = (zigzag >> 1) ^ (-(zigzag & 1));
|
|
||||||
}
|
|
||||||
|
|
||||||
void deserialize_uint(char **f, unsigned *n) {
|
|
||||||
memcpy(n, *f, sizeof(unsigned));
|
|
||||||
*f += sizeof(unsigned);
|
|
||||||
}
|
|
||||||
|
|
||||||
void deserialize_byte(char **f, signed char *n) {
|
|
||||||
memcpy(n, *f, sizeof(signed char));
|
|
||||||
*f += sizeof(signed char);
|
|
||||||
}
|
|
||||||
|
|
||||||
int deserialize_long_long_io(FILE *f, long long *n, long long *geompos) {
|
|
||||||
unsigned long long zigzag = 0;
|
|
||||||
int shift = 0;
|
|
||||||
|
|
||||||
while (1) {
|
|
||||||
int c = getc(f);
|
|
||||||
if (c == EOF) {
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
(*geompos)++;
|
|
||||||
|
|
||||||
if ((c & 0x80) == 0) {
|
|
||||||
zigzag |= ((unsigned long long) c) << shift;
|
|
||||||
shift += 7;
|
|
||||||
break;
|
|
||||||
} else {
|
|
||||||
zigzag |= ((unsigned long long) (c & 0x7F)) << shift;
|
|
||||||
shift += 7;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
*n = (zigzag >> 1) ^ (-(zigzag & 1));
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
int deserialize_int_io(FILE *f, int *n, long long *geompos) {
|
|
||||||
long long ll = 0;
|
|
||||||
int ret = deserialize_long_long_io(f, &ll, geompos);
|
|
||||||
*n = ll;
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
int deserialize_uint_io(FILE *f, unsigned *n, long long *geompos) {
|
|
||||||
if (fread(n, sizeof(unsigned), 1, f) != 1) {
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
*geompos += sizeof(unsigned);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
int deserialize_byte_io(FILE *f, signed char *n, long long *geompos) {
|
|
||||||
int c = getc(f);
|
|
||||||
if (c == EOF) {
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
*n = c;
|
|
||||||
(*geompos)++;
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
struct index {
|
struct index {
|
||||||
long long start;
|
long long start;
|
||||||
long long end;
|
long long end;
|
||||||
|
|||||||
@@ -13,6 +13,7 @@
|
|||||||
#include "clipper/clipper.hpp"
|
#include "clipper/clipper.hpp"
|
||||||
#include "tile.hpp"
|
#include "tile.hpp"
|
||||||
#include "projection.hpp"
|
#include "projection.hpp"
|
||||||
|
#include "serial.hpp"
|
||||||
|
|
||||||
static int pnpoly(drawvec &vert, size_t start, size_t nvert, long long testx, long long testy);
|
static int pnpoly(drawvec &vert, size_t start, size_t nvert, long long testx, long long testy);
|
||||||
static int clip(double *x0, double *y0, double *x1, double *y1, double xmin, double ymin, double xmax, double ymax);
|
static int clip(double *x0, double *y0, double *x1, double *y1, double xmin, double ymin, double xmax, double ymax);
|
||||||
|
|||||||
+138
@@ -0,0 +1,138 @@
|
|||||||
|
#include <stdio.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <string.h>
|
||||||
|
#include <errno.h>
|
||||||
|
#include "serial.hpp"
|
||||||
|
|
||||||
|
size_t fwrite_check(const void *ptr, size_t size, size_t nitems, FILE *stream, const char *fname) {
|
||||||
|
size_t w = fwrite(ptr, size, nitems, stream);
|
||||||
|
if (w != nitems) {
|
||||||
|
fprintf(stderr, "%s: Write to temporary file failed: %s\n", fname, strerror(errno));
|
||||||
|
exit(EXIT_FAILURE);
|
||||||
|
}
|
||||||
|
return w;
|
||||||
|
}
|
||||||
|
|
||||||
|
void serialize_int(FILE *out, int n, long long *fpos, const char *fname) {
|
||||||
|
serialize_long_long(out, n, fpos, fname);
|
||||||
|
}
|
||||||
|
|
||||||
|
void serialize_long_long(FILE *out, long long n, long long *fpos, const char *fname) {
|
||||||
|
unsigned long long zigzag = (n << 1) ^ (n >> 63);
|
||||||
|
|
||||||
|
while (1) {
|
||||||
|
unsigned char b = zigzag & 0x7F;
|
||||||
|
if ((zigzag >> 7) != 0) {
|
||||||
|
b |= 0x80;
|
||||||
|
if (putc(b, out) == EOF) {
|
||||||
|
fprintf(stderr, "%s: Write to temporary file failed: %s\n", fname, strerror(errno));
|
||||||
|
exit(EXIT_FAILURE);
|
||||||
|
}
|
||||||
|
*fpos += 1;
|
||||||
|
zigzag >>= 7;
|
||||||
|
} else {
|
||||||
|
if (putc(b, out) == EOF) {
|
||||||
|
fprintf(stderr, "%s: Write to temporary file failed: %s\n", fname, strerror(errno));
|
||||||
|
exit(EXIT_FAILURE);
|
||||||
|
}
|
||||||
|
*fpos += 1;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void serialize_byte(FILE *out, signed char n, long long *fpos, const char *fname) {
|
||||||
|
fwrite_check(&n, sizeof(signed char), 1, out, fname);
|
||||||
|
*fpos += sizeof(signed char);
|
||||||
|
}
|
||||||
|
|
||||||
|
void serialize_uint(FILE *out, unsigned n, long long *fpos, const char *fname) {
|
||||||
|
fwrite_check(&n, sizeof(unsigned), 1, out, fname);
|
||||||
|
*fpos += sizeof(unsigned);
|
||||||
|
}
|
||||||
|
|
||||||
|
void deserialize_int(char **f, int *n) {
|
||||||
|
long long ll;
|
||||||
|
deserialize_long_long(f, &ll);
|
||||||
|
*n = ll;
|
||||||
|
}
|
||||||
|
|
||||||
|
void deserialize_long_long(char **f, long long *n) {
|
||||||
|
unsigned long long zigzag = 0;
|
||||||
|
int shift = 0;
|
||||||
|
|
||||||
|
while (1) {
|
||||||
|
if ((**f & 0x80) == 0) {
|
||||||
|
zigzag |= ((unsigned long long) **f) << shift;
|
||||||
|
*f += 1;
|
||||||
|
shift += 7;
|
||||||
|
break;
|
||||||
|
} else {
|
||||||
|
zigzag |= ((unsigned long long) (**f & 0x7F)) << shift;
|
||||||
|
*f += 1;
|
||||||
|
shift += 7;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
*n = (zigzag >> 1) ^ (-(zigzag & 1));
|
||||||
|
}
|
||||||
|
|
||||||
|
void deserialize_uint(char **f, unsigned *n) {
|
||||||
|
memcpy(n, *f, sizeof(unsigned));
|
||||||
|
*f += sizeof(unsigned);
|
||||||
|
}
|
||||||
|
|
||||||
|
void deserialize_byte(char **f, signed char *n) {
|
||||||
|
memcpy(n, *f, sizeof(signed char));
|
||||||
|
*f += sizeof(signed char);
|
||||||
|
}
|
||||||
|
|
||||||
|
int deserialize_long_long_io(FILE *f, long long *n, long long *geompos) {
|
||||||
|
unsigned long long zigzag = 0;
|
||||||
|
int shift = 0;
|
||||||
|
|
||||||
|
while (1) {
|
||||||
|
int c = getc(f);
|
||||||
|
if (c == EOF) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
(*geompos)++;
|
||||||
|
|
||||||
|
if ((c & 0x80) == 0) {
|
||||||
|
zigzag |= ((unsigned long long) c) << shift;
|
||||||
|
shift += 7;
|
||||||
|
break;
|
||||||
|
} else {
|
||||||
|
zigzag |= ((unsigned long long) (c & 0x7F)) << shift;
|
||||||
|
shift += 7;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
*n = (zigzag >> 1) ^ (-(zigzag & 1));
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
int deserialize_int_io(FILE *f, int *n, long long *geompos) {
|
||||||
|
long long ll = 0;
|
||||||
|
int ret = deserialize_long_long_io(f, &ll, geompos);
|
||||||
|
*n = ll;
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
int deserialize_uint_io(FILE *f, unsigned *n, long long *geompos) {
|
||||||
|
if (fread(n, sizeof(unsigned), 1, f) != 1) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
*geompos += sizeof(unsigned);
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
int deserialize_byte_io(FILE *f, signed char *n, long long *geompos) {
|
||||||
|
int c = getc(f);
|
||||||
|
if (c == EOF) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
*n = c;
|
||||||
|
(*geompos)++;
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
+17
@@ -0,0 +1,17 @@
|
|||||||
|
size_t fwrite_check(const void *ptr, size_t size, size_t nitems, FILE *stream, const char *fname);
|
||||||
|
|
||||||
|
void serialize_int(FILE *out, int n, long long *fpos, const char *fname);
|
||||||
|
void serialize_long_long(FILE *out, long long n, long long *fpos, const char *fname);
|
||||||
|
void serialize_byte(FILE *out, signed char n, long long *fpos, const char *fname);
|
||||||
|
void serialize_uint(FILE *out, unsigned n, long long *fpos, const char *fname);
|
||||||
|
void serialize_string(FILE *out, const char *s, long long *fpos, const char *fname);
|
||||||
|
|
||||||
|
void deserialize_int(char **f, int *n);
|
||||||
|
void deserialize_long_long(char **f, long long *n);
|
||||||
|
void deserialize_uint(char **f, unsigned *n);
|
||||||
|
void deserialize_byte(char **f, signed char *n);
|
||||||
|
|
||||||
|
int deserialize_int_io(FILE *f, int *n, long long *geompos);
|
||||||
|
int deserialize_long_long_io(FILE *f, long long *n, long long *geompos);
|
||||||
|
int deserialize_uint_io(FILE *f, unsigned *n, long long *geompos);
|
||||||
|
int deserialize_byte_io(FILE *f, signed char *n, long long *geompos);
|
||||||
@@ -25,6 +25,7 @@
|
|||||||
#include "pool.hpp"
|
#include "pool.hpp"
|
||||||
#include "mbtiles.hpp"
|
#include "mbtiles.hpp"
|
||||||
#include "projection.hpp"
|
#include "projection.hpp"
|
||||||
|
#include "serial.hpp"
|
||||||
|
|
||||||
#define CMD_BITS 3
|
#define CMD_BITS 3
|
||||||
|
|
||||||
|
|||||||
@@ -13,22 +13,6 @@
|
|||||||
|
|
||||||
struct pool;
|
struct pool;
|
||||||
|
|
||||||
void serialize_int(FILE *out, int n, long long *fpos, const char *fname);
|
|
||||||
void serialize_long_long(FILE *out, long long n, long long *fpos, const char *fname);
|
|
||||||
void serialize_byte(FILE *out, signed char n, long long *fpos, const char *fname);
|
|
||||||
void serialize_uint(FILE *out, unsigned n, long long *fpos, const char *fname);
|
|
||||||
void serialize_string(FILE *out, const char *s, long long *fpos, const char *fname);
|
|
||||||
|
|
||||||
void deserialize_int(char **f, int *n);
|
|
||||||
void deserialize_long_long(char **f, long long *n);
|
|
||||||
void deserialize_uint(char **f, unsigned *n);
|
|
||||||
void deserialize_byte(char **f, signed char *n);
|
|
||||||
|
|
||||||
int deserialize_int_io(FILE *f, int *n, long long *geompos);
|
|
||||||
int deserialize_long_long_io(FILE *f, long long *n, long long *geompos);
|
|
||||||
int deserialize_uint_io(FILE *f, unsigned *n, long long *geompos);
|
|
||||||
int deserialize_byte_io(FILE *f, signed char *n, long long *geompos);
|
|
||||||
|
|
||||||
long long write_tile(char **geom, char *metabase, char *stringpool, unsigned *file_bbox, int z, unsigned x, unsigned y, int detail, int min_detail, int basezoom, struct pool **file_keys, char **layernames, sqlite3 *outdb, double droprate, int buffer, const char *fname, FILE **geomfile, int file_minzoom, int file_maxzoom, double todo, char *geomstart, long long along, double gamma, int nlayers, int *prevent, int *additional);
|
long long write_tile(char **geom, char *metabase, char *stringpool, unsigned *file_bbox, int z, unsigned x, unsigned y, int detail, int min_detail, int basezoom, struct pool **file_keys, char **layernames, sqlite3 *outdb, double droprate, int buffer, const char *fname, FILE **geomfile, int file_minzoom, int file_maxzoom, double todo, char *geomstart, long long along, double gamma, int nlayers, int *prevent, int *additional);
|
||||||
|
|
||||||
int traverse_zooms(int *geomfd, off_t *geom_size, char *metabase, char *stringpool, struct pool **file_keys, unsigned *midx, unsigned *midy, char **layernames, int maxzoom, int minzoom, int basezoom, sqlite3 *outdb, double droprate, int buffer, const char *fname, const char *tmpdir, double gamma, int nlayers, int *prevent, int *additional, int full_detail, int low_detail, int min_detail, long long *meta_off, long long *pool_off, unsigned *initial_x, unsigned *initial_y);
|
int traverse_zooms(int *geomfd, off_t *geom_size, char *metabase, char *stringpool, struct pool **file_keys, unsigned *midx, unsigned *midy, char **layernames, int maxzoom, int minzoom, int basezoom, sqlite3 *outdb, double droprate, int buffer, const char *fname, const char *tmpdir, double gamma, int nlayers, int *prevent, int *additional, int full_detail, int low_detail, int min_detail, long long *meta_off, long long *pool_off, unsigned *initial_x, unsigned *initial_y);
|
||||||
|
|||||||
Reference in New Issue
Block a user