#include <iostream>
#include "uCalc.h"

using namespace std;
using namespace uCalcSoftware;

void ucalc_call MyAverage(uCalcBase::Callback cb) {
   double Total = 0;
   for (int x = 1; x <= cb.ArgCount(); x++) {
      Total = Total + cb.Arg(x);
   }
   cb.Return(Total / cb.ArgCount());
}
int main() {
   uCalc uc;
   auto MyArrayA = uc.DefineVariable("MyArrayA[] = {10, 20, 30, 40, 50}");
   auto MyArrayB = uc.DefineVariable("MyArrayB[15]");
   auto FunctionA = uc.DefineFunction("FuncA(x, y, z) = x + y + z");
   auto FunctionB = uc.DefineFunction("FuncB(x, y, a = 12, b = 34) = x+y+a+b");
   auto FunctionC = uc.DefineFunction("FuncC(x, y ...)", MyAverage);
   auto FunctionD = uc.DefineFunction("FuncD() = 1+1");

   cout << "Elements in MyArrayA: " << MyArrayA.Count() << endl;
   cout << "Elements in MyArrayB: " << MyArrayB.Count() << endl;
   cout << "Params in FuncA(): " << FunctionA.Count() << endl;
   cout << "Params in FuncB(): " << FunctionB.Count() << endl;
   cout << "Params in FuncC(): " << FunctionC.Count() << endl; // -1 or 2^n-1 (n=32 or 64)
   cout << "Params in FuncD(): " << FunctionD.Count() << endl;
   cout << "Operands in ! operator: " << uc.ItemOf("!").Count() << endl;
   cout << "Operands in > operator: " << uc.ItemOf(">").Count() << endl;
}