1//===-- OptionGroupFormat.h -------------------------------------*- C++ -*-===//
2//
3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4// See https://llvm.org/LICENSE.txt for license information.
5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6//
7//===----------------------------------------------------------------------===//
8
9#ifndef LLDB_INTERPRETER_OPTIONGROUPFORMAT_H
10#define LLDB_INTERPRETER_OPTIONGROUPFORMAT_H
11
12#include "lldb/Interpreter/OptionValueFormat.h"
13#include "lldb/Interpreter/OptionValueSInt64.h"
14#include "lldb/Interpreter/OptionValueUInt64.h"
15#include "lldb/Interpreter/Options.h"
16
17namespace lldb_private {
18
19typedef std::vector<std::tuple<lldb::CommandArgumentType, const char *>>
20 OptionGroupFormatUsageTextVector;
21
22// OptionGroupFormat
23
24class OptionGroupFormat : public OptionGroup {
25public:
26 static const uint32_t OPTION_GROUP_FORMAT = LLDB_OPT_SET_1;
27 static const uint32_t OPTION_GROUP_GDB_FMT = LLDB_OPT_SET_2;
28 static const uint32_t OPTION_GROUP_SIZE = LLDB_OPT_SET_3;
29 static const uint32_t OPTION_GROUP_COUNT = LLDB_OPT_SET_4;
30
31 OptionGroupFormat(
32 lldb::Format default_format,
33 uint64_t default_byte_size =
34 UINT64_MAX, // Pass UINT64_MAX to disable the "--size" option
35 uint64_t default_count =
36 UINT64_MAX, // Pass UINT64_MAX to disable the "--count" option
37 OptionGroupFormatUsageTextVector usage_text_vector = {}
38 // Use to override default option usage text with the command specific one
39 );
40
41 ~OptionGroupFormat() override = default;
42
43 llvm::ArrayRef<OptionDefinition> GetDefinitions() override;
44
45 Status SetOptionValue(uint32_t option_idx, llvm::StringRef option_value,
46 ExecutionContext *execution_context) override;
47
48 void OptionParsingStarting(ExecutionContext *execution_context) override;
49
50 lldb::Format GetFormat() const { return m_format.GetCurrentValue(); }
51
52 OptionValueFormat &GetFormatValue() { return m_format; }
53
54 const OptionValueFormat &GetFormatValue() const { return m_format; }
55
56 OptionValueUInt64 &GetByteSizeValue() { return m_byte_size; }
57
58 const OptionValueUInt64 &GetByteSizeValue() const { return m_byte_size; }
59
60 OptionValueUInt64 &GetCountValue() { return m_count; }
61
62 const OptionValueUInt64 &GetCountValue() const { return m_count; }
63
64 bool HasGDBFormat() const { return m_has_gdb_format; }
65
66 bool AnyOptionWasSet() const {
67 return m_format.OptionWasSet() || m_byte_size.OptionWasSet() ||
68 m_count.OptionWasSet();
69 }
70
71protected:
72 bool ParserGDBFormatLetter(ExecutionContext *execution_context,
73 char format_letter, lldb::Format &format,
74 uint32_t &byte_size);
75
76 OptionValueFormat m_format;
77 OptionValueUInt64 m_byte_size;
78 OptionValueUInt64 m_count;
79 char m_prev_gdb_format;
80 char m_prev_gdb_size;
81 bool m_has_gdb_format;
82 OptionDefinition m_option_definitions[4];
83};
84
85} // namespace lldb_private
86
87#endif // LLDB_INTERPRETER_OPTIONGROUPFORMAT_H
88

source code of lldb/include/lldb/Interpreter/OptionGroupFormat.h