/**************************************************************************\
MODULE: pair
SUMMARY:
Pair templates.
The decalaration
Pair<S,T> p;
creates a pair object using the default constructors for S and T. The
member p.a is the first component (of type S) and the member p.b is
the second component (of type T).
\**************************************************************************/
#include <NTL/tools.h>
template<class S, class T>
class Pair {
public:
S a;
T b;
Pair();
// default constructor...invokes default constructors for S and T
Pair(const Pair<S,T>& x); // copy
Pair& operator=(const Pair<S,T>& x); // assignment
Pair(const S& x, const T& y); // initialize with (x, y)
~Pair();
// destructor...invokes destructors for S and T
};
template<class S, class T>
Pair<S,T> cons(const S& x, const T& y);
// returns Pair<S,T>(x, y)
/**************************************************************************\
Input/Output
The I/O format for a Pair is
[a b]
\**************************************************************************/
template<class S, class T>
istream& operator>>(istream&, Pair<S,T>&);
template<class S, class T>
ostream& operator<<(ostream&, const Pair<S,T>&);
/**************************************************************************\
Equality Testing
\**************************************************************************/
template<class S, class T>
long operator==(const Pair<S,T>& x, const Pair<S,T>& y);
template<class S, class T>
long operator!=(const Pair<S,T>& x, const Pair<S,T>& y);