99 lines
3.1 KiB
C++
99 lines
3.1 KiB
C++
/// \file comparable.h
|
|
/// \brief Declares the Comparable<T> mixin
|
|
|
|
/***********************************************************************
|
|
Copyright (c) 1998 by Kevin Atkinson, (c) 1999-2001 by MySQL AB, and
|
|
(c) 2004-2008 by Educational Technology Resources, Inc. Others may
|
|
also hold copyrights on code in this file. See the CREDITS.txt file
|
|
in the top directory of the distribution for details.
|
|
|
|
This file is part of MySQL++.
|
|
|
|
MySQL++ is free software; you can redistribute it and/or modify it
|
|
under the terms of the GNU Lesser General Public License as published
|
|
by the Free Software Foundation; either version 2.1 of the License, or
|
|
(at your option) any later version.
|
|
|
|
MySQL++ is distributed in the hope that it will be useful, but WITHOUT
|
|
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
|
FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public
|
|
License for more details.
|
|
|
|
You should have received a copy of the GNU Lesser General Public
|
|
License along with MySQL++; if not, write to the Free Software
|
|
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301
|
|
USA
|
|
***********************************************************************/
|
|
|
|
#if !defined(MYSQLPP_COMPARABLE_H)
|
|
#define MYSQLPP_COMPARABLE_H
|
|
|
|
namespace mysqlpp {
|
|
|
|
/// \brief Mix-in that gives its subclass a full set of comparison
|
|
/// operators.
|
|
///
|
|
/// Simply by inheriting publically from this and implementing
|
|
/// compare(), the subclass gains a full set of comparison operators,
|
|
/// because all of the operators are implemented in terms of compare().
|
|
template <class T>
|
|
class Comparable
|
|
{
|
|
public:
|
|
/// \brief Returns true if "other" is equal to this object
|
|
bool operator ==(const T& other) const
|
|
{
|
|
return !compare(other);
|
|
}
|
|
|
|
/// \brief Returns true if "other" is not equal to this object
|
|
bool operator !=(const T& other) const
|
|
{
|
|
return compare(other);
|
|
}
|
|
|
|
/// \brief Returns true if "other" is less than this object
|
|
bool operator <(const T& other) const
|
|
{
|
|
return compare(other) < 0;
|
|
}
|
|
|
|
/// \brief Returns true if "other" is less than or equal to this object
|
|
bool operator <=(const T& other) const
|
|
{
|
|
return compare(other) <= 0;
|
|
}
|
|
|
|
/// \brief Returns true if "other" is greater than this object
|
|
bool operator >(const T& other) const
|
|
{
|
|
return compare(other) > 0;
|
|
}
|
|
|
|
/// \brief Returns true if "other" is greater than or equal to this object
|
|
bool operator >=(const T& other) const
|
|
{
|
|
return compare(other) >= 0;
|
|
}
|
|
|
|
protected:
|
|
/// \brief Destroy object
|
|
///
|
|
/// This class has nothing to destroy, but declaring the dtor
|
|
/// virtual placates some compilers set to high warning levels.
|
|
/// Protecting it ensures you can't delete subclasses through base
|
|
/// class pointers, which makes no sense because this class isn't
|
|
/// made for polymorphism. It's just a mixin.
|
|
virtual ~Comparable() { }
|
|
|
|
/// \brief Compare this object to another of the same type
|
|
///
|
|
/// Returns < 0 if this object is "before" the other, 0 of they are
|
|
/// equal, and > 0 if this object is "after" the other.
|
|
virtual int compare(const T& other) const = 0;
|
|
};
|
|
|
|
}
|
|
|
|
#endif // !defined(MYSQLPP_COMPARABLE_H)
|