[search] Better LessXXX functors for intermediate results.

This commit is contained in:
vng 2012-03-05 00:11:48 +03:00 committed by Alex Zolotarev
parent 5fe11e0b5e
commit 49a3dffe4d
2 changed files with 34 additions and 4 deletions

View file

@ -62,6 +62,30 @@ template <class T> bool LessViewportDistanceT(T const & r1, T const & r2)
return (r1.m_distanceFromViewportCenter < r2.m_distanceFromViewportCenter);
}
template <class T> bool LessRankT(T const & r1, T const & r2)
{
if (r1.m_rank != r2.m_rank)
return (r1.m_rank > r2.m_rank);
if (r1.m_viewportDistance != r2.m_viewportDistance)
return (r1.m_viewportDistance < r2.m_viewportDistance);
if (r1.m_distance != r2.m_distance)
return (r1.m_distance < r2.m_distance);
return (r1.m_distanceFromViewportCenter < r2.m_distanceFromViewportCenter);
}
template <class T> bool LessDistanceT(T const & r1, T const & r2)
{
if (r1.m_distance != r2.m_distance)
return (r1.m_distance < r2.m_distance);
if (r1.m_rank != r2.m_rank)
return (r1.m_rank > r2.m_rank);
return (r1.m_distanceFromViewportCenter < r2.m_distanceFromViewportCenter);
}
PreResult1::PreResult1(uint32_t fID, uint8_t rank, m2::PointD const & center, size_t mwmID,
m2::PointD const & pos, m2::RectD const & viewport)
@ -95,12 +119,12 @@ void PreResult1::CalcParams(m2::RectD const & viewport, m2::PointD const & pos)
bool PreResult1::LessRank(PreResult1 const & r1, PreResult1 const & r2)
{
return (r1.m_rank > r2.m_rank);
return LessRankT(r1, r2);
}
bool PreResult1::LessDistance(PreResult1 const & r1, PreResult1 const & r2)
{
return (r1.m_distance < r2.m_distance);
return LessDistanceT(r1, r2);
}
bool PreResult1::LessViewportDistance(PreResult1 const & r1, PreResult1 const & r2)
@ -229,12 +253,12 @@ Result PreResult2::GenerateFinalResult(
bool PreResult2::LessRank(PreResult2 const & r1, PreResult2 const & r2)
{
return (r1.m_rank > r2.m_rank);
return LessRankT(r1, r2);
}
bool PreResult2::LessDistance(PreResult2 const & r1, PreResult2 const & r2)
{
return (r1.m_distance < r2.m_distance);
return LessDistanceT(r1, r2);
}
bool PreResult2::LessViewportDistance(PreResult2 const & r1, PreResult2 const & r2)

View file

@ -23,13 +23,17 @@ namespace search
namespace impl
{
template <class T> bool LessRankT(T const & r1, T const & r2);
template <class T> bool LessViewportDistanceT(T const & r1, T const & r2);
template <class T> bool LessDistanceT(T const & r1, T const & r2);
/// First results class. Objects are creating during search in trie.
class PreResult1
{
friend class PreResult2;
template <class T> friend bool LessRankT(T const & r1, T const & r2);
template <class T> friend bool LessViewportDistanceT(T const & r1, T const & r2);
template <class T> friend bool LessDistanceT(T const & r1, T const & r2);
m2::PointD m_center;
double m_distance, m_distanceFromViewportCenter;
@ -106,7 +110,9 @@ public:
string DebugPrint() const;
private:
template <class T> friend bool LessRankT(T const & r1, T const & r2);
template <class T> friend bool LessViewportDistanceT(T const & r1, T const & r2);
template <class T> friend bool LessDistanceT(T const & r1, T const & r2);
string GetFeatureType(CategoriesHolder const * pCat, int8_t lang) const;
m2::RectD GetFinalViewport() const;