Go to the documentation of this file.
15 #ifndef BLOATY_UTIL_H_
16 #define BLOATY_UTIL_H_
20 #include "absl/numeric/int128.h"
21 #include "absl/strings/string_view.h"
22 #include "absl/strings/substitute.h"
26 class Error :
public std::runtime_error {
45 #define THROW(msg) Throw(msg, __LINE__)
46 #define THROWF(...) Throw(absl::Substitute(__VA_ARGS__).c_str(), __LINE__)
48 if (verbose_level > 0) { \
49 printf("WARNING: %s\n", absl::Substitute(__VA_ARGS__).c_str()); \
52 #if !defined(_MSC_VER)
53 #define BLOATY_UNREACHABLE() do { \
55 __builtin_unreachable(); \
58 #define BLOATY_UNREACHABLE() do { \
66 #define BLOATY_ASSERT(expr) do {} while (false && (expr))
68 #define BLOATY_ASSERT(expr) assert(expr)
75 THROW(
"integer overflow in addition");
84 THROW(
"integer overflow in multiply");
93 THROW(
"region out-of-bounds");
95 return data.substr(off,
n);
99 if (off >
data.size()) {
100 THROW(
"region out-of-bounds");
102 return data.substr(off);
108 return (
offset + granularity - 1) & ~(granularity - 1);
123 template <
size_t N,
class T> constexpr
T _BS(
T val) {
124 if constexpr (
N == 1) {
127 size_t bits = 8 * (
N / 2);
128 return (_BS<N / 2>(val) <<
bits) | _BS<N / 2>(val >>
bits);
134 return _BS<sizeof(T)>(val);
138 static_assert(
N <=
sizeof(
T),
"N too big for this data type");
140 if (
data->size() <
N) {
141 THROW(
"premature EOF reading fixed-length data");
144 data->remove_prefix(
N);
149 T val = ReadFixed<T>(
data);
167 THROW(
"premature EOF reading variable-length DWARF data");
180 #endif // BLOATY_UTIL_H_
#define ABSL_ATTRIBUTE_NORETURN
Error(const char *msg, const char *file, int line)
T ReadEndian(absl::string_view *data, Endian endian)
#define T(upbtypeconst, upbtype, ctype, default_value)
memcpy(mem, inblock.get(), min(CONTAINING_RECORD(inblock.get(), MEMBLOCK, data) ->size, size))
void SkipBytes(size_t bytes, absl::string_view *data)
void CheckedAdd(int64_t *accum, int64_t val)
unsigned __int64 uint64_t
T ReadFixed(absl::string_view *data)
OPENSSL_EXPORT ASN1_BIT_STRING * bits
uint64_t CheckedMul(uint64_t a, uint64_t b)
T ReadLittleEndian(absl::string_view *data)
size_t AlignUp(size_t offset, size_t granularity)
const char * file() const
UniquePtr< SSL_SESSION > ret
absl::string_view ReadNullTerminated(absl::string_view *data)
#define BLOATY_ASSERT(expr)
T ReadBigEndian(absl::string_view *data)
Endian GetMachineEndian()
ABSL_ATTRIBUTE_NORETURN void Throw(const char *str, int line)
absl::string_view StrictSubstr(absl::string_view data, size_t off, size_t n)
absl::string_view ReadBytes(size_t bytes, absl::string_view *data)
constexpr T ByteSwap(T val)
grpc
Author(s):
autogenerated on Thu Mar 13 2025 03:01:48