LLVM 19.0.0git
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
18#include "llvm/Support/Endian.h"
19
20namespace llvm {
21namespace msgpack {
22
23/// The endianness of all multi-byte encoded values in MessagePack.
25
26/// The first byte identifiers of MessagePack object formats.
27namespace 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.
39namespace 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.
52namespace 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.
61namespace 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.
71namespace 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.
84namespace 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
constexpr llvm::endianness Endianness
The endianness of all multi-byte encoded values in MessagePack.
Definition: MsgPack.h:24
This is an optimization pass for GlobalISel generic memory operations.
Definition: AddressRanges.h:18
endianness
Definition: bit.h:70