173844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton//===-- OptionValueUInt64.cpp ------------------------------------*- 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#include "lldb/Interpreter/OptionValueUInt64.h"
1173844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton
1273844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton// C Includes
1373844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton// C++ Includes
1473844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton// Other libraries and framework includes
1573844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton// Project includes
1673844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton#include "lldb/Core/Stream.h"
1773844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton#include "lldb/Interpreter/Args.h"
1873844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton
1973844aa19a7360b662e2be710fc3c969d6c86606Greg Claytonusing namespace lldb;
2073844aa19a7360b662e2be710fc3c969d6c86606Greg Claytonusing namespace lldb_private;
2173844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton
2273844aa19a7360b662e2be710fc3c969d6c86606Greg Claytonlldb::OptionValueSP
2373844aa19a7360b662e2be710fc3c969d6c86606Greg ClaytonOptionValueUInt64::Create (const char *value_cstr, Error &error)
2473844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton{
2573844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton    lldb::OptionValueSP value_sp (new OptionValueUInt64());
2673844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton    error = value_sp->SetValueFromCString (value_cstr);
2773844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton    if (error.Fail())
2873844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton        value_sp.reset();
2973844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton    return value_sp;
3073844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton}
3173844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton
3273844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton
3373844aa19a7360b662e2be710fc3c969d6c86606Greg Claytonvoid
3473844aa19a7360b662e2be710fc3c969d6c86606Greg ClaytonOptionValueUInt64::DumpValue (const ExecutionContext *exe_ctx, Stream &strm, uint32_t dump_mask)
3573844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton{
3673844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton    if (dump_mask & eDumpOptionType)
3773844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton        strm.Printf ("(%s)", GetTypeAsCString ());
3873844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton    if (dump_mask & eDumpOptionValue)
3973844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton    {
4073844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton        if (dump_mask & eDumpOptionType)
4173844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton            strm.PutCString (" = ");
425f35a4be95aed0e5b2cb36f7d785bcbfc67284aeDaniel Malea        strm.Printf ("%" PRIu64, m_current_value);
4373844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton    }
4473844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton}
4573844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton
4673844aa19a7360b662e2be710fc3c969d6c86606Greg ClaytonError
4773844aa19a7360b662e2be710fc3c969d6c86606Greg ClaytonOptionValueUInt64::SetValueFromCString (const char *value_cstr, VarSetOperationType op)
4873844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton{
4973844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton    Error error;
5073844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton    switch (op)
5173844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton    {
5273844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton        case eVarSetOperationClear:
5373844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton            Clear ();
5473844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton            break;
5573844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton
5673844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton        case eVarSetOperationReplace:
5773844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton        case eVarSetOperationAssign:
5873844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton        {
5973844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton            bool success = false;
6073844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton            uint64_t value = Args::StringToUInt64 (value_cstr, 0, 0, &success);
6173844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton            if (success)
6273844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton            {
6373844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton                m_value_was_set = true;
6473844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton                m_current_value = value;
6573844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton            }
6673844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton            else
6773844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton            {
6873844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton                error.SetErrorStringWithFormat ("invalid uint64_t string value: '%s'", value_cstr);
6973844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton            }
7073844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton        }
7173844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton            break;
7273844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton
7373844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton        case eVarSetOperationInsertBefore:
7473844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton        case eVarSetOperationInsertAfter:
7573844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton        case eVarSetOperationRemove:
7673844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton        case eVarSetOperationAppend:
7773844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton        case eVarSetOperationInvalid:
7873844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton            error = OptionValue::SetValueFromCString (value_cstr, op);
7973844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton            break;
8073844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton    }
8173844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton    return error;
8273844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton}
8373844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton
8473844aa19a7360b662e2be710fc3c969d6c86606Greg Claytonlldb::OptionValueSP
8573844aa19a7360b662e2be710fc3c969d6c86606Greg ClaytonOptionValueUInt64::DeepCopy () const
8673844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton{
8773844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton    return OptionValueSP(new OptionValueUInt64(*this));
8873844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton}
8973844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton
90