/*
- * Copyright 2014 Facebook, Inc.
+ * Copyright 2017 Facebook, Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* limitations under the License.
*/
-#ifndef FOLLY_VARINT_H_
-#define FOLLY_VARINT_H_
+#pragma once
#include <type_traits>
#include <folly/Conv.h>
inline uint64_t encodeZigZag(int64_t val) {
// Bit-twiddling magic stolen from the Google protocol buffer document;
// val >> 63 is an arithmetic shift because val is signed
- return static_cast<uint64_t>((val << 1) ^ (val >> 63));
+ auto uval = static_cast<uint64_t>(val);
+ return static_cast<uint64_t>((uval << 1) ^ (val >> 63));
}
inline int64_t decodeZigZag(uint64_t val) {
*p++ = 0x80 | (val & 0x7f);
val >>= 7;
}
- *p++ = val;
- return p - buf;
+ *p++ = uint8_t(val);
+ return size_t(p - buf);
}
template <class T>
val |= static_cast<uint64_t>(*p++) << shift;
}
- data.advance(p - begin);
+ data.uncheckedAdvance(p - begin);
return val;
}
} // namespaces
-
-#endif /* FOLLY_VARINT_H_ */