LLVM 20.0.0git
Public Member Functions | List of all members
llvm::msgpack::Document Class Reference

Simple in-memory representation of a document of msgpack objects with ability to find and create array and map elements. More...

#include "llvm/BinaryFormat/MsgPackDocument.h"

Public Member Functions

 Document ()
 
DocNodegetRoot ()
 Get ref to the document's root element.
 
void clear ()
 Restore the Document to an empty state.
 
DocNode getEmptyNode ()
 Create an empty node associated with this Document.
 
DocNode getNode ()
 Create a nil node associated with this Document.
 
DocNode getNode (int64_t V)
 Create an Int node associated with this Document.
 
DocNode getNode (int V)
 Create an Int node associated with this Document.
 
DocNode getNode (uint64_t V)
 Create a UInt node associated with this Document.
 
DocNode getNode (unsigned V)
 Create a UInt node associated with this Document.
 
DocNode getNode (bool V)
 Create a Boolean node associated with this Document.
 
DocNode getNode (double V)
 Create a Float node associated with this Document.
 
DocNode getNode (StringRef V, bool Copy=false)
 Create a String node associated with this Document.
 
DocNode getNode (const char *V, bool Copy=false)
 Create a String node associated with this Document.
 
DocNode getNode (MemoryBufferRef V, bool Copy=false)
 Create a Binary node associated with this Document.
 
MapDocNode getMapNode ()
 Create an empty Map node associated with this Document.
 
ArrayDocNode getArrayNode ()
 Create an empty Array node associated with this Document.
 
bool readFromBlob (StringRef Blob, bool Multi, function_ref< int(DocNode *DestNode, DocNode SrcNode, DocNode MapKey)> Merger=[](DocNode *DestNode, DocNode SrcNode, DocNode MapKey) { return -1;})
 Read a document from a binary msgpack blob, merging into anything already in the Document.
 
void writeToBlob (std::string &Blob)
 Write a MsgPack document to a binary MsgPack blob.
 
StringRef addString (StringRef S)
 Copy a string into the Document's strings list, and return the copy that is owned by the Document.
 
void setHexMode (bool Val=true)
 Set whether YAML output uses hex for UInt. Default off.
 
bool getHexMode () const
 Get Hexmode flag.
 
void toYAML (raw_ostream &OS)
 Convert MsgPack Document to YAML text.
 
bool fromYAML (StringRef S)
 Read YAML text into the MsgPack document. Returns false on failure.
 

Detailed Description

Simple in-memory representation of a document of msgpack objects with ability to find and create array and map elements.

Does not currently cope with any extension types.

Definition at line 278 of file MsgPackDocument.h.

Constructor & Destructor Documentation

◆ Document()

llvm::msgpack::Document::Document ( )
inline

Definition at line 295 of file MsgPackDocument.h.

References clear(), llvm::msgpack::Empty, and T.

Member Function Documentation

◆ addString()

StringRef llvm::msgpack::Document::addString ( StringRef  S)
inline

Copy a string into the Document's strings list, and return the copy that is owned by the Document.

Definition at line 439 of file MsgPackDocument.h.

References llvm::StringRef::data(), and llvm::StringRef::size().

Referenced by getNode().

◆ clear()

void llvm::msgpack::Document::clear ( )
inline

Restore the Document to an empty state.

Definition at line 305 of file MsgPackDocument.h.

References getEmptyNode(), and getRoot().

Referenced by Document(), and llvm::AMDGPUPALMetadata::reset().

◆ fromYAML()

bool msgpack::Document::fromYAML ( StringRef  S)

Read YAML text into the MsgPack document. Returns false on failure.

Definition at line 242 of file MsgPackDocumentYAML.cpp.

References getRoot().

Referenced by llvm::AMDGPUTargetStreamer::EmitHSAMetadataV3(), llvm::AMDGPUPALMetadata::setFromString(), and llvm::AMDGPU::HSAMD::MetadataStreamerMsgPackV4::verify().

◆ getArrayNode()

ArrayDocNode llvm::msgpack::Document::getArrayNode ( )
inline

Create an empty Array node associated with this Document.

Definition at line 397 of file MsgPackDocument.h.

References llvm::msgpack::Array, and N.

Referenced by llvm::AMDGPU::HSAMD::MetadataStreamerMsgPackV4::emitKernelLanguage(), and readFromBlob().

◆ getEmptyNode()

DocNode llvm::msgpack::Document::getEmptyNode ( )
inline

Create an empty node associated with this Document.

Definition at line 308 of file MsgPackDocument.h.

References llvm::msgpack::Empty, and N.

Referenced by clear(), getNode(), llvm::msgpack::MapDocNode::operator[](), and llvm::AMDGPUPALMetadata::reset().

◆ getHexMode()

bool llvm::msgpack::Document::getHexMode ( ) const
inline

Get Hexmode flag.

Definition at line 449 of file MsgPackDocument.h.

Referenced by llvm::msgpack::DocNode::toString().

◆ getMapNode()

MapDocNode llvm::msgpack::Document::getMapNode ( )
inline

Create an empty Map node associated with this Document.

Definition at line 389 of file MsgPackDocument.h.

References llvm::msgpack::Map, and N.

Referenced by readFromBlob(), llvm::AMDGPUPALMetadata::setFromString(), and llvm::AMDGPUPALMetadata::toString().

◆ getNode() [1/10]

DocNode llvm::msgpack::Document::getNode ( )
inline

◆ getNode() [2/10]

DocNode llvm::msgpack::Document::getNode ( bool  V)
inline

Create a Boolean node associated with this Document.

Definition at line 348 of file MsgPackDocument.h.

References llvm::msgpack::Boolean, and N.

◆ getNode() [3/10]

DocNode llvm::msgpack::Document::getNode ( const char V,
bool  Copy = false 
)
inline

Create a String node associated with this Document.

If !Copy, the passed string must remain valid for the lifetime of the Document.

Definition at line 373 of file MsgPackDocument.h.

References getNode().

◆ getNode() [4/10]

DocNode llvm::msgpack::Document::getNode ( double  V)
inline

Create a Float node associated with this Document.

Definition at line 355 of file MsgPackDocument.h.

References llvm::msgpack::Float, and N.

◆ getNode() [5/10]

DocNode llvm::msgpack::Document::getNode ( int  V)
inline

Create an Int node associated with this Document.

Definition at line 327 of file MsgPackDocument.h.

References llvm::msgpack::Int, and N.

◆ getNode() [6/10]

DocNode llvm::msgpack::Document::getNode ( int64_t  V)
inline

Create an Int node associated with this Document.

Definition at line 320 of file MsgPackDocument.h.

References llvm::msgpack::Int, and N.

◆ getNode() [7/10]

DocNode llvm::msgpack::Document::getNode ( MemoryBufferRef  V,
bool  Copy = false 
)
inline

Create a Binary node associated with this Document.

If !Copy, the passed buffer must remain valid for the lifetime of the Document.

Definition at line 379 of file MsgPackDocument.h.

References addString(), llvm::msgpack::Binary, and N.

◆ getNode() [8/10]

DocNode llvm::msgpack::Document::getNode ( StringRef  V,
bool  Copy = false 
)
inline

Create a String node associated with this Document.

If !Copy, the passed string must remain valid for the lifetime of the Document.

Definition at line 363 of file MsgPackDocument.h.

References addString(), N, and llvm::msgpack::String.

◆ getNode() [9/10]

DocNode llvm::msgpack::Document::getNode ( uint64_t  V)
inline

Create a UInt node associated with this Document.

Definition at line 334 of file MsgPackDocument.h.

References N, and llvm::msgpack::UInt.

◆ getNode() [10/10]

DocNode llvm::msgpack::Document::getNode ( unsigned  V)
inline

Create a UInt node associated with this Document.

Definition at line 341 of file MsgPackDocument.h.

References N, and llvm::msgpack::UInt.

◆ getRoot()

DocNode & llvm::msgpack::Document::getRoot ( )
inline

◆ readFromBlob()

bool Document::readFromBlob ( StringRef  Blob,
bool  Multi,
function_ref< int(DocNode *DestNode, DocNode SrcNode, DocNode MapKey)>  Merger = [](DocNode *DestNode, DocNode SrcNode, DocNode MapKey) { return -1; } 
)

Read a document from a binary msgpack blob, merging into anything already in the Document.

The blob data must remain valid for the lifetime of this Document (because a string object in the document contains a StringRef into the original blob). If Multi, then this sets root to an array and adds top-level objects to it. If !Multi, then it only reads a single top-level object, even if there are more, and sets root to that. Returns false if failed due to illegal format or merge error.

The Merger arg is a callback function that is called when the merge has a conflict, that is, it is trying to set an item that is already set. If the conflict cannot be resolved, the callback function returns -1. If the conflict can be resolved, the callback returns a non-negative number and sets *DestNode to the resolved node. The returned non-negative number is significant only for an array node; it is then the array index to start populating at. That allows Merger to choose whether to merge array elements (returns 0) or append new elements (returns existing size).

If SrcNode is an array or map, the resolution must be that *DestNode is an array or map respectively, although it could be the array or map (respectively) that was already there. MapKey is the key if *DestNode is a map entry, a nil node otherwise.

The default for Merger is to disallow any conflict.

Definition at line 131 of file MsgPackDocument.cpp.

References llvm::msgpack::Array, assert(), llvm::msgpack::Binary, llvm::msgpack::Object::Bool, llvm::msgpack::Boolean, llvm::consumeError(), llvm::msgpack::Float, llvm::msgpack::Object::Float, llvm::Expected< T >::get(), getArrayNode(), llvm::msgpack::DocNode::getKind(), getMapNode(), getNode(), llvm::msgpack::Int, llvm::msgpack::Object::Int, llvm::msgpack::DocNode::isArray(), llvm::msgpack::DocNode::isEmpty(), llvm::msgpack::DocNode::isMap(), llvm::msgpack::Object::Kind, llvm::msgpack::Object::Length, llvm::msgpack::Map, Merger, llvm::msgpack::Nil, llvm::msgpack::Object::Raw, llvm::msgpack::Reader::read(), llvm::msgpack::String, llvm::Expected< T >::takeError(), llvm::msgpack::UInt, and llvm::msgpack::Object::UInt.

◆ setHexMode()

void llvm::msgpack::Document::setHexMode ( bool  Val = true)
inline

Set whether YAML output uses hex for UInt. Default off.

Definition at line 446 of file MsgPackDocument.h.

Referenced by llvm::AMDGPUPALMetadata::toString().

◆ toYAML()

void msgpack::Document::toYAML ( raw_ostream OS)

◆ writeToBlob()

void Document::writeToBlob ( std::string &  Blob)

The documentation for this class was generated from the following files: