summaryrefslogtreecommitdiff
path: root/src/NumberConversion.cpp
diff options
context:
space:
mode:
authorckgt <ckarlsson25@gmail.com>2015-03-28 19:08:43 -0400
committerckgt <ckarlsson25@gmail.com>2015-03-28 19:08:43 -0400
commit09a3c9c3485a023b5ae98652c46129941ca7fd41 (patch)
treefb3b89f819d54d3efdef291079ddd061c40a4eb5 /src/NumberConversion.cpp
parent78627e9bc711b012d38855daeb004fe55b3d4d26 (diff)
Initial commit.
Diffstat (limited to 'src/NumberConversion.cpp')
-rw-r--r--src/NumberConversion.cpp144
1 files changed, 144 insertions, 0 deletions
diff --git a/src/NumberConversion.cpp b/src/NumberConversion.cpp
new file mode 100644
index 0000000..a5d429d
--- /dev/null
+++ b/src/NumberConversion.cpp
@@ -0,0 +1,144 @@
+/*
+ * NumberConversion.cpp
+ *
+ * Created on: Sep 2, 2014
+ * Author: Cameron Karlsson
+ */
+
+#include <nmeaparse/NumberConversion.h>
+
+using namespace std;
+
+namespace nmea {
+// Note: both parseDouble and parseInt return 0 with "" input.
+
+ double parseDouble(std::string s){
+
+ char* p;
+ double d = ::strtod(s.c_str(), &p);
+ if (*p != 0){
+ std::stringstream ss;
+ ss << "NumberConversionError: parseDouble() error in argument \"" << s << "\", '"
+ << *p << "' is not a number.";
+ throw NumberConversionError(ss.str());
+ }
+ return d;
+ }
+ int64_t parseInt(std::string s, int radix){
+ char* p;
+
+ int64_t d = ::strtoll(s.c_str(), &p, radix);
+
+ if (*p != 0) {
+ std::stringstream ss;
+ ss << "NumberConversionError: parseInt() error in argument \"" << s << "\", '"
+ << *p << "' is not a number.";
+ throw NumberConversionError(ss.str());
+ }
+ return d;
+ }
+
+}
+
+/*
+#include <iostream>
+void NumberConversion_test(){
+ string s;
+ float f;
+ long long k;
+
+ try{
+ s = "-1.345";
+ f = parseDouble(s);
+ cout << s << ": " << f << endl;
+ }
+ catch(NumberConversionError& ex){
+ cout << ex.message << endl;
+ }
+
+
+ try{
+ s = "-1.23e-2";
+ f = parseDouble(s);
+ cout << s << ": " << f << endl;
+ }
+ catch(NumberConversionError& ex){
+ cout << ex.message << endl;
+ }
+
+
+ try{
+ s = "";
+ f = parseDouble(s);
+ cout << s << ": " << f << endl;
+ }
+ catch(NumberConversionError& ex){
+ cout << ex.message << endl;
+ }
+
+
+
+ try{
+ // -- fails, ok
+ s = "asd";
+ f = parseDouble(s);
+ cout << s << ": " << f << endl;
+ }
+ catch(NumberConversionError& ex){
+ cout << ex.message << endl;
+ }
+
+ try{
+ s = "-1234.123";
+ k = parseInt(s);
+ cout << s << ": " << k << endl;
+ }
+ catch(NumberConversionError& ex){
+ cout << ex.message << endl;
+ }
+
+
+
+ try{
+ s = "01234";
+ k = parseInt(s);
+ cout << s << ": " << k << endl;
+ }
+ catch(NumberConversionError& ex){
+ cout << ex.message << endl;
+ }
+
+
+ try{
+ // -- converts to 0
+ s = "";
+ k = parseInt(s);
+ cout << s << ": " << k << endl;
+ }
+ catch(NumberConversionError& ex){
+ cout << ex.message << endl;
+ }
+
+
+ try{
+ // -- fails, ok
+ s = "asd";
+ k = parseInt(s);
+ cout << s << ": " << k << endl;
+ }
+ catch(NumberConversionError& ex){
+ cout << ex.message << endl;
+ }
+
+ try{
+ // -- fails, ok
+ s = "-16";
+ k = parseInt(s);
+ cout << s << ": " << k << endl;
+ }
+ catch(NumberConversionError& ex){
+ cout << ex.message << endl;
+ }
+
+ }
+ */ \ No newline at end of file