From 6beedac106f5949496234349b754e8d48fccdda4 Mon Sep 17 00:00:00 2001 From: "Vikram S. Adve" Date: Sat, 21 Jul 2001 12:43:07 +0000 Subject: Program options class. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@235 91177308-0d34-0410-b5e6-96231b3b80d8 --- support/lib/Support/ProgramOption.cpp | 138 ++++++++++++++++++++++++++++++++++ 1 file changed, 138 insertions(+) create mode 100644 support/lib/Support/ProgramOption.cpp (limited to 'support/lib/Support/ProgramOption.cpp') diff --git a/support/lib/Support/ProgramOption.cpp b/support/lib/Support/ProgramOption.cpp new file mode 100644 index 0000000000..2fa987941b --- /dev/null +++ b/support/lib/Support/ProgramOption.cpp @@ -0,0 +1,138 @@ +// $Id$ +//*************************************************************************** +// +// File: +// ProgramOption.C +// +// Purpose: +// General representations for a program option. +// +// History: +// 08/08/95 - adve - created in the dHPF compiler +// 11/26/96 - adve - EvalOpt now returns #args consumed, or -1 for error +// 07/15/01 - vadve - Copied to LLVM system and modified +// +//**************************************************************************/ + +//************************** System Include Files **************************/ + +#include +#include +#include +#include + +//*************************** User Include Files ***************************/ + +#include "llvm/Support/ProgramOption.h" + +//********************** Local Variable Definitions ************************/ + +//************************ Class Implementations ***************************/ + + +//**************************************************************************/ + +StringOption::StringOption(const char* _argString, + const char* _helpMesg, + const char* _initValue, + bool _append) + : ProgramOption(_argString, _helpMesg), + value(_initValue), + append(_append) +{} + +int +StringOption::EvalOpt(const char* optarg) +{ + if (optarg == (char*) NULL) + return -1; // flag the error + + if (this->append) + value += optarg; + else + value = optarg; + + optionSpecified = true; + return 1; // one additional argument consumed +} + + +//**************************************************************************/ + +FlagOption::FlagOption(const char* _argString, + const char* _helpMesg, + bool _initValue) + : ProgramOption(_argString, _helpMesg, 0), + value(_initValue) +{} + +int +FlagOption::EvalOpt(const char* optarg) +{ + if (strcmp(optarg, "0") == 0) { + value = false; + return 1; // one additional argument consumed + } + else { + value = true; + return 0; // zero ... consumed + } +} + +//**************************************************************************/ + +RealValuedOption::RealValuedOption(const char* _argString, + const char* _helpMesg, + double _initValue) + : ProgramOption(_argString, _helpMesg), + value(_initValue) +{} + +int +RealValuedOption::EvalOpt(const char* optarg) +{ + if (optarg == (char*) NULL) + return -1; + + char* lastCharScanned = NULL; + value = strtod(optarg, &lastCharScanned); + if (! (*lastCharScanned == '\0')) // look for incorrect or partially + return -1; // correct numerical argument + + optionSpecified = true; + return 1; +} + +char* +RealValuedOption::GetTextValue() const +{ + char buffer[40]; + sprintf(buffer, "%f", value); + return strdup(buffer); +} + +//**************************************************************************/ + +IntegerValuedOption::IntegerValuedOption(const char* _argString, + const char* _helpMesg, + int _initValue) + : RealValuedOption(_argString, _helpMesg, (double) _initValue) +{} + +int +IntegerValuedOption::Value() const +{ + double realValue = RealValuedOption::Value(); + assert(realValue == (int) realValue); + return (int) realValue; +} + +char* +IntegerValuedOption::GetTextValue() const +{ + char buffer[40]; + sprintf(buffer, "%d", Value()); + return strdup(buffer); +} + +//**************************************************************************/ -- cgit v1.2.3-18-g5258