// Copyright (C) 1996 DIMACS Center, Rutgers, The State University of New Jersey
// Author(s): ??, Jonathan Berry

// This software is copyrighted by the DIMACS Center at Rutgers, The State
// University of New Jersey.  IT IS PROVIDED AS IS, AND THE AUTHORS, DIMACS, AND
// RUTGERS, THE STATE UNIVERSITY OF NEW JERSEY  DISCLAIM
// ALL LIABILITY FOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL
// DAMAGES ARISING OUT OF THE USE OF THIS SOFTWARE, ITS DOCUMENTATION, OR ANY
// DERIVATIVES THEREOF, EVEN IF THE AUTHORS HAVE BEEN ADVISED OF THE
// POSSIBILITY OF SUCH DAMAGE.

// THE AUTHORS AND DISTRIBUTORS SPECIFICALLY DISCLAIM ANY WARRANTIES,
// INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE, AND NON-INFRINGEMENT.  THIS SOFTWARE
// IS PROVIDED ON AN "AS IS" BASIS, AND THE AUTHORS AND DISTRIBUTORS HAVE
// NO OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR
// MODIFICATIONS.

// The authors hereby grant permission to use, copy, modify, distribute,
// and license this software and its documentation for any purpose, provided
// that existing copyright notices are retained in all copies and that this
// notice is included verbatim in any distributions. No written agreement,
// license, or royalty fee is required for any of the authorized uses.
// Modifications to this software may be copyrighted by their authors
// and need not follow the licensing terms described here, provided that
// the new terms are clearly indicated on the first page of each file where
// they apply.

// Last File Update: 31-Jul-1996
// 

#ifndef DEQUE_CC
#define DEQUE_CC

template <class Item>
void		
Deque<Item>::copy(const Deque& d)
{ Iterator<Item> it(&d);
  Item e;
  while (it(e))
	List<Item>::append(e);
}

template <class Item>
Deque<Item>::Deque()
{}

template <class Item>
ostream&
Deque<Item>::display(ostream& os) const
{ 
	return List<Item>::display(os);   
}

template <class Item>
Item
Deque<Item>::front()
{ 
	return List<Item>::first();       
}


template <class Item>
void
Deque<Item>::clear()
{        
	List<Item>::clear();       
}

template <class Item>
Item
Deque<Item>::get()
{ 	
	return List<Item>::get();         
}

template <class Item>
void
Deque<Item>::insertFirst(Item& e)
{ 	
	List<Item>::insert(e); 	    
}

template <class Item>
void
Deque<Item>::insertLast(Item& e)
{ 
	List<Item>::append(e);       
}

template <class Item>
Bool
Deque<Item>::emptyQ()
{ 
	return List<Item>::emptyQ(); 
}

template <class Item>
Bool
Deque<Item>::operator==(const Deque& m) const
{ 
	return List<Item>::operator==(m); 
}

template <class Item>
Bool
Deque<Item>::operator!=(const Deque& m) const
{ 
	return List<Item>::operator!=(m); 
}

template <class Item>
Bool
Deque<Item>::operator<=(const Deque& m) const
{ 
	return List<Item>::operator<=(m); 
}

template <class Item>
Bool
Deque<Item>::operator<(const Deque& m) const
{ 
	return List<Item>::operator<(m); 
}

template <class Item>
Bool
Deque<Item>::operator>(const Deque& m) const
{ 
	return List<Item>::operator>(m); 
}

template <class Item>
Bool
Deque<Item>::operator>=(const Deque& m) const
{ 
	return List<Item>::operator>=(m); 
}

template <class Item>
ostream& operator<<(ostream& os, const Deque<Item>& d)
{
	return d.display(os);
}

#endif
