1254721Semaste//===-- OptionValueSInt64.h --------------------------------------*- C++ -*-===//
2254721Semaste//
3254721Semaste//                     The LLVM Compiler Infrastructure
4254721Semaste//
5254721Semaste// This file is distributed under the University of Illinois Open Source
6254721Semaste// License. See LICENSE.TXT for details.
7254721Semaste//
8254721Semaste//===----------------------------------------------------------------------===//
9254721Semaste
10254721Semaste#ifndef liblldb_OptionValueSInt64_h_
11254721Semaste#define liblldb_OptionValueSInt64_h_
12254721Semaste
13254721Semaste// C Includes
14254721Semaste// C++ Includes
15254721Semaste// Other libraries and framework includes
16254721Semaste// Project includes
17254721Semaste#include "lldb/Interpreter/OptionValue.h"
18254721Semaste
19254721Semastenamespace lldb_private {
20254721Semaste
21254721Semasteclass OptionValueSInt64 : public OptionValue
22254721Semaste{
23254721Semastepublic:
24254721Semaste    OptionValueSInt64 () :
25254721Semaste        OptionValue(),
26254721Semaste        m_current_value (0),
27254721Semaste        m_default_value (0),
28254721Semaste        m_min_value (INT64_MIN),
29254721Semaste        m_max_value (INT64_MAX)
30254721Semaste    {
31254721Semaste    }
32254721Semaste
33254721Semaste    OptionValueSInt64 (int64_t value) :
34254721Semaste        OptionValue(),
35254721Semaste        m_current_value (value),
36254721Semaste        m_default_value (value),
37254721Semaste        m_min_value (INT64_MIN),
38254721Semaste        m_max_value (INT64_MAX)
39254721Semaste    {
40254721Semaste    }
41254721Semaste
42254721Semaste    OptionValueSInt64 (int64_t current_value,
43254721Semaste                       int64_t default_value) :
44254721Semaste        OptionValue(),
45254721Semaste        m_current_value (current_value),
46254721Semaste        m_default_value (default_value),
47254721Semaste        m_min_value (INT64_MIN),
48254721Semaste        m_max_value (INT64_MAX)
49254721Semaste    {
50254721Semaste    }
51254721Semaste
52254721Semaste    OptionValueSInt64 (const OptionValueSInt64 &rhs) :
53254721Semaste        OptionValue(rhs),
54254721Semaste        m_current_value (rhs.m_current_value),
55254721Semaste        m_default_value (rhs.m_default_value),
56254721Semaste        m_min_value (rhs.m_min_value),
57254721Semaste        m_max_value (rhs.m_max_value)
58254721Semaste    {
59254721Semaste    }
60254721Semaste
61254721Semaste    virtual
62254721Semaste    ~OptionValueSInt64()
63254721Semaste    {
64254721Semaste    }
65254721Semaste
66254721Semaste    //---------------------------------------------------------------------
67254721Semaste    // Virtual subclass pure virtual overrides
68254721Semaste    //---------------------------------------------------------------------
69254721Semaste
70254721Semaste    virtual OptionValue::Type
71254721Semaste    GetType () const
72254721Semaste    {
73254721Semaste        return eTypeSInt64;
74254721Semaste    }
75254721Semaste
76254721Semaste    virtual void
77254721Semaste    DumpValue (const ExecutionContext *exe_ctx, Stream &strm, uint32_t dump_mask);
78254721Semaste
79254721Semaste    virtual Error
80254721Semaste    SetValueFromCString (const char *value,
81254721Semaste                         VarSetOperationType op = eVarSetOperationAssign);
82254721Semaste
83254721Semaste    virtual bool
84254721Semaste    Clear ()
85254721Semaste    {
86254721Semaste        m_current_value = m_default_value;
87254721Semaste        m_value_was_set = false;
88254721Semaste        return true;
89254721Semaste    }
90254721Semaste
91254721Semaste    virtual lldb::OptionValueSP
92254721Semaste    DeepCopy () const;
93254721Semaste
94254721Semaste    //---------------------------------------------------------------------
95254721Semaste    // Subclass specific functions
96254721Semaste    //---------------------------------------------------------------------
97254721Semaste
98254721Semaste    const int64_t &
99254721Semaste    operator = (int64_t value)
100254721Semaste    {
101254721Semaste        m_current_value = value;
102254721Semaste        return m_current_value;
103254721Semaste    }
104254721Semaste
105254721Semaste    int64_t
106254721Semaste    GetCurrentValue() const
107254721Semaste    {
108254721Semaste        return m_current_value;
109254721Semaste    }
110254721Semaste
111254721Semaste    int64_t
112254721Semaste    GetDefaultValue() const
113254721Semaste    {
114254721Semaste        return m_default_value;
115254721Semaste    }
116254721Semaste
117254721Semaste    bool
118254721Semaste    SetCurrentValue (int64_t value)
119254721Semaste    {
120254721Semaste        if (value >= m_min_value && value <= m_max_value)
121254721Semaste        {
122254721Semaste            m_current_value = value;
123254721Semaste            return true;
124254721Semaste        }
125254721Semaste        return false;
126254721Semaste    }
127254721Semaste
128254721Semaste    bool
129254721Semaste    SetDefaultValue (int64_t value)
130254721Semaste    {
131254721Semaste        if (value >= m_min_value && value <= m_max_value)
132254721Semaste        {
133254721Semaste            m_default_value = value;
134254721Semaste            return true;
135254721Semaste        }
136254721Semaste        return false;
137254721Semaste    }
138254721Semaste
139254721Semaste    void
140254721Semaste    SetMinimumValue (int64_t v)
141254721Semaste    {
142254721Semaste        m_min_value = v;
143254721Semaste    }
144254721Semaste
145254721Semaste    int64_t
146254721Semaste    GetMinimumValue () const
147254721Semaste    {
148254721Semaste        return m_min_value;
149254721Semaste    }
150254721Semaste
151254721Semaste    void
152254721Semaste    SetMaximumValue (int64_t v)
153254721Semaste    {
154254721Semaste        m_max_value = v;
155254721Semaste    }
156254721Semaste
157254721Semaste    int64_t
158254721Semaste    GetMaximumValue () const
159254721Semaste    {
160254721Semaste        return m_max_value;
161254721Semaste    }
162254721Semaste
163254721Semasteprotected:
164254721Semaste    int64_t m_current_value;
165254721Semaste    int64_t m_default_value;
166254721Semaste    int64_t m_min_value;
167254721Semaste    int64_t m_max_value;
168254721Semaste};
169254721Semaste
170254721Semaste} // namespace lldb_private
171254721Semaste
172254721Semaste#endif  // liblldb_OptionValueSInt64_h_
173