text: //===-- SBStructuredData.h --------------------------------------*- C++ -*-===//
  //
  // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
  // See https://llvm.org/LICENSE.txt for license information.
  // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
  //
  //===----------------------------------------------------------------------===//
  
  #ifndef LLDB_API_SBSTRUCTUREDDATA_H
  #define LLDB_API_SBSTRUCTUREDDATA_H
  
  #include "lldb/API/SBDefines.h"
  #include "lldb/API/SBModule.h"
  
  namespace lldb {
  
  class SBStructuredData {
  public:
    SBStructuredData();
  
    SBStructuredData(const lldb::SBStructuredData &rhs);
  
    SBStructuredData(const lldb::EventSP &event_sp);
    
    SBStructuredData(lldb_private::StructuredDataImpl *impl);
  
    ~SBStructuredData();
  
    lldb::SBStructuredData &operator=(const lldb::SBStructuredData &rhs);
  
    explicit operator bool() const;
  
    bool IsValid() const;
  
    lldb::SBError SetFromJSON(lldb::SBStream &stream);
  
    void Clear();
  
    lldb::SBError GetAsJSON(lldb::SBStream &stream) const;
  
    lldb::SBError GetDescription(lldb::SBStream &stream) const;
  
    /// Return the type of data in this data structure
    lldb::StructuredDataType GetType() const;
    
    /// Return the size (i.e. number of elements) in this data structure
    /// if it is an array or dictionary type. For other types, 0 will be
    //  returned.
    size_t GetSize() const;
  
    /// Fill keys with the keys in this object and return true if this data
    /// structure is a dictionary.  Returns false otherwise.
     bool GetKeys(lldb::SBStringList &keys) const;
    
    /// Return the value corresponding to a key if this data structure
    /// is a dictionary type.
    lldb::SBStructuredData GetValueForKey(const char *key) const;
  
    /// Return the value corresponding to an index if this data structure
    /// is array.
    lldb::SBStructuredData GetItemAtIndex(size_t idx) const;
  
    /// Return the integer value if this data structure is an integer type.
    uint64_t GetIntegerValue(uint64_t fail_value = 0) const;
  
    /// Return the floating point value if this data structure is a floating
    /// type.
    double GetFloatValue(double fail_value = 0.0) const;
  
    /// Return the boolean value if this data structure is a boolean type.
    bool GetBooleanValue(bool fail_value = false) const;
  
    /// Provides the string value if this data structure is a string type.
    ///
    /// \param[out] dst
    ///     pointer where the string value will be written. In case it is null,
    ///     nothing will be written at \a dst.
    ///
    /// \param[in] dst_len
    ///     max number of characters that can be written at \a dst. In case it is
    ///     zero, nothing will be written at \a dst. If this length is not enough
    ///     to write the complete string value, (\a dst_len - 1) bytes of the
    ///     string value will be written at \a dst followed by a null character.
    ///
    /// \return
    ///     Returns the byte size needed to completely write the string value at
    ///     \a dst in all cases.
    size_t GetStringValue(char *dst, size_t dst_len) const;
  
  protected:
    friend class SBTraceOptions;
    friend class SBDebugger;
    friend class SBTarget;
    friend class SBProcess;
    friend class SBThread;
    friend class SBThreadPlan;
    friend class SBBreakpoint;
    friend class SBBreakpointLocation;
    friend class SBBreakpointName;
  
    StructuredDataImplUP m_impl_up;
  };
  } // namespace lldb
  
  #endif // LLDB_API_SBSTRUCTUREDDATA_H
  