LLVM 22.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.
 
LLVM_ABI 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.
 
LLVM_ABI 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.
 
LLVM_ABI void toYAML (raw_ostream &OS)
 Convert MsgPack Document to YAML text.
 
LLVM_ABI 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 280 of file MsgPackDocument.h.

Constructor & Destructor Documentation

◆ Document()

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

Definition at line 297 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 441 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 307 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 399 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 310 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 451 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 391 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 350 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 375 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 357 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 329 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 322 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 381 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 365 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 336 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 343 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 135 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 448 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: