173844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton//===-- OptionValue.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_OptionValue_h_
1173844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton#define liblldb_OptionValue_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/lldb-defines.h"
1873844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton#include "lldb/Core/ConstString.h"
1973844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton#include "lldb/Core/Error.h"
2073844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton
2173844aa19a7360b662e2be710fc3c969d6c86606Greg Claytonnamespace lldb_private {
2273844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton
2373844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton    //---------------------------------------------------------------------
2473844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton    // OptionValue
2573844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton    //---------------------------------------------------------------------
2673844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton    class OptionValue
2773844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton    {
2873844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton    public:
2973844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton        typedef enum {
3073844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton            eTypeInvalid = 0,
3173844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton            eTypeArch,
3273844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton            eTypeArgs,
3373844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton            eTypeArray,
3473844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton            eTypeBoolean,
3573844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton            eTypeDictionary,
3673844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton            eTypeEnum,
3773844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton            eTypeFileSpec,
3873844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton            eTypeFileSpecList,
3973844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton            eTypeFormat,
4073844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton            eTypePathMap,
4173844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton            eTypeProperties,
4273844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton            eTypeRegex,
4373844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton            eTypeSInt64,
4473844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton            eTypeString,
4573844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton            eTypeUInt64,
4673844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton            eTypeUUID
4773844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton        } Type;
4873844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton
4973844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton        enum {
5073844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton            eDumpOptionName         = (1u << 0),
5173844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton            eDumpOptionType         = (1u << 1),
5273844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton            eDumpOptionValue        = (1u << 2),
5373844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton            eDumpOptionDescription  = (1u << 3),
5473844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton            eDumpOptionRaw          = (1u << 4),
5573844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton            eDumpGroupValue         = (eDumpOptionName | eDumpOptionType | eDumpOptionValue),
5673844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton            eDumpGroupHelp          = (eDumpOptionName | eDumpOptionType | eDumpOptionDescription)
5773844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton        };
5873844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton
5973844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton
6073844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton        OptionValue () :
6173844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton            m_value_was_set (false)
6273844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton        {
6373844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton        }
6473844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton
6573844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton        OptionValue (const OptionValue &rhs) :
6673844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton            m_value_was_set (rhs.m_value_was_set)
6773844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton        {
6873844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton        }
6973844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton
7073844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton        virtual ~OptionValue ()
7173844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton        {
7273844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton        }
7373844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton        //-----------------------------------------------------------------
7473844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton        // Subclasses should override these functions
7573844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton        //-----------------------------------------------------------------
7673844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton        virtual Type
7773844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton        GetType () const = 0;
7873844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton
7973844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton        // If this value is always hidden, the avoid showing any info on this
8073844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton        // value, just show the info for the child values.
8173844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton        virtual bool
8273844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton        ValueIsTransparent () const
8373844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton        {
8473844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton            return GetType() == eTypeProperties;
8573844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton        }
8673844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton
8773844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton        virtual const char *
8873844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton        GetTypeAsCString () const
8973844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton        {
9073844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton            return GetBuiltinTypeAsCString(GetType());
9173844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton        }
9273844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton
9373844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton
9473844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton        static const char *
9573844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton        GetBuiltinTypeAsCString (Type t);
9673844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton
9773844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton        virtual void
9873844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton        DumpValue (const ExecutionContext *exe_ctx, Stream &strm, uint32_t dump_mask) = 0;
9973844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton
10073844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton        virtual Error
10173844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton        SetValueFromCString (const char *value, VarSetOperationType op = eVarSetOperationAssign);
10273844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton
10373844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton        virtual bool
10473844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton        Clear () = 0;
10573844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton
10673844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton        virtual lldb::OptionValueSP
10773844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton        DeepCopy () const = 0;
10873844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton
10973844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton        virtual size_t
11073844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton        AutoComplete (CommandInterpreter &interpreter,
11173844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton                      const char *s,
11273844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton                      int match_start_point,
11373844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton                      int max_return_elements,
11473844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton                      bool &word_complete,
11573844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton                      StringList &matches);
11673844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton
11773844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton        //-----------------------------------------------------------------
11873844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton        // Subclasses can override these functions
11973844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton        //-----------------------------------------------------------------
12073844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton        virtual lldb::OptionValueSP
12173844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton        GetSubValue (const ExecutionContext *exe_ctx,
12273844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton                     const char *name,
12373844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton                     bool will_modify,
12473844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton                     Error &error) const
12573844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton        {
12673844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton            error.SetErrorStringWithFormat("'%s' is not a value subvalue", name);
12773844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton            return lldb::OptionValueSP();
12873844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton        }
12973844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton
13073844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton        virtual Error
13173844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton        SetSubValue (const ExecutionContext *exe_ctx,
13273844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton                     VarSetOperationType op,
13373844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton                     const char *name,
13473844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton                     const char *value);
13573844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton
13673844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton        virtual bool
13773844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton        IsAggregateValue () const
13873844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton        {
13973844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton            return false;
14073844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton        }
14173844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton
14273844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton        virtual ConstString
14373844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton        GetName() const
14473844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton        {
14573844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton            return ConstString();
14673844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton        }
14773844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton
14873844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton        virtual bool
14973844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton        DumpQualifiedName (Stream &strm) const;
15073844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton        //-----------------------------------------------------------------
15173844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton        // Subclasses should NOT override these functions as they use the
15273844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton        // above functions to implement functionality
15373844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton        //-----------------------------------------------------------------
15473844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton        uint32_t
15573844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton        GetTypeAsMask ()
15673844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton        {
15773844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton            return 1u << GetType();
15873844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton        }
15973844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton
16073844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton        static uint32_t
16173844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton        ConvertTypeToMask (OptionValue::Type type)
16273844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton        {
16373844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton            return 1u << type;
16473844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton        }
16573844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton
16673844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton        static OptionValue::Type
16773844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton        ConvertTypeMaskToType (uint32_t type_mask)
16873844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton        {
16973844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton            // If only one bit is set, then return an appropriate enumeration
17073844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton            switch (type_mask)
17173844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton            {
17273844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton                case 1u << eTypeArch:           return eTypeArch;
17373844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton                case 1u << eTypeArgs:           return eTypeArgs;
17473844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton                case 1u << eTypeArray:          return eTypeArray;
17573844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton                case 1u << eTypeBoolean:        return eTypeBoolean;
17673844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton                case 1u << eTypeDictionary:     return eTypeDictionary;
17773844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton                case 1u << eTypeEnum:           return eTypeEnum;
17873844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton                case 1u << eTypeFileSpec:       return eTypeFileSpec;
17973844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton                case 1u << eTypeFileSpecList:   return eTypeFileSpecList;
18073844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton                case 1u << eTypeFormat:         return eTypeFormat;
18173844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton                case 1u << eTypePathMap:        return eTypePathMap;
18273844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton                case 1u << eTypeProperties:     return eTypeProperties;
18373844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton                case 1u << eTypeRegex:          return eTypeRegex;
18473844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton                case 1u << eTypeSInt64:         return eTypeSInt64;
18573844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton                case 1u << eTypeString:         return eTypeString;
18673844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton                case 1u << eTypeUInt64:         return eTypeUInt64;
18773844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton                case 1u << eTypeUUID:           return eTypeUUID;
18873844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton            }
18973844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton            // Else return invalid
19073844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton            return eTypeInvalid;
19173844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton        }
19273844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton
19373844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton        static lldb::OptionValueSP
19473844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton        CreateValueFromCStringForTypeMask (const char *value_cstr,
19573844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton                                           uint32_t type_mask,
19673844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton                                           Error &error);
19773844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton
19873844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton        // Get this value as a uint64_t value if it is encoded as a boolean,
19973844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton        // uint64_t or int64_t. Other types will cause "fail_value" to be
20073844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton        // returned
20173844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton        uint64_t
20273844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton        GetUInt64Value (uint64_t fail_value, bool *success_ptr);
20373844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton
20473844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton        OptionValueArch *
20573844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton        GetAsArch ();
20673844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton
20773844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton        const OptionValueArch *
20873844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton        GetAsArch () const;
20973844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton
21073844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton        OptionValueArray *
21173844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton        GetAsArray ();
21273844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton
21373844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton        const OptionValueArray *
21473844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton        GetAsArray () const;
21573844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton
21673844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton        OptionValueArgs *
21773844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton        GetAsArgs ();
21873844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton
21973844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton        const OptionValueArgs *
22073844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton        GetAsArgs () const;
22173844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton
22273844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton        OptionValueBoolean *
22373844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton        GetAsBoolean ();
22473844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton
22573844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton        const OptionValueBoolean *
22673844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton        GetAsBoolean () const;
22773844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton
22873844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton        OptionValueDictionary *
22973844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton        GetAsDictionary ();
23073844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton
23173844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton        const OptionValueDictionary *
23273844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton        GetAsDictionary () const;
23373844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton
23473844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton        OptionValueEnumeration *
23573844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton        GetAsEnumeration ();
23673844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton
23773844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton        const OptionValueEnumeration *
23873844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton        GetAsEnumeration () const;
23973844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton
24073844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton        OptionValueFileSpec *
24173844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton        GetAsFileSpec ();
24273844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton
24373844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton        const OptionValueFileSpec *
24473844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton        GetAsFileSpec () const;
24573844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton
24673844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton        OptionValueFileSpecList *
24773844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton        GetAsFileSpecList ();
24873844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton
24973844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton        const OptionValueFileSpecList *
25073844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton        GetAsFileSpecList () const;
25173844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton
25273844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton        OptionValueFormat *
25373844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton        GetAsFormat ();
25473844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton
25573844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton        const OptionValueFormat *
25673844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton        GetAsFormat () const;
25773844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton
25873844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton        OptionValuePathMappings *
25973844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton        GetAsPathMappings ();
26073844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton
26173844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton        const OptionValuePathMappings *
26273844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton        GetAsPathMappings () const;
26373844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton
26473844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton        OptionValueProperties *
26573844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton        GetAsProperties ();
26673844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton
26773844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton        const OptionValueProperties *
26873844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton        GetAsProperties () const;
26973844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton
27073844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton        OptionValueRegex *
27173844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton        GetAsRegex ();
27273844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton
27373844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton        const OptionValueRegex *
27473844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton        GetAsRegex () const;
27573844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton
27673844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton        OptionValueSInt64 *
27773844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton        GetAsSInt64 ();
27873844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton
27973844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton        const OptionValueSInt64 *
28073844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton        GetAsSInt64 () const;
28173844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton
28273844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton        OptionValueString *
28373844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton        GetAsString ();
28473844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton
28573844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton        const OptionValueString *
28673844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton        GetAsString () const;
28773844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton
28873844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton        OptionValueUInt64 *
28973844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton        GetAsUInt64 ();
29073844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton
29173844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton        const OptionValueUInt64 *
29273844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton        GetAsUInt64 () const;
29373844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton
29473844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton        OptionValueUUID *
29573844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton        GetAsUUID ();
29673844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton
29773844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton        const OptionValueUUID *
29873844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton        GetAsUUID () const;
29973844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton
30073844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton        bool
30173844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton        GetBooleanValue (bool fail_value = false) const;
30273844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton
30373844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton        bool
30473844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton        SetBooleanValue (bool new_value);
30573844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton
30673844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton        int64_t
30773844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton        GetEnumerationValue (int64_t fail_value = -1) const;
30873844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton
30973844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton        bool
31073844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton        SetEnumerationValue (int64_t value);
31173844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton
31273844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton        FileSpec
31373844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton        GetFileSpecValue () const;
31473844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton
31573844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton        bool
31673844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton        SetFileSpecValue (const FileSpec &file_spec);
31773844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton
31873844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton        FileSpecList
31973844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton        GetFileSpecListValue () const;
32073844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton
32173844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton        lldb::Format
32273844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton        GetFormatValue (lldb::Format fail_value = lldb::eFormatDefault) const;
32373844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton
32473844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton        bool
32573844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton        SetFormatValue (lldb::Format new_value);
32673844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton
32773844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton        const RegularExpression *
32873844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton        GetRegexValue () const;
32973844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton
33073844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton        int64_t
33173844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton        GetSInt64Value (int64_t fail_value = 0) const;
33273844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton
33373844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton        bool
33473844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton        SetSInt64Value (int64_t new_value);
33573844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton
33673844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton        const char *
33773844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton        GetStringValue (const char *fail_value = NULL) const;
33873844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton
33973844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton        bool
34073844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton        SetStringValue (const char *new_value);
34173844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton
34273844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton        uint64_t
34373844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton        GetUInt64Value (uint64_t fail_value = 0) const;
34473844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton
34573844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton        bool
34673844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton        SetUInt64Value (uint64_t new_value);
34773844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton
34873844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton        UUID
34973844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton        GetUUIDValue () const;
35073844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton
35173844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton        bool
35273844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton        SetUUIDValue (const UUID &uuid);
35373844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton
35473844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton        bool
35573844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton        OptionWasSet () const
35673844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton        {
35773844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton            return m_value_was_set;
35873844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton        }
35973844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton
36073844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton        void
36173844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton        SetOptionWasSet ()
36273844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton        {
36373844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton            m_value_was_set = true;
36473844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton        }
36573844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton
36673844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton        void
36773844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton        SetParent (const lldb::OptionValueSP &parent_sp)
36873844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton        {
36973844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton            m_parent_wp = parent_sp;
37073844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton        }
37173844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton    protected:
37273844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton        lldb::OptionValueWP m_parent_wp;
37373844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton        bool m_value_was_set; // This can be used to see if a value has been set
37473844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton                              // by a call to SetValueFromCString(). It is often
37573844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton                              // handy to know if an option value was set from
37673844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton                              // the command line or as a setting, versus if we
37773844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton                              // just have the default value that was already
37873844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton                              // populated in the option value.
37973844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton
38073844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton    };
38173844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton
38273844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton} // namespace lldb_private
38373844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton
38473844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton#endif  // liblldb_OptionValue_h_
385