diff --git a/mbtiles.cpp b/mbtiles.cpp index f24c91dd..0c89ef34 100644 --- a/mbtiles.cpp +++ b/mbtiles.cpp @@ -101,19 +101,6 @@ sqlite3 *mbtiles_open(char *dbname, char **argv, int forcetable) { return outdb; } -unsigned long long fnv1a(std::string const &s) { - // Store tiles by a hash of their contents (fnv1a 64-bit) - // http://www.isthe.com/chongo/tech/comp/fnv/ - const unsigned long long fnv_offset_basis = 14695981039346656037u; - const unsigned long long fnv_prime = 1099511628211u; - unsigned long long h = fnv_offset_basis; - for (size_t i = 0; i < s.size(); i++) { - h ^= (unsigned char) s[i]; - h *= fnv_prime; - } - return h; -} - void mbtiles_write_tile(sqlite3 *outdb, int z, int tx, int ty, const char *data, int size) { std::string hash = std::to_string(fnv1a(std::string(data, size))); diff --git a/mbtiles.hpp b/mbtiles.hpp index b1837668..8863df60 100644 --- a/mbtiles.hpp +++ b/mbtiles.hpp @@ -78,6 +78,4 @@ std::map merge_layermaps(std::vector &tilestats, std::string const &layername, serial_val const &val); -unsigned long long fnv1a(std::string const &s); - #endif diff --git a/text.cpp b/text.cpp index 0d0f0460..21dc0b02 100644 --- a/text.cpp +++ b/text.cpp @@ -184,3 +184,31 @@ char *dtoa_milo(double val) { } return dup; } + +unsigned long long fnv1a(std::string const &s) { + // Store tiles by a hash of their contents (fnv1a 64-bit) + // http://www.isthe.com/chongo/tech/comp/fnv/ + const unsigned long long fnv_offset_basis = 14695981039346656037u; + const unsigned long long fnv_prime = 1099511628211u; + unsigned long long h = fnv_offset_basis; + for (size_t i = 0; i < s.size(); i++) { + h ^= (unsigned char) s[i]; + h *= fnv_prime; + } + return h; +} + +unsigned long long fnv1a(const char *s, char additional) { + // Store tiles by a hash of their contents (fnv1a 64-bit) + // http://www.isthe.com/chongo/tech/comp/fnv/ + const unsigned long long fnv_offset_basis = 14695981039346656037u; + const unsigned long long fnv_prime = 1099511628211u; + unsigned long long h = fnv_offset_basis; + for (size_t i = 0; s[i] != '\0'; i++) { + h ^= (unsigned char) s[i]; + h *= fnv_prime; + } + h ^= (unsigned char) additional; + h *= fnv_prime; + return h; +} diff --git a/text.hpp b/text.hpp index 94e41f2c..930aa227 100644 --- a/text.hpp +++ b/text.hpp @@ -8,5 +8,7 @@ const char *utf8_next(const char *s, long *c); std::string truncate16(std::string const &s, size_t runes); int integer_zoom(std::string where, std::string text); std::string format_commandline(int argc, char **argv); +unsigned long long fnv1a(std::string const &s); +unsigned long long fnv1a(const char *s, char additional); #endif