// librarySort.cc   Demo of the C library qsort routine
// P. Conrad for CISC220 06J

#include <cstdlib> // for qsort() among other things
#include <iostream>
#include <cassert>
#include <fstream>
using std::cout;
using std::cerr;
using std::ifstream;


#include "runTests.h"
#include "librarySort.h"

int *readArrayFromFile(int n, const char * const filename)
{
  // read n elements into array from filename
  // if extra elements, don't complain.
  // if you run out, complain.
  // return an array on heap containing those elements.
  
  ifstream inf(filename, ios::in);
  if (!inf)
    {
      cerr << "Error: could not open " << filename << endl;
      exit(1);
    }
    
  int *array = new int [n];
  
  for (int i=0; i<n; i++)
    {
      inf >> array[i];
      if (inf.eof())
	{
	  cerr << "Error: You asked for the first " << n << " elements \n"
	       << " but " << filename << " only contained " << i 
	       << " elements" << endl;
	  exit(2);
	}
    }

  return array;
}

void printArray(int a[], int n)
{
  for (int i=0; i<n; i++)
    cout << a[i] << endl;
}
  
int main(int argc, char *argv[])
{
  if (argc!=3)
    {
      cerr << "Usage: " << argv[0] << " count filename" << endl;
      exit(3);
    }

  int count = atoi(argv[1]);

  if (count < 0)
    {
      cerr << "Error: count should be a non-negative integer " << endl;
      exit(4);
    }

  int *a = readArrayFromFile(count, argv[2]);
  assert(a!=NULL);

  sortArray(a,count);
  printArray(a,count);

  delete [] a; // recycle the memory allocated by "readArrayFromFile"

  return 0;
  
}





