/* -*- C++ -*- */
/*************************************************************************
 * Copyright(c) 1995~2005  Masaharu Goto (root-cint@cern.ch)
 *
 * For the licensing terms see the file COPYING
 *
 ************************************************************************/
// lib/prec_stl/queue

#pragma ifndef PREC_STL_QUEUE
#pragma define PREC_STL_QUEUE
#pragma link off global PREC_STL_QUEUE;
#pragma link C++ nestedtypedef;
#pragma link C++ nestedclass;
#if defined(G__HP_aCC) || defined(G__SUNPRO_CC)
#pragma mask_newdelete 0x1c;
#else
#pragma mask_newdelete 0x10;
#endif

// Imported from ANSI/ISO C++ 1997/Nov draft 
// Got some ideas from Scott Snyder, Fermi-lab
// Modified by Masaharu Goto

#include <_deque>

template <class T, class Container = deque<T> >
class queue {
 public:
  typedef typename Container::value_type            value_type;
  typedef typename Container::size_type             size_type;
  typedef          Container                        container_type;
 protected:
  Container c;
 public:
#ifdef __CINT__
  queue();
  //queue(const Container&);
#else
  explicit queue(const Container& = Container());
#endif
  queue();

  bool      empty() const;
  size_type size()  const;
  value_type&       front();
  //const value_type& front() const;
  value_type&       back();
  //const value_type& back() const;
#ifdef __CINT__
  void push(const T& x);
#else
  void push(const value_type& x); // cint bug, need to fix sometime
#endif
  void pop();

#ifndef G__VISUAL
  friend bool operator==(const queue& x, const queue& y);
  friend bool operator< (const queue& x, const queue& y);
  friend bool operator!=(const queue& x, const queue& y);
  friend bool operator> (const queue& x, const queue& y);
  friend bool operator>=(const queue& x, const queue& y);
  friend bool operator<=(const queue& x, const queue& y);
#endif
};

#pragma endif
