1061da546Spatrick //===-- OptionValueRegex.h --------------------------------------*- C++ -*-===// 2061da546Spatrick // 3061da546Spatrick // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4061da546Spatrick // See https://llvm.org/LICENSE.txt for license information. 5061da546Spatrick // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6061da546Spatrick // 7061da546Spatrick //===----------------------------------------------------------------------===// 8061da546Spatrick 9dda28197Spatrick #ifndef LLDB_INTERPRETER_OPTIONVALUEREGEX_H 10dda28197Spatrick #define LLDB_INTERPRETER_OPTIONVALUEREGEX_H 11061da546Spatrick 12061da546Spatrick #include "lldb/Interpreter/OptionValue.h" 13061da546Spatrick #include "lldb/Utility/RegularExpression.h" 14061da546Spatrick 15061da546Spatrick namespace lldb_private { 16061da546Spatrick 17be691f3bSpatrick class OptionValueRegex : public Cloneable<OptionValueRegex, OptionValue> { 18061da546Spatrick public: 19061da546Spatrick OptionValueRegex(const char *value = nullptr) m_regex(value)20be691f3bSpatrick : m_regex(value), m_default_regex_str(value) {} 21061da546Spatrick 22061da546Spatrick ~OptionValueRegex() override = default; 23061da546Spatrick 24061da546Spatrick // Virtual subclass pure virtual overrides 25061da546Spatrick GetType()26061da546Spatrick OptionValue::Type GetType() const override { return eTypeRegex; } 27061da546Spatrick 28061da546Spatrick void DumpValue(const ExecutionContext *exe_ctx, Stream &strm, 29061da546Spatrick uint32_t dump_mask) override; 30061da546Spatrick ToJSON(const ExecutionContext * exe_ctx)31*f6aab3d8Srobert llvm::json::Value ToJSON(const ExecutionContext *exe_ctx) override { 32*f6aab3d8Srobert return m_regex.GetText(); 33*f6aab3d8Srobert } 34*f6aab3d8Srobert 35061da546Spatrick Status 36061da546Spatrick SetValueFromString(llvm::StringRef value, 37061da546Spatrick VarSetOperationType op = eVarSetOperationAssign) override; 38061da546Spatrick Clear()39be691f3bSpatrick void Clear() override { 40dda28197Spatrick m_regex = RegularExpression(m_default_regex_str); 41061da546Spatrick m_value_was_set = false; 42061da546Spatrick } 43061da546Spatrick 44061da546Spatrick // Subclass specific functions GetCurrentValue()45061da546Spatrick const RegularExpression *GetCurrentValue() const { 46061da546Spatrick return (m_regex.IsValid() ? &m_regex : nullptr); 47061da546Spatrick } 48061da546Spatrick SetCurrentValue(const char * value)49061da546Spatrick void SetCurrentValue(const char *value) { 50061da546Spatrick if (value && value[0]) 51061da546Spatrick m_regex = RegularExpression(llvm::StringRef(value)); 52061da546Spatrick else 53061da546Spatrick m_regex = RegularExpression(); 54061da546Spatrick } 55061da546Spatrick IsValid()56061da546Spatrick bool IsValid() const { return m_regex.IsValid(); } 57061da546Spatrick 58061da546Spatrick protected: 59061da546Spatrick RegularExpression m_regex; 60dda28197Spatrick std::string m_default_regex_str; 61061da546Spatrick }; 62061da546Spatrick 63061da546Spatrick } // namespace lldb_private 64061da546Spatrick 65dda28197Spatrick #endif // LLDB_INTERPRETER_OPTIONVALUEREGEX_H 66