about summary refs log tree commit diff stats
path: root/021arithmetic.cc
diff options
context:
space:
mode:
Diffstat (limited to '021arithmetic.cc')
-rw-r--r--021arithmetic.cc28
1 files changed, 18 insertions, 10 deletions
diff --git a/021arithmetic.cc b/021arithmetic.cc
index 2bb330a4..667fa541 100644
--- a/021arithmetic.cc
+++ b/021arithmetic.cc
@@ -7,8 +7,8 @@ Recipe_number["add"] = ADD;
 :(before "End Primitive Recipe Implementations")
 case ADD: {
   double result = 0;
-  for (index_t i = 0; i < ingredients.size(); ++i) {
-    assert(ingredients.at(i).size() == 1);  // scalar
+  for (long long int i = 0; i < SIZE(ingredients); ++i) {
+    assert(scalar(ingredients.at(i)));
     result += ingredients.at(i).at(0);
   }
   products.resize(1);
@@ -52,10 +52,10 @@ SUBTRACT,
 Recipe_number["subtract"] = SUBTRACT;
 :(before "End Primitive Recipe Implementations")
 case SUBTRACT: {
-  assert(ingredients.at(0).size() == 1);  // scalar
+  assert(scalar(ingredients.at(0)));
   double result = ingredients.at(0).at(0);
-  for (index_t i = 1; i < ingredients.size(); ++i) {
-    assert(ingredients.at(i).size() == 1);  // scalar
+  for (long long int i = 1; i < SIZE(ingredients); ++i) {
+    assert(scalar(ingredients.at(i)));
     result -= ingredients.at(i).at(0);
   }
   products.resize(1);
@@ -100,8 +100,8 @@ Recipe_number["multiply"] = MULTIPLY;
 :(before "End Primitive Recipe Implementations")
 case MULTIPLY: {
   double result = 1;
-  for (index_t i = 0; i < ingredients.size(); ++i) {
-    assert(ingredients.at(i).size() == 1);  // scalar
+  for (long long int i = 0; i < SIZE(ingredients); ++i) {
+    assert(scalar(ingredients.at(i)));
     result *= ingredients.at(i).at(0);
   }
   products.resize(1);
@@ -145,10 +145,10 @@ DIVIDE,
 Recipe_number["divide"] = DIVIDE;
 :(before "End Primitive Recipe Implementations")
 case DIVIDE: {
-  assert(ingredients.at(0).size() == 1);  // scalar
+  assert(scalar(ingredients.at(0)));
   double result = ingredients.at(0).at(0);
-  for (index_t i = 1; i < ingredients.size(); ++i) {
-    assert(ingredients.at(i).size() == 1);  // scalar
+  for (long long int i = 1; i < SIZE(ingredients); ++i) {
+    assert(scalar(ingredients.at(i)));
     result /= ingredients.at(i).at(0);
   }
   products.resize(1);
@@ -237,3 +237,11 @@ recipe main [
   1:number <- divide 5:literal, 2:literal
 ]
 +mem: storing 2.5 in location 1
+
+:(code)
+inline bool scalar(vector<long long int>& x) {
+  return SIZE(x) == 1;
+}
+inline bool scalar(vector<double>& x) {
+  return SIZE(x) == 1;
+}