1353952Sdim//===-- OptionGroupPythonClassWithDict.h -------------------------------------*- C++ -*-===// 2353952Sdim// 3353952Sdim// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4353952Sdim// See https://llvm.org/LICENSE.txt for license information. 5353952Sdim// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6353952Sdim// 7353952Sdim//===----------------------------------------------------------------------===// 8353952Sdim 9353952Sdim#ifndef liblldb_OptionGroupPythonClassWithDict_h_ 10353952Sdim#define liblldb_OptionGroupPythonClassWithDict_h_ 11353952Sdim 12353952Sdim#include "lldb/lldb-types.h" 13353952Sdim#include "lldb/Interpreter/Options.h" 14353952Sdim#include "lldb/Utility/StructuredData.h" 15353952Sdim 16353952Sdimnamespace lldb_private { 17353952Sdim 18353952Sdim// Use this Option group if you have a python class that implements some 19353952Sdim// Python extension point, and you pass a SBStructuredData to the class 20353952Sdim// __init__ method. 21353952Sdim// class_option specifies the class name 22353952Sdim// the key and value options are read in in pairs, and a 23353952Sdim// StructuredData::Dictionary is constructed with those pairs. 24353952Sdimclass OptionGroupPythonClassWithDict : public OptionGroup { 25353952Sdimpublic: 26353952Sdim OptionGroupPythonClassWithDict(const char *class_use, 27357095Sdim bool is_class = true, 28357095Sdim int class_option = 'C', 29357095Sdim int key_option = 'k', 30357095Sdim int value_option = 'v'); 31353952Sdim 32353952Sdim ~OptionGroupPythonClassWithDict() override; 33353952Sdim 34353952Sdim llvm::ArrayRef<OptionDefinition> GetDefinitions() override { 35353952Sdim return llvm::ArrayRef<OptionDefinition>(m_option_definition); 36353952Sdim } 37353952Sdim 38353952Sdim Status SetOptionValue(uint32_t option_idx, llvm::StringRef option_value, 39353952Sdim ExecutionContext *execution_context) override; 40353952Sdim Status SetOptionValue(uint32_t, const char *, ExecutionContext *) = delete; 41353952Sdim 42353952Sdim void OptionParsingStarting(ExecutionContext *execution_context) override; 43353952Sdim Status OptionParsingFinished(ExecutionContext *execution_context) override; 44353952Sdim 45353952Sdim const StructuredData::DictionarySP GetStructuredData() { 46353952Sdim return m_dict_sp; 47353952Sdim } 48357095Sdim const std::string &GetName() { 49357095Sdim return m_name; 50353952Sdim } 51353952Sdim 52353952Sdimprotected: 53357095Sdim std::string m_name; 54353952Sdim std::string m_current_key; 55353952Sdim StructuredData::DictionarySP m_dict_sp; 56353952Sdim std::string m_class_usage_text, m_key_usage_text, m_value_usage_text; 57357095Sdim bool m_is_class; 58357095Sdim OptionDefinition m_option_definition[4]; 59353952Sdim}; 60353952Sdim 61353952Sdim} // namespace lldb_private 62353952Sdim 63353952Sdim#endif // liblldb_OptionGroupPythonClassWithDict_h_ 64