123 lines
3.0 KiB
C++
123 lines
3.0 KiB
C++
// Copyright (C) 2005 Davis E. King (davis@dlib.net)
|
|
// License: Boost Software License See LICENSE.txt for the full license.
|
|
#ifndef DLIB_STATIC_SET_COMPARe_1_
|
|
#define DLIB_STATIC_SET_COMPARe_1_
|
|
|
|
#include "static_set_compare_abstract.h"
|
|
|
|
#include "../algs.h"
|
|
|
|
|
|
|
|
namespace dlib
|
|
{
|
|
|
|
template <
|
|
typename static_set_base
|
|
>
|
|
class static_set_compare_1 : public static_set_base
|
|
{
|
|
|
|
public:
|
|
|
|
bool operator< (
|
|
const static_set_compare_1& rhs
|
|
) const;
|
|
|
|
bool operator== (
|
|
const static_set_compare_1& rhs
|
|
) const;
|
|
|
|
};
|
|
|
|
|
|
template <
|
|
typename static_set_base
|
|
>
|
|
inline void swap (
|
|
static_set_compare_1<static_set_base>& a,
|
|
static_set_compare_1<static_set_base>& b
|
|
) { a.swap(b); }
|
|
|
|
// ----------------------------------------------------------------------------------------
|
|
// ----------------------------------------------------------------------------------------
|
|
// member function definitions
|
|
// ----------------------------------------------------------------------------------------
|
|
// ----------------------------------------------------------------------------------------
|
|
|
|
template <
|
|
typename static_set_base
|
|
>
|
|
bool static_set_compare_1<static_set_base>::
|
|
operator< (
|
|
const static_set_compare_1<static_set_base>& rhs
|
|
) const
|
|
{
|
|
bool result = false;
|
|
if (static_set_base::size() < rhs.size())
|
|
result = true;
|
|
|
|
if (static_set_base::size() == rhs.size())
|
|
{
|
|
rhs.reset();
|
|
static_set_base::reset();
|
|
while (rhs.move_next())
|
|
{
|
|
static_set_base::move_next();
|
|
if (static_set_base::element() < rhs.element())
|
|
{
|
|
result = true;
|
|
break;
|
|
}
|
|
else if (rhs.element() < static_set_base::element())
|
|
{
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
|
|
static_set_base::reset();
|
|
rhs.reset();
|
|
|
|
return result;
|
|
}
|
|
|
|
// ----------------------------------------------------------------------------------------
|
|
|
|
template <
|
|
typename static_set_base
|
|
>
|
|
bool static_set_compare_1<static_set_base>::
|
|
operator== (
|
|
const static_set_compare_1<static_set_base>& rhs
|
|
) const
|
|
{
|
|
bool result = true;
|
|
if (static_set_base::size() != rhs.size())
|
|
result = false;
|
|
|
|
|
|
rhs.reset();
|
|
static_set_base::reset();
|
|
while (rhs.move_next() && static_set_base::move_next())
|
|
{
|
|
if (!(rhs.element() == static_set_base::element()))
|
|
{
|
|
result = false;
|
|
break;
|
|
}
|
|
}
|
|
|
|
static_set_base::reset();
|
|
rhs.reset();
|
|
|
|
return result;
|
|
}
|
|
|
|
// ----------------------------------------------------------------------------------------
|
|
|
|
}
|
|
|
|
#endif // DLIB_STATIC_SET_COMPARe_1_
|
|
|