10 #ifndef LLVM_DEBUGINFO_CODEVIEW_RECORDSERIALIZATION_H
11 #define LLVM_DEBUGINFO_CODEVIEW_RECORDSERIALIZATION_H
84 template <
typename T,
typename U>
106 while (!Reader.
empty() && Reader.
peek() < LF_PAD0) {
109 Item.push_back(Field);
124 "Null terminated string is empty!");
126 while (Reader.
peek() != 0) {
130 Item.push_back(Field);
132 return Reader.
skip(1);
159 template <
typename T,
typename U>
164 inline serialize_null_term_string_array_impl
169 template <
typename T>
174 template <
typename T>
187 #define CV_CONDITIONAL_FIELD(I, C) \
188 serialize_conditional(I, [&]() { return !!(C); })
192 #define CV_ARRAY_FIELD_N(I, N) serialize_array(I, [&]() { return N; })
195 #define CV_ARRAY_FIELD_TAIL(I) serialize_array_tail(I)
199 #define CV_STRING_ARRAY_NULL_TERM(I) serialize_null_term_string_array(I)
201 #define CV_NUMERIC_FIELD(I) serialize_numeric(I)
203 template <
typename T,
typename U>
209 template <
typename T,
typename U>
220 template <
typename T>
226 template <
typename T>
232 template <
typename T>
238 template <
typename T,
typename U,
typename...
Args>
242 return consume(Reader,
Y, std::forward<Args>(Rest)...);
245 #define CV_DESERIALIZE(...) \
246 if (auto EC = consume(__VA_ARGS__)) \
247 return std::move(EC);
Error deserialize(msf::StreamReader &Reader) const
Error consume(msf::StreamReader &Reader)
serialize_vector_tail_impl< T > serialize_array_tail(std::vector< T > &Item)
Error deserialize(msf::StreamReader &Reader) const
serialize_numeric_impl(T &Item)
serialize_conditional_impl(T &Item, U Func)
Error readZeroString(StringRef &Dest)
serialize_array_impl(ArrayRef< T > &Item, U Func)
serialize_null_term_string_array_impl serialize_null_term_string_array(std::vector< StringRef > &Item)
serialize_array_impl< T, U > serialize_array(ArrayRef< T > &Item, U Func)
Error deserialize(msf::StreamReader &Reader) const
Error readArray(ArrayRef< T > &Array, uint32_t NumElements)
Error skip(uint32_t Amount)
static GCMetadataPrinterRegistry::Add< ErlangGCPrinter > X("erlang","erlang-compatible garbage collector")
static ErrorSuccess success()
Create a success value.
detail::packed_endian_specific_integral< int32_t, little, unaligned > little32_t
std::vector< StringRef > & Item
serialize_arrayref_tail_impl(ArrayRef< T > &Item)
detail::packed_endian_specific_integral< uint16_t, little, unaligned > ulittle16_t
serialize_null_term_string_array_impl(std::vector< StringRef > &Item)
serialize_vector_tail_impl(std::vector< T > &Item)
StringRef getBytesAsCharacters(ArrayRef< uint8_t > LeafData)
Reinterpret a byte array as an array of characters.
StringRef getBytesAsCString(ArrayRef< uint8_t > LeafData)
Error deserialize(msf::StreamReader &Reader) const
Error consume_numeric(msf::StreamReader &Reader, uint64_t &Value)
Decodes a numeric leaf value that is known to be a particular type.
Error deserialize(msf::StreamReader &Reader) const
serialize_numeric_impl< T > serialize_numeric(T &Item)
uint32_t bytesRemaining() const
detail::packed_endian_specific_integral< uint32_t, little, unaligned > ulittle32_t
Error deserialize(msf::StreamReader &Reader) const
LLVM Value Representation.
Lightweight error class with error context and mandatory checking.
StringRef - Represent a constant reference to a string, i.e.
static GCMetadataPrinterRegistry::Add< OcamlGCMetadataPrinter > Y("ocaml","ocaml 3.10-compatible collector")
serialize_conditional_impl< T, U > serialize_conditional(T &Item, U Func)
Error readObject(const T *&Dest)