Subversion Repositories QNX 8.QNX8 LLVM/Clang compiler suite

Rev

Blame | Last modification | View Log | Download | RSS feed

  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 support::endianness Endianness = support::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
  93.