10b57cec5SDimitry Andric //===-- OptionValueBoolean.h ------------------------------------*- C++ -*-===// 20b57cec5SDimitry Andric // 30b57cec5SDimitry Andric // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 40b57cec5SDimitry Andric // See https://llvm.org/LICENSE.txt for license information. 50b57cec5SDimitry Andric // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 60b57cec5SDimitry Andric // 70b57cec5SDimitry Andric //===----------------------------------------------------------------------===// 80b57cec5SDimitry Andric 95ffd83dbSDimitry Andric #ifndef LLDB_INTERPRETER_OPTIONVALUEBOOLEAN_H 105ffd83dbSDimitry Andric #define LLDB_INTERPRETER_OPTIONVALUEBOOLEAN_H 110b57cec5SDimitry Andric 120b57cec5SDimitry Andric #include "lldb/Interpreter/OptionValue.h" 130b57cec5SDimitry Andric 140b57cec5SDimitry Andric namespace lldb_private { 150b57cec5SDimitry Andric 16fe6060f1SDimitry Andric class OptionValueBoolean : public Cloneable<OptionValueBoolean, OptionValue> { 170b57cec5SDimitry Andric public: OptionValueBoolean(bool value)180b57cec5SDimitry Andric OptionValueBoolean(bool value) 19fe6060f1SDimitry Andric : m_current_value(value), m_default_value(value) {} OptionValueBoolean(bool current_value,bool default_value)200b57cec5SDimitry Andric OptionValueBoolean(bool current_value, bool default_value) 21fe6060f1SDimitry Andric : m_current_value(current_value), m_default_value(default_value) {} 220b57cec5SDimitry Andric 23fe6060f1SDimitry Andric ~OptionValueBoolean() override = default; 240b57cec5SDimitry Andric 250b57cec5SDimitry Andric // Virtual subclass pure virtual overrides 260b57cec5SDimitry Andric GetType()270b57cec5SDimitry Andric OptionValue::Type GetType() const override { return eTypeBoolean; } 280b57cec5SDimitry Andric 290b57cec5SDimitry Andric void DumpValue(const ExecutionContext *exe_ctx, Stream &strm, 300b57cec5SDimitry Andric uint32_t dump_mask) override; 310b57cec5SDimitry Andric ToJSON(const ExecutionContext * exe_ctx)32*bdd1243dSDimitry Andric llvm::json::Value ToJSON(const ExecutionContext *exe_ctx) override { 33*bdd1243dSDimitry Andric return m_current_value; 34*bdd1243dSDimitry Andric } 35*bdd1243dSDimitry Andric 360b57cec5SDimitry Andric Status 370b57cec5SDimitry Andric SetValueFromString(llvm::StringRef value, 380b57cec5SDimitry Andric VarSetOperationType op = eVarSetOperationAssign) override; 390b57cec5SDimitry Andric Clear()40e8d8bef9SDimitry Andric void Clear() override { 410b57cec5SDimitry Andric m_current_value = m_default_value; 420b57cec5SDimitry Andric m_value_was_set = false; 430b57cec5SDimitry Andric } 440b57cec5SDimitry Andric 459dba64beSDimitry Andric void AutoComplete(CommandInterpreter &interpreter, 460b57cec5SDimitry Andric CompletionRequest &request) override; 470b57cec5SDimitry Andric 480b57cec5SDimitry Andric // Subclass specific functions 490b57cec5SDimitry Andric 500b57cec5SDimitry Andric /// Convert to bool operator. 510b57cec5SDimitry Andric /// 520b57cec5SDimitry Andric /// This allows code to check a OptionValueBoolean in conditions. 530b57cec5SDimitry Andric /// 540b57cec5SDimitry Andric /// \code 550b57cec5SDimitry Andric /// OptionValueBoolean bool_value(...); 560b57cec5SDimitry Andric /// if (bool_value) 570b57cec5SDimitry Andric /// { ... 580b57cec5SDimitry Andric /// \endcode 590b57cec5SDimitry Andric /// 600b57cec5SDimitry Andric /// \return 610b57cec5SDimitry Andric /// /b True this object contains a valid namespace decl, \b 620b57cec5SDimitry Andric /// false otherwise. 630b57cec5SDimitry Andric explicit operator bool() const { return m_current_value; } 640b57cec5SDimitry Andric 650b57cec5SDimitry Andric const bool &operator=(bool b) { 660b57cec5SDimitry Andric m_current_value = b; 670b57cec5SDimitry Andric return m_current_value; 680b57cec5SDimitry Andric } 690b57cec5SDimitry Andric GetCurrentValue()700b57cec5SDimitry Andric bool GetCurrentValue() const { return m_current_value; } 710b57cec5SDimitry Andric GetDefaultValue()720b57cec5SDimitry Andric bool GetDefaultValue() const { return m_default_value; } 730b57cec5SDimitry Andric SetCurrentValue(bool value)740b57cec5SDimitry Andric void SetCurrentValue(bool value) { m_current_value = value; } 750b57cec5SDimitry Andric SetDefaultValue(bool value)760b57cec5SDimitry Andric void SetDefaultValue(bool value) { m_default_value = value; } 770b57cec5SDimitry Andric 780b57cec5SDimitry Andric protected: 790b57cec5SDimitry Andric bool m_current_value; 800b57cec5SDimitry Andric bool m_default_value; 810b57cec5SDimitry Andric }; 820b57cec5SDimitry Andric 830b57cec5SDimitry Andric } // namespace lldb_private 840b57cec5SDimitry Andric 855ffd83dbSDimitry Andric #endif // LLDB_INTERPRETER_OPTIONVALUEBOOLEAN_H 86