OptionGroupPythonClassWithDict.h revision 360784
1204861Sdes//===-- OptionGroupPythonClassWithDict.h -------------------------------------*- C++ -*-===// 2204861Sdes// 3204861Sdes// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4204861Sdes// See https://llvm.org/LICENSE.txt for license information. 5204861Sdes// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6204861Sdes// 7204861Sdes//===----------------------------------------------------------------------===// 8204861Sdes 9204861Sdes#ifndef liblldb_OptionGroupPythonClassWithDict_h_ 10204861Sdes#define liblldb_OptionGroupPythonClassWithDict_h_ 11204861Sdes 12204861Sdes#include "lldb/lldb-types.h" 13204861Sdes#include "lldb/Interpreter/Options.h" 14204861Sdes#include "lldb/Utility/StructuredData.h" 15204861Sdes 16204861Sdesnamespace lldb_private { 17204861Sdes 18204861Sdes// Use this Option group if you have a python class that implements some 19204861Sdes// Python extension point, and you pass a SBStructuredData to the class 20204861Sdes// __init__ method. 21204861Sdes// class_option specifies the class name 22204861Sdes// the key and value options are read in in pairs, and a 23204861Sdes// StructuredData::Dictionary is constructed with those pairs. 24204861Sdesclass OptionGroupPythonClassWithDict : public OptionGroup { 25204861Sdespublic: 26204861Sdes OptionGroupPythonClassWithDict(const char *class_use, 27204861Sdes bool is_class = true, 28204861Sdes int class_option = 'C', 29204861Sdes int key_option = 'k', 30204861Sdes int value_option = 'v'); 31204861Sdes 32204861Sdes ~OptionGroupPythonClassWithDict() override; 33204861Sdes 34204861Sdes llvm::ArrayRef<OptionDefinition> GetDefinitions() override { 35204861Sdes return llvm::ArrayRef<OptionDefinition>(m_option_definition); 36204861Sdes } 37204861Sdes 38204861Sdes Status SetOptionValue(uint32_t option_idx, llvm::StringRef option_value, 39204861Sdes ExecutionContext *execution_context) override; 40204861Sdes Status SetOptionValue(uint32_t, const char *, ExecutionContext *) = delete; 41204861Sdes 42204861Sdes void OptionParsingStarting(ExecutionContext *execution_context) override; 43204861Sdes Status OptionParsingFinished(ExecutionContext *execution_context) override; 44204861Sdes 45204861Sdes const StructuredData::DictionarySP GetStructuredData() { 46204861Sdes return m_dict_sp; 47204861Sdes } 48204861Sdes const std::string &GetName() { 49204861Sdes return m_name; 50204861Sdes } 51204861Sdes 52204861Sdesprotected: 53204861Sdes std::string m_name; 54204861Sdes std::string m_current_key; 55204861Sdes StructuredData::DictionarySP m_dict_sp; 56204861Sdes std::string m_class_usage_text, m_key_usage_text, m_value_usage_text; 57204861Sdes bool m_is_class; 58204861Sdes OptionDefinition m_option_definition[4]; 59204861Sdes}; 60204861Sdes 61204861Sdes} // namespace lldb_private 62204861Sdes 63204861Sdes#endif // liblldb_OptionGroupPythonClassWithDict_h_ 64204861Sdes