#include <cstdlib>

#include <iostream>
#include <string>
#include <list>

#include "Triple.h"
#include "Point3D.h"

using namespace std;


template <class T1, class T2, class T3>
void PrintTriples(const list<Triple<T1,T2,T3>> triples)

int main(int argc, char *argv[]) {
  Point3D p1(3,1,5);
  Point3D p2(-101,100,3);
  cout << "|" << p1 << "|\t== " << p1.DistanceFromOrigin() << endl;
  cout << "|" << p2 << "|\t== " << p2.DistanceFromOrigin() << endl;

  Triple<int,string,list<double> > triple(10,"STRINGY", list<double>());
  cout << triple << endl;

  list<Triple<string,string,string> > pimpNames;
  pimpNames.push_back(Triple<string,string,string>("Pimp Daddy", "Athappilly", "Large"));
  pimpNames.push_back(Triple<string,string,string>("Papa", "Cody", "Flow"));
  pimpNames.push_back(Triple<string,string,string>("Mack Master", "Katelin", "Glide"));
  PrintTriples(pimpNames);

  return EXIT_SUCCESS;
}

template <class T1, class T2, class T3>
void PrintTriples(const list<Triple<T1,T2,T3> > triples) {
  cout << "[";
  if (! triples.empty()) {
    list<Triple<T1,T2,T3> >::iterator it = triples.begin();
    cout << *it;
    for (it = ++it; it != triples.end(); ++it)
      cout << ", " << *it;
  }
  cout << "]" << endl;
}