Move construction into a constructor

This commit is contained in:
Erica Fischer
2023-08-21 12:48:53 -07:00
parent 8850febc0f
commit 234db66aee
+20 -20
View File
@@ -503,24 +503,22 @@ struct reader {
return false; return false;
} }
};
struct reader *begin_reading(char *fname) { reader(const char *fname) {
struct reader *r = new reader; name = fname;
r->name = fname;
struct stat st; struct stat st;
if (stat(fname, &st) == 0 && (st.st_mode & S_IFDIR) != 0) { if (stat(fname, &st) == 0 && (st.st_mode & S_IFDIR) != 0) {
r->db = NULL; db = NULL;
r->stmt = NULL; stmt = NULL;
r->next = NULL; next = NULL;
r->dirtiles = enumerate_dirtiles(fname, minzoom, maxzoom); dirtiles = enumerate_dirtiles(fname, minzoom, maxzoom);
r->dirbase = fname; dirbase = fname;
} else if (pmtiles_has_suffix(fname)) { } else if (pmtiles_has_suffix(fname)) {
int pmtiles_fd = open(fname, O_RDONLY | O_CLOEXEC); int pmtiles_fd = open(fname, O_RDONLY | O_CLOEXEC);
r->pmtiles_map = (char *) mmap(NULL, st.st_size, PROT_READ, MAP_PRIVATE, pmtiles_fd, 0); pmtiles_map = (char *) mmap(NULL, st.st_size, PROT_READ, MAP_PRIVATE, pmtiles_fd, 0);
if (r->pmtiles_map == MAP_FAILED) { if (pmtiles_map == MAP_FAILED) {
perror("mmap in decode"); perror("mmap in decode");
exit(EXIT_MEMORY); exit(EXIT_MEMORY);
} }
@@ -529,11 +527,9 @@ struct reader *begin_reading(char *fname) {
exit(EXIT_CLOSE); exit(EXIT_CLOSE);
} }
r->pmtiles_entries = pmtiles_entries_tms(r->pmtiles_map, minzoom, maxzoom); pmtiles_entries = pmtiles_entries_tms(pmtiles_map, minzoom, maxzoom);
std::reverse(r->pmtiles_entries.begin(), r->pmtiles_entries.end()); std::reverse(pmtiles_entries.begin(), pmtiles_entries.end());
} else { } else {
sqlite3 *db;
if (sqlite3_open(fname, &db) != SQLITE_OK) { if (sqlite3_open(fname, &db) != SQLITE_OK) {
fprintf(stderr, "%s: %s\n", fname, sqlite3_errmsg(db)); fprintf(stderr, "%s: %s\n", fname, sqlite3_errmsg(db));
exit(EXIT_SQLITE); exit(EXIT_SQLITE);
@@ -546,17 +542,21 @@ struct reader *begin_reading(char *fname) {
} }
const char *sql = "SELECT zoom_level, tile_column, tile_row, tile_data from tiles order by zoom_level, tile_column, tile_row;"; const char *sql = "SELECT zoom_level, tile_column, tile_row, tile_data from tiles order by zoom_level, tile_column, tile_row;";
sqlite3_stmt *stmt; sqlite3_stmt *query;
if (sqlite3_prepare_v2(db, sql, -1, &stmt, NULL) != SQLITE_OK) { if (sqlite3_prepare_v2(db, sql, -1, &query, NULL) != SQLITE_OK) {
fprintf(stderr, "%s: select failed: %s\n", fname, sqlite3_errmsg(db)); fprintf(stderr, "%s: select failed: %s\n", fname, sqlite3_errmsg(db));
exit(EXIT_SQLITE); exit(EXIT_SQLITE);
} }
r->db = db; stmt = query;
r->stmt = stmt; next = NULL;
r->next = NULL;
} }
}
};
struct reader *begin_reading(char *fname) {
struct reader *r = new reader(fname);
// The reason this prefetches is so the reader queue can be // The reason this prefetches is so the reader queue can be
// priority-ordered, so the one with the next relevant tile // priority-ordered, so the one with the next relevant tile