forked from organicmaps/organicmaps
[search] Better LessXXX functors for intermediate results.
This commit is contained in:
parent
5fe11e0b5e
commit
49a3dffe4d
2 changed files with 34 additions and 4 deletions
|
@ -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)
|
||||
|
|
|
@ -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;
|
||||
|
|
Loading…
Add table
Reference in a new issue