#include <string>
#include <map>
#include <list>
#include <vector>
#include <iostream>
#include "var.h"

using namespace std;

void
hello()
{
   cout << "Hello, world!" << endl;
}

void
hello2(const char * message)
{
   cout << message << endl;
}

extern "C" {
extern void print_call_trace();
}

int
main()
{
   try {
      var one(1);
      cout << "one=" << one << endl;
      var result = one + one;
      cout << "result=" << result << endl;
      var array(VAR_DATA::ARRAY_TYPE);
      var fun(hello,VAR_DATA::VOID_TYPE);
      fun();
      cout << "one=" << one << endl;
      var fun2(hello2,VAR_DATA::VOID_TYPE);
      fun2("Hello, Matt!");
      var zero(0);
      if(zero < one) {
         printf("LT...\n");
      }
      var one(1);
      const char * a[] = { "HELLO1", "HELLO2", "HELLO3", "HELLO4", "HELLO5", 0 };
      var t,w;
      for(int i = 0; i < 5; i++) {
         t = a[i];
         w = "world";
         array[t] = w;
      }
      var five(5);
      for(var k = 0; k < five; k++) {
         cout << a[k.to_int()] << " -> " << array[var(a[k.to_int()])] << endl;
      }
      for(var j = 0; j < five; j++)
         cout << j << " -> " << array[var(a[j.to_int()])] << endl;
      var pi(3.14);
      cout << pi << endl;
   }
   catch(const char * message) {
      cerr << message << endl;
   }
   catch(...) {
      cerr << "..." << endl;
   }
   cout << "done..." << endl;
   return 0;
}
