From c5ffb6e1cc9c5ff880d037c53b8ebc8562be0008 Mon Sep 17 00:00:00 2001 From: "Kartik K. Agaram" Date: Mon, 25 May 2015 22:27:19 -0700 Subject: 1459 --- html/014literal_noninteger.cc.html | 70 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 70 insertions(+) create mode 100644 html/014literal_noninteger.cc.html (limited to 'html/014literal_noninteger.cc.html') diff --git a/html/014literal_noninteger.cc.html b/html/014literal_noninteger.cc.html new file mode 100644 index 00000000..9a22d01f --- /dev/null +++ b/html/014literal_noninteger.cc.html @@ -0,0 +1,70 @@ + + + + +014literal_noninteger.cc + + + + + + + + + + +
+//: Support literal non-integers.
+//: '3.14159:literal' is ugly, so we'll just say '3.14159' for non-integers.
+
+:(scenarios load)
+:(scenario noninteger_literal)
+recipe main [
+  1:number <- copy 3.14159
+]
++parse:   ingredient: {name: "3.14159", properties: ["3.14159": "literal-number"]}
+
+:(after "reagent::reagent(string s)")
+  if (is_noninteger(s)) {
+    name = s;
+    types.push_back(0);
+    properties.push_back(pair<string, vector<string> >(name, vector<string>()));
+    properties.back().second.push_back("literal-number");
+    set_value(to_double(s));
+    return;
+  }
+
+:(code)
+bool is_noninteger(const string& s) {
+  return s.find_first_not_of("0123456789-.") == string::npos
+      && s.find('.') != string::npos;
+}
+
+double to_double(string n) {
+  char* end = NULL;
+  // safe because string.c_str() is guaranteed to be null-terminated
+  double result = strtod(n.c_str(), &end);
+  assert(*end == '\0');
+  return result;
+}
+
+ + + -- cgit 1.4.1-2-gfad0