diff options
author | Vikram S. Adve <vadve@cs.uiuc.edu> | 2001-07-21 12:43:07 +0000 |
---|---|---|
committer | Vikram S. Adve <vadve@cs.uiuc.edu> | 2001-07-21 12:43:07 +0000 |
commit | 6beedac106f5949496234349b754e8d48fccdda4 (patch) | |
tree | cadde50f7a86b082306b8a98baacbbb1ad909efa /support/lib/Support/ProgramOption.cpp | |
parent | cb465fc71ecb64d3d168a0cf754fa442abb0f6f9 (diff) |
Program options class.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@235 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'support/lib/Support/ProgramOption.cpp')
-rw-r--r-- | support/lib/Support/ProgramOption.cpp | 138 |
1 files changed, 138 insertions, 0 deletions
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 <assert.h> +#include <stdlib.h> +#include <stdio.h> +#include <string> + +//*************************** 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); +} + +//**************************************************************************/ |