LLVM
20.0.0git
include
llvm
BinaryFormat
MsgPack.h
Go to the documentation of this file.
1
//===-- MsgPack.h - MessagePack Constants -----------------------*- C++ -*-===//
2
//
3
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4
// See https://llvm.org/LICENSE.txt for license information.
5
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6
//
7
//===----------------------------------------------------------------------===//
8
///
9
/// \file
10
/// This file contains constants used for implementing MessagePack support.
11
///
12
//===----------------------------------------------------------------------===//
13
14
#ifndef LLVM_BINARYFORMAT_MSGPACK_H
15
#define LLVM_BINARYFORMAT_MSGPACK_H
16
17
#include "
llvm/Support/DataTypes.h
"
18
#include "
llvm/Support/Endian.h
"
19
20
namespace
llvm
{
21
namespace
msgpack {
22
23
/// The endianness of all multi-byte encoded values in MessagePack.
24
constexpr
llvm::endianness
Endianness
=
llvm::endianness::big
;
25
26
/// The first byte identifiers of MessagePack object formats.
27
namespace
FirstByte {
28
#define HANDLE_MP_FIRST_BYTE(ID, NAME) constexpr uint8_t NAME = ID;
29
#include "llvm/BinaryFormat/MsgPack.def"
30
}
31
32
/// Most significant bits used to identify "Fix" variants in MessagePack.
33
///
34
/// For example, FixStr objects encode their size in the five least significant
35
/// bits of their first byte, which is identified by the bit pattern "101" in
36
/// the three most significant bits. So FixBits::String contains 0b10100000.
37
///
38
/// A corresponding mask of the bit pattern is found in \c FixBitsMask.
39
namespace
FixBits {
40
#define HANDLE_MP_FIX_BITS(ID, NAME) constexpr uint8_t NAME = ID;
41
#include "llvm/BinaryFormat/MsgPack.def"
42
}
43
44
/// Mask of bits used to identify "Fix" variants in MessagePack.
45
///
46
/// For example, FixStr objects encode their size in the five least significant
47
/// bits of their first byte, which is identified by the bit pattern "101" in
48
/// the three most significant bits. So FixBitsMask::String contains
49
/// 0b11100000.
50
///
51
/// The corresponding bit pattern to mask for is found in FixBits.
52
namespace
FixBitsMask {
53
#define HANDLE_MP_FIX_BITS_MASK(ID, NAME) constexpr uint8_t NAME = ID;
54
#include "llvm/BinaryFormat/MsgPack.def"
55
}
56
57
/// The maximum value or size encodable in "Fix" variants of formats.
58
///
59
/// For example, FixStr objects encode their size in the five least significant
60
/// bits of their first byte, so the largest encodable size is 0b00011111.
61
namespace
FixMax {
62
#define HANDLE_MP_FIX_MAX(ID, NAME) constexpr uint8_t NAME = ID;
63
#include "llvm/BinaryFormat/MsgPack.def"
64
}
65
66
/// The exact size encodable in "Fix" variants of formats.
67
///
68
/// The only objects for which an exact size makes sense are of Extension type.
69
///
70
/// For example, FixExt4 stores an extension type containing exactly four bytes.
71
namespace
FixLen {
72
#define HANDLE_MP_FIX_LEN(ID, NAME) constexpr uint8_t NAME = ID;
73
#include "llvm/BinaryFormat/MsgPack.def"
74
}
75
76
/// The minimum value or size encodable in "Fix" variants of formats.
77
///
78
/// The only object for which a minimum makes sense is a negative FixNum.
79
///
80
/// Negative FixNum objects encode their signed integer value in one byte, but
81
/// they must have the pattern "111" as their three most significant bits. This
82
/// means all values are negative, and the smallest representable value is
83
/// 0b11100000.
84
namespace
FixMin {
85
#define HANDLE_MP_FIX_MIN(ID, NAME) constexpr int8_t NAME = ID;
86
#include "llvm/BinaryFormat/MsgPack.def"
87
}
88
89
}
// end namespace msgpack
90
}
// end namespace llvm
91
92
#endif
// LLVM_BINARYFORMAT_MSGPACK_H
Endian.h
DataTypes.h
llvm::msgpack::Endianness
constexpr llvm::endianness Endianness
The endianness of all multi-byte encoded values in MessagePack.
Definition:
MsgPack.h:24
llvm
This is an optimization pass for GlobalISel generic memory operations.
Definition:
AddressRanges.h:18
llvm::endianness
endianness
Definition:
bit.h:70
llvm::endianness::big
@ big
Generated on Wed Nov 20 2024 23:28:29 for LLVM by
1.9.6