1e1f50b9df1299f6b9181b5ac2699ed4a3ad38a59Greg Clayton//===-- OptionGroupBoolean.cpp ----------------------------------*- C++ -*-===//
2e1f50b9df1299f6b9181b5ac2699ed4a3ad38a59Greg Clayton//
3e1f50b9df1299f6b9181b5ac2699ed4a3ad38a59Greg Clayton//                     The LLVM Compiler Infrastructure
4e1f50b9df1299f6b9181b5ac2699ed4a3ad38a59Greg Clayton//
5e1f50b9df1299f6b9181b5ac2699ed4a3ad38a59Greg Clayton// This file is distributed under the University of Illinois Open Source
6e1f50b9df1299f6b9181b5ac2699ed4a3ad38a59Greg Clayton// License. See LICENSE.TXT for details.
7e1f50b9df1299f6b9181b5ac2699ed4a3ad38a59Greg Clayton//
8e1f50b9df1299f6b9181b5ac2699ed4a3ad38a59Greg Clayton//===----------------------------------------------------------------------===//
9e1f50b9df1299f6b9181b5ac2699ed4a3ad38a59Greg Clayton
10a0f34698c457091c0d15b8fdfbf638421b1283d4Johnny Chen#include "lldb/Interpreter/OptionGroupBoolean.h"
11e1f50b9df1299f6b9181b5ac2699ed4a3ad38a59Greg Clayton
12e1f50b9df1299f6b9181b5ac2699ed4a3ad38a59Greg Clayton// C Includes
13e1f50b9df1299f6b9181b5ac2699ed4a3ad38a59Greg Clayton// C++ Includes
14e1f50b9df1299f6b9181b5ac2699ed4a3ad38a59Greg Clayton// Other libraries and framework includes
15e1f50b9df1299f6b9181b5ac2699ed4a3ad38a59Greg Clayton// Project includes
16e1f50b9df1299f6b9181b5ac2699ed4a3ad38a59Greg Clayton
17e1f50b9df1299f6b9181b5ac2699ed4a3ad38a59Greg Claytonusing namespace lldb;
18e1f50b9df1299f6b9181b5ac2699ed4a3ad38a59Greg Claytonusing namespace lldb_private;
19e1f50b9df1299f6b9181b5ac2699ed4a3ad38a59Greg Clayton
20e1f50b9df1299f6b9181b5ac2699ed4a3ad38a59Greg ClaytonOptionGroupBoolean::OptionGroupBoolean (uint32_t usage_mask,
21e1f50b9df1299f6b9181b5ac2699ed4a3ad38a59Greg Clayton                                        bool required,
22e1f50b9df1299f6b9181b5ac2699ed4a3ad38a59Greg Clayton                                        const char *long_option,
236475c42148a8ea1ca86e5db465db7eca742d897dGreg Clayton                                        int short_option,
24e1f50b9df1299f6b9181b5ac2699ed4a3ad38a59Greg Clayton                                        const char *usage_text,
25437b5bccea45a5981edbbbeb4e23424aec4ce774Greg Clayton                                        bool default_value,
26437b5bccea45a5981edbbbeb4e23424aec4ce774Greg Clayton                                        bool no_argument_toggle_default) :
27e1f50b9df1299f6b9181b5ac2699ed4a3ad38a59Greg Clayton    m_value (default_value, default_value)
28e1f50b9df1299f6b9181b5ac2699ed4a3ad38a59Greg Clayton{
29e1f50b9df1299f6b9181b5ac2699ed4a3ad38a59Greg Clayton    m_option_definition.usage_mask = usage_mask;
30e1f50b9df1299f6b9181b5ac2699ed4a3ad38a59Greg Clayton    m_option_definition.required = required;
31e1f50b9df1299f6b9181b5ac2699ed4a3ad38a59Greg Clayton    m_option_definition.long_option = long_option;
32e1f50b9df1299f6b9181b5ac2699ed4a3ad38a59Greg Clayton    m_option_definition.short_option = short_option;
33437b5bccea45a5981edbbbeb4e23424aec4ce774Greg Clayton    m_option_definition.option_has_arg = no_argument_toggle_default ? no_argument : required_argument;
34e1f50b9df1299f6b9181b5ac2699ed4a3ad38a59Greg Clayton    m_option_definition.enum_values = NULL;
35437b5bccea45a5981edbbbeb4e23424aec4ce774Greg Clayton    m_option_definition.completion_type = 0;
36437b5bccea45a5981edbbbeb4e23424aec4ce774Greg Clayton    m_option_definition.argument_type = eArgTypeBoolean;
37e1f50b9df1299f6b9181b5ac2699ed4a3ad38a59Greg Clayton    m_option_definition.usage_text = usage_text;
38e1f50b9df1299f6b9181b5ac2699ed4a3ad38a59Greg Clayton}
39e1f50b9df1299f6b9181b5ac2699ed4a3ad38a59Greg Clayton
40e1f50b9df1299f6b9181b5ac2699ed4a3ad38a59Greg ClaytonOptionGroupBoolean::~OptionGroupBoolean ()
41e1f50b9df1299f6b9181b5ac2699ed4a3ad38a59Greg Clayton{
42e1f50b9df1299f6b9181b5ac2699ed4a3ad38a59Greg Clayton}
43e1f50b9df1299f6b9181b5ac2699ed4a3ad38a59Greg Clayton
44e1f50b9df1299f6b9181b5ac2699ed4a3ad38a59Greg ClaytonError
45e1f50b9df1299f6b9181b5ac2699ed4a3ad38a59Greg ClaytonOptionGroupBoolean::SetOptionValue (CommandInterpreter &interpreter,
46e1f50b9df1299f6b9181b5ac2699ed4a3ad38a59Greg Clayton                                    uint32_t option_idx,
47e1f50b9df1299f6b9181b5ac2699ed4a3ad38a59Greg Clayton                                    const char *option_arg)
48e1f50b9df1299f6b9181b5ac2699ed4a3ad38a59Greg Clayton{
49437b5bccea45a5981edbbbeb4e23424aec4ce774Greg Clayton    Error error;
50437b5bccea45a5981edbbbeb4e23424aec4ce774Greg Clayton    if (m_option_definition.option_has_arg == no_argument)
51437b5bccea45a5981edbbbeb4e23424aec4ce774Greg Clayton    {
52437b5bccea45a5981edbbbeb4e23424aec4ce774Greg Clayton        // Not argument, toggle the default value and mark the option as having been set
53437b5bccea45a5981edbbbeb4e23424aec4ce774Greg Clayton        m_value.SetCurrentValue (!m_value.GetDefaultValue());
54437b5bccea45a5981edbbbeb4e23424aec4ce774Greg Clayton        m_value.SetOptionWasSet ();
55437b5bccea45a5981edbbbeb4e23424aec4ce774Greg Clayton    }
56437b5bccea45a5981edbbbeb4e23424aec4ce774Greg Clayton    else
57437b5bccea45a5981edbbbeb4e23424aec4ce774Greg Clayton    {
58437b5bccea45a5981edbbbeb4e23424aec4ce774Greg Clayton        error = m_value.SetValueFromCString (option_arg);
59437b5bccea45a5981edbbbeb4e23424aec4ce774Greg Clayton    }
60e1f50b9df1299f6b9181b5ac2699ed4a3ad38a59Greg Clayton    return error;
61e1f50b9df1299f6b9181b5ac2699ed4a3ad38a59Greg Clayton}
62e1f50b9df1299f6b9181b5ac2699ed4a3ad38a59Greg Clayton
63e1f50b9df1299f6b9181b5ac2699ed4a3ad38a59Greg Claytonvoid
64e1f50b9df1299f6b9181b5ac2699ed4a3ad38a59Greg ClaytonOptionGroupBoolean::OptionParsingStarting (CommandInterpreter &interpreter)
65e1f50b9df1299f6b9181b5ac2699ed4a3ad38a59Greg Clayton{
66e1f50b9df1299f6b9181b5ac2699ed4a3ad38a59Greg Clayton    m_value.Clear();
67e1f50b9df1299f6b9181b5ac2699ed4a3ad38a59Greg Clayton}
68