emscripten support
This commit is contained in:
@@ -21,7 +21,7 @@ struct pbf {
|
||||
// inline pbf(const std::string& buffer);
|
||||
|
||||
inline bool next();
|
||||
inline uint64_t varint();
|
||||
template <typename T = uint32_t> inline T varint();
|
||||
inline int64_t svarint();
|
||||
inline std::string string();
|
||||
inline float float32();
|
||||
@@ -68,17 +68,18 @@ bool pbf::next()
|
||||
}
|
||||
|
||||
|
||||
uint64_t pbf::varint()
|
||||
template <typename T>
|
||||
T pbf::varint()
|
||||
{
|
||||
uint8_t byte = 0x80;
|
||||
uint64_t result = 0;
|
||||
T result = 0;
|
||||
int bitpos;
|
||||
for (bitpos = 0; bitpos < 70 && (byte & 0x80); bitpos += 7) {
|
||||
if (data >= end) {
|
||||
fprintf(stderr, "unterminated varint, unexpected end of buffer");
|
||||
exit(1);
|
||||
}
|
||||
result |= ((uint64_t)(byte = *data) & 0x7F) << bitpos;
|
||||
result |= ((T)(byte = *data) & 0x7F) << bitpos;
|
||||
|
||||
data++;
|
||||
}
|
||||
|
||||
@@ -69,15 +69,15 @@ void tile::parseFeature(const uint8_t *data, uint32_t bytes) {
|
||||
pbf feature(data, bytes);
|
||||
while (feature.next()) {
|
||||
if (feature.tag == 1) {
|
||||
uint64_t id = feature.varint();
|
||||
uint32_t id = feature.varint();
|
||||
} else if (feature.tag == 2) {
|
||||
const uint8_t *tag_end = feature.data + feature.varint();
|
||||
while (feature.data < tag_end) {
|
||||
uint32_t key = (uint32_t)feature.varint();
|
||||
uint32_t value = (uint32_t)feature.varint();
|
||||
uint32_t key = feature.varint();
|
||||
uint32_t value = feature.varint();
|
||||
}
|
||||
} else if (feature.tag == 3) {
|
||||
uint32_t type = (uint32_t)feature.varint();
|
||||
uint32_t type = feature.varint();
|
||||
} else if (feature.tag == 4) {
|
||||
uint32_t bytes = (uint32_t)feature.varint();
|
||||
loadGeometry(feature.data, bytes);
|
||||
|
||||
Reference in New Issue
Block a user