#include <boost/shared_ptr.hpp>
#include <vector>
#include <algorithm>
#include <stdlib.h>

#include "./Salaried.h"
#include "./SalariedBonus.h"

using boost::shared_ptr;
using std::vector;

bool SortFunction(shared_ptr<Salaried> a, shared_ptr<Salaried> b) {
  return a->Earnings() < b->Earnings();
}

void PrintFunction(shared_ptr<Salaried> a) {
  a->PrintEarnings();
}

int main(int argc, char **argv) {
  vector<shared_ptr<Salaried> > vec;

  vec.push_back(shared_ptr<Salaried>(new Salaried(110000)));
  vec.push_back(shared_ptr<Salaried>(new SalariedBonus(120000, 80000)));
  vec.push_back(shared_ptr<Salaried>(new SalariedBonus(55000, 10000)));

  sort(vec.begin(), vec.end(), &SortFunction);
  for_each(vec.begin(), vec.end(), &PrintFunction);

  return EXIT_SUCCESS;
}