mirror of
https://github.com/felt/tippecanoe.git
synced 2026-10-05 18:05:42 +02:00
Make stream lookahead work; simplify the interface
This commit is contained in:
@@ -486,6 +486,7 @@ struct STREAM {
|
|||||||
bool gz;
|
bool gz;
|
||||||
z_stream inflate_s;
|
z_stream inflate_s;
|
||||||
Bytef buf[BUF];
|
Bytef buf[BUF];
|
||||||
|
std::vector<unsigned char> ahead;
|
||||||
|
|
||||||
int fclose() {
|
int fclose() {
|
||||||
if (gz) {
|
if (gz) {
|
||||||
@@ -498,18 +499,40 @@ struct STREAM {
|
|||||||
}
|
}
|
||||||
|
|
||||||
int peekc() {
|
int peekc() {
|
||||||
int c = getc(fp);
|
if (gz) {
|
||||||
if (c != EOF) {
|
if (ahead.size() > 0) {
|
||||||
ungetc(c, fp);
|
return ahead[ahead.size() - 1];
|
||||||
|
}
|
||||||
|
|
||||||
|
char tmp[1];
|
||||||
|
size_t nread = read(tmp, 1);
|
||||||
|
|
||||||
|
if (nread == 0) {
|
||||||
|
return EOF;
|
||||||
|
}
|
||||||
|
|
||||||
|
ahead.push_back(tmp[0]);
|
||||||
|
return (unsigned char) tmp[0];
|
||||||
|
} else {
|
||||||
|
int c = getc(fp);
|
||||||
|
if (c != EOF) {
|
||||||
|
ungetc(c, fp);
|
||||||
|
}
|
||||||
|
return c;
|
||||||
}
|
}
|
||||||
return c;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
int fread(char *out, size_t unit, size_t count) {
|
size_t read(char *out, size_t count) {
|
||||||
if (gz) {
|
if (gz) {
|
||||||
|
if (ahead.size() > 0 && count > 0) {
|
||||||
|
out[0] = ahead[ahead.size() - 1];
|
||||||
|
ahead.resize(ahead.size() - 1);
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
while (1) {
|
while (1) {
|
||||||
prime();
|
prime();
|
||||||
inflate_s.avail_out = count * unit;
|
inflate_s.avail_out = count;
|
||||||
inflate_s.next_out = (Bytef *) out;
|
inflate_s.next_out = (Bytef *) out;
|
||||||
|
|
||||||
int ret = inflate(&inflate_s, Z_SYNC_FLUSH);
|
int ret = inflate(&inflate_s, Z_SYNC_FLUSH);
|
||||||
@@ -529,7 +552,7 @@ struct STREAM {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
return ::fread(out, unit, count, fp);
|
return ::fread(out, 1, count, fp);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -551,7 +574,7 @@ struct STREAM {
|
|||||||
};
|
};
|
||||||
|
|
||||||
static ssize_t read_stream(json_pull *j, char *buffer, size_t n) {
|
static ssize_t read_stream(json_pull *j, char *buffer, size_t n) {
|
||||||
return ((STREAM *) j->source)->fread(buffer, 1, n);
|
return ((STREAM *) j->source)->read(buffer, n);
|
||||||
}
|
}
|
||||||
|
|
||||||
STREAM *streamfdopen(int fd, const char *mode, std::string const &fname) {
|
STREAM *streamfdopen(int fd, const char *mode, std::string const &fname) {
|
||||||
@@ -1592,7 +1615,7 @@ int read_input(std::vector<source> &sources, char *fname, int maxzoom, int minzo
|
|||||||
char buf[READ_BUF];
|
char buf[READ_BUF];
|
||||||
int n;
|
int n;
|
||||||
|
|
||||||
while ((n = fp->fread(buf, sizeof(char), READ_BUF)) > 0) {
|
while ((n = fp->read(buf, READ_BUF)) > 0) {
|
||||||
fwrite_check(buf, sizeof(char), n, readfp, reading.c_str());
|
fwrite_check(buf, sizeof(char), n, readfp, reading.c_str());
|
||||||
ahead += n;
|
ahead += n;
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user