173844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton//===-- OptionValueBoolean.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_OptionValueBoolean_h_
1173844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton#define liblldb_OptionValueBoolean_h_
1273844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton
1373844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton// C Includes
1473844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton// C++ Includes
1573844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton// Other libraries and framework includes
1673844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton// Project includes
1773844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton#include "lldb/Interpreter/OptionValue.h"
1873844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton
1973844aa19a7360b662e2be710fc3c969d6c86606Greg Claytonnamespace lldb_private {
2073844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton
2173844aa19a7360b662e2be710fc3c969d6c86606Greg Claytonclass OptionValueBoolean : public OptionValue
2273844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton{
2373844aa19a7360b662e2be710fc3c969d6c86606Greg Claytonpublic:
2473844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton    OptionValueBoolean (bool value) :
2573844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton        OptionValue(),
2673844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton        m_current_value (value),
2773844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton        m_default_value (value)
2873844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton    {
2973844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton    }
3073844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton    OptionValueBoolean (bool current_value,
3173844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton                        bool default_value) :
3273844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton        OptionValue(),
3373844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton        m_current_value (current_value),
3473844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton        m_default_value (default_value)
3573844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton    {
3673844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton    }
3773844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton
3873844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton    virtual
3973844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton    ~OptionValueBoolean()
4073844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton    {
4173844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton    }
4273844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton
4373844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton    //---------------------------------------------------------------------
4473844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton    // Virtual subclass pure virtual overrides
4573844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton    //---------------------------------------------------------------------
4673844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton
4773844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton    virtual OptionValue::Type
4873844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton    GetType () const
4973844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton    {
5073844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton        return eTypeBoolean;
5173844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton    }
5273844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton
5373844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton    virtual void
5473844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton    DumpValue (const ExecutionContext *exe_ctx, Stream &strm, uint32_t dump_mask);
5573844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton
5673844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton    virtual Error
5773844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton    SetValueFromCString (const char *value,
5873844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton                         VarSetOperationType op = eVarSetOperationAssign);
5973844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton
6073844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton    virtual bool
6173844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton    Clear ()
6273844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton    {
6373844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton        m_current_value = m_default_value;
6473844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton        m_value_was_set = false;
6573844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton        return true;
6673844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton    }
679f282851b07ff6daee37cd3b1a3fbc43ef11da29Greg Clayton
689f282851b07ff6daee37cd3b1a3fbc43ef11da29Greg Clayton    virtual size_t
699f282851b07ff6daee37cd3b1a3fbc43ef11da29Greg Clayton    AutoComplete (CommandInterpreter &interpreter,
709f282851b07ff6daee37cd3b1a3fbc43ef11da29Greg Clayton                  const char *s,
719f282851b07ff6daee37cd3b1a3fbc43ef11da29Greg Clayton                  int match_start_point,
729f282851b07ff6daee37cd3b1a3fbc43ef11da29Greg Clayton                  int max_return_elements,
739f282851b07ff6daee37cd3b1a3fbc43ef11da29Greg Clayton                  bool &word_complete,
749f282851b07ff6daee37cd3b1a3fbc43ef11da29Greg Clayton                  StringList &matches);
759f282851b07ff6daee37cd3b1a3fbc43ef11da29Greg Clayton
7673844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton    //---------------------------------------------------------------------
7773844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton    // Subclass specific functions
7873844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton    //---------------------------------------------------------------------
7973844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton
8073844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton    //------------------------------------------------------------------
8173844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton    /// Convert to bool operator.
8273844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton    ///
8373844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton    /// This allows code to check a OptionValueBoolean in conditions.
8473844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton    ///
8573844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton    /// @code
8673844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton    /// OptionValueBoolean bool_value(...);
8773844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton    /// if (bool_value)
8873844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton    /// { ...
8973844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton    /// @endcode
9073844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton    ///
9173844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton    /// @return
9273844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton    ///     /b True this object contains a valid namespace decl, \b
9373844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton    ///     false otherwise.
9473844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton    //------------------------------------------------------------------
9573844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton    operator bool() const
9673844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton    {
9773844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton        return m_current_value;
9873844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton    }
9973844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton
10073844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton    const bool &
10173844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton    operator = (bool b)
10273844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton    {
10373844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton        m_current_value = b;
10473844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton        return m_current_value;
10573844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton    }
10673844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton
10773844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton    bool
10873844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton    GetCurrentValue() const
10973844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton    {
11073844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton        return m_current_value;
11173844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton    }
11273844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton
11373844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton    bool
11473844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton    GetDefaultValue() const
11573844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton    {
11673844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton        return m_default_value;
11773844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton    }
11873844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton
11973844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton    void
12073844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton    SetCurrentValue (bool value)
12173844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton    {
12273844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton        m_current_value = value;
12373844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton    }
12473844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton
12573844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton    void
12673844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton    SetDefaultValue (bool value)
12773844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton    {
12873844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton        m_default_value = value;
12973844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton    }
13073844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton
13173844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton    virtual lldb::OptionValueSP
13273844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton    DeepCopy () const;
13373844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton
13473844aa19a7360b662e2be710fc3c969d6c86606Greg Claytonprotected:
13573844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton    bool m_current_value;
13673844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton    bool m_default_value;
13773844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton};
13873844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton
13973844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton} // namespace lldb_private
14073844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton
14173844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton#endif  // liblldb_OptionValueBoolean_h_
142