aboutsummaryrefslogtreecommitdiff
path: root/support/lib/Support/ProgramOption.cpp
diff options
context:
space:
mode:
authorVikram S. Adve <vadve@cs.uiuc.edu>2001-07-21 12:43:07 +0000
committerVikram S. Adve <vadve@cs.uiuc.edu>2001-07-21 12:43:07 +0000
commit6beedac106f5949496234349b754e8d48fccdda4 (patch)
treecadde50f7a86b082306b8a98baacbbb1ad909efa /support/lib/Support/ProgramOption.cpp
parentcb465fc71ecb64d3d168a0cf754fa442abb0f6f9 (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.cpp138
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);
+}
+
+//**************************************************************************/