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