/*--- ExtendedVector.h -----------------------------------------------------
  This header file contains the class template ExtendedVector, which is
  derived from STL's vector<T> class template.  It extends vector<T> by 
  adding the following operators:
      Constructor:  constructs an empty ExtendedVector
      lessEqDefined(): checks if < and == are defined for type T
      Output (<<) and input (>>) operators
      linearSearch():  searches for a value
      insert():  inserts a value at a particular location (index)
      erase():   erases a specified value
  If < and == are defined for type T, the following operations
  are also available:
      isSorted(): checks if the elements are sorted
      exSort():   sorts the elements
 

  Written by:   Larry R. Nyhoff
   
  Written for:  Lab Manual for ADTs, Data Structures, and Problem
                 Solving with C++, 2E

                  Lab #12.1 and Project #12.1
                                                          
  Add your name here and other info requested by your instructor.

---------------------------------------------------------------------------*/

#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;

#ifndef EXTVEC
#define EXTVEC

template <typename T>
class ExtendedVector
{
 public:

  // Insert prototype of constructor here

  /*-----------------------------------------------------------------------
   The ExtendedVector<T> constructor for ExtendedVector objects.
     Precondition:  None
     Postcondition: This object has been initialized as an empty
         ExtendedVector<T> with lessEqDefined data membe set to the value
         of the boolean parameter
               true if <= is defined for ElementType, false if not.
  ------------------------------------------------------------------------*/


  // Insert prototypes and documentation for output and input functions here


  // Insert prototype and documentation for ifLessEqDefined() here


  // Insert prototype and documentation for isSorted() here


  // Insert prototype and documentation for exSort() here


  // Insert prototype and documentation for linearSearch() here


  // Insert prototype of insert() here

  /*----------------------------------------------------------------------- 
    Insert value into an ExtendedVector at a specified position.

    Precondition:  0 <= position <= size of this ExtendedVector object.
    Postcondition: value has been inserted into this ExtendedVector<T>
        object at location position, provided it is a legal location; 
        otherwise, the object is unchanged.
  ------------------------------------------------------------------------*/


  // Insert prototype of erase() here

  /*----------------------------------------------------------------------- 
    Erase a value from an ExtendedVector.

    Precondition:  None
    Postcondition: value has been removed from this ExtendedVector<T>
        object, provided it was found; otherwise, the  object is 
        unchanged.
  ------------------------------------------------------------------------*/

 
 private:
  // Declare Data Member(s) here

};


// INSERT FUNCTION DEFINITIONS BELOW

//--- Definition of constructor


//--- Definitions of output and input functions


//--- Definition of isLessEqDefined() 



//--- Definition of isSorted()


//--- Definition of exSort()


//--- Definition of linearSearch()


//--- Definition of insert()


//--- Definition of erase()

#endif

