173844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton//===-- OptionValueRegex.h --------------------------------------*- C++ -*-===//
273844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton//
373844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton//                     The LLVM Compiler Infrastructure
473844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton//
573844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton// This file is distributed under the University of Illinois Open Source
673844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton// License. See LICENSE.TXT for details.
773844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton//
873844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton//===----------------------------------------------------------------------===//
973844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton
1073844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton#ifndef liblldb_OptionValueRegex_h_
1173844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton#define liblldb_OptionValueRegex_h_
1273844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton
1373844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton// C Includes
1473844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton// C++ Includes
1573844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton#include <string>
1673844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton
1773844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton// Other libraries and framework includes
1873844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton// Project includes
1973844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton#include "lldb/Core/RegularExpression.h"
2073844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton#include "lldb/Interpreter/OptionValue.h"
2173844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton
2273844aa19a7360b662e2be710fc3c969d6c86606Greg Claytonnamespace lldb_private {
2373844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton
2473844aa19a7360b662e2be710fc3c969d6c86606Greg Claytonclass OptionValueRegex : public OptionValue
2573844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton{
2673844aa19a7360b662e2be710fc3c969d6c86606Greg Claytonpublic:
2773844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton    OptionValueRegex (const char *value = NULL, uint32_t regex_flags = 0) :
2873844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton        OptionValue(),
2973844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton        m_regex (value, regex_flags)
3073844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton    {
3173844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton    }
3273844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton
3373844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton    virtual
3473844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton    ~OptionValueRegex()
3573844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton    {
3673844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton    }
3773844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton
3873844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton    //---------------------------------------------------------------------
3973844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton    // Virtual subclass pure virtual overrides
4073844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton    //---------------------------------------------------------------------
4173844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton
4273844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton    virtual OptionValue::Type
4373844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton    GetType () const
4473844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton    {
4573844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton        return eTypeRegex;
4673844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton    }
4773844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton
4873844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton    virtual void
4973844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton    DumpValue (const ExecutionContext *exe_ctx, Stream &strm, uint32_t dump_mask);
5073844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton
5173844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton    virtual Error
5273844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton    SetValueFromCString (const char *value,
5373844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton                         VarSetOperationType op = eVarSetOperationAssign);
5473844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton
5573844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton    virtual bool
5673844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton    Clear ()
5773844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton    {
5873844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton        m_regex.Clear();
5973844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton        m_value_was_set = false;
6073844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton        return true;
6173844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton    }
6273844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton
6373844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton    virtual lldb::OptionValueSP
6473844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton    DeepCopy () const;
6573844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton
6673844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton    //---------------------------------------------------------------------
6773844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton    // Subclass specific functions
6873844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton    //---------------------------------------------------------------------
6973844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton    const RegularExpression *
7073844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton    GetCurrentValue() const
7173844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton    {
7273844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton        if (m_regex.IsValid())
7373844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton            return &m_regex;
7473844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton        return NULL;
7573844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton    }
7673844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton
7773844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton    void
7873844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton    SetCurrentValue (const char *value, uint32_t regex_flags)
7973844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton    {
8073844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton        if (value && value[0])
8173844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton            m_regex.Compile (value, regex_flags);
8273844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton        else
8373844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton            m_regex.Clear();
8473844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton    }
8573844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton
8673844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton    bool
8773844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton    IsValid () const
8873844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton    {
8973844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton        return m_regex.IsValid();
9073844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton    }
9173844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton
9273844aa19a7360b662e2be710fc3c969d6c86606Greg Claytonprotected:
9373844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton    RegularExpression m_regex;
9473844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton};
9573844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton
9673844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton} // namespace lldb_private
9773844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton
9873844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton#endif  // liblldb_OptionValueRegex_h_
99