Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/mapsme/omim.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorvng <viktor.govako@gmail.com>2012-02-10 03:51:40 +0400
committerAlex Zolotarev <alex@maps.me>2015-09-23 01:33:54 +0300
commita2273f714f288bb04328aba868e291adc1874e67 (patch)
tree374da734e3dfa900bdca475d955072f54284d456 /search/intermediate_result.hpp
parentb07616b31542cabab2c5ae7a9a0024167059be8b (diff)
[search] Divide IntermediateResukt into PreResult1 and PreResult2. Do not load features, while making PreResult1.
Diffstat (limited to 'search/intermediate_result.hpp')
-rw-r--r--search/intermediate_result.hpp84
1 files changed, 42 insertions, 42 deletions
diff --git a/search/intermediate_result.hpp b/search/intermediate_result.hpp
index 1884baba26..fd08ddd785 100644
--- a/search/intermediate_result.hpp
+++ b/search/intermediate_result.hpp
@@ -22,10 +22,35 @@ namespace search
namespace impl
{
-class IntermediateResult
+/// First results class. Objects are creating during search in trie.
+class PreResult1
{
- void CalcCommonParams(m2::RectD const & viewportRect, m2::PointD const & pos);
+ friend class PreResult2;
+ m2::PointD m_center;
+ double m_distance;
+ size_t m_mwmID;
+ uint32_t m_featureID;
+ uint8_t m_viewportDistance;
+ uint8_t m_rank;
+
+ void CalcParams(m2::RectD const & viewportRect, m2::PointD const & pos);
+
+public:
+ PreResult1(uint32_t fID, uint8_t rank, m2::PointD const & center, size_t mwmID,
+ m2::PointD const & pos, m2::RectD const & viewport);
+
+ static bool LessRank(PreResult1 const & r1, PreResult1 const & r2);
+ static bool LessDistance(PreResult1 const & r1, PreResult1 const & r2);
+ static bool LessViewportDistance(PreResult1 const & r1, PreResult1 const & r2);
+
+ inline pair<uint32_t, size_t> GetID() const { return make_pair(m_featureID, m_mwmID); }
+};
+
+
+/// Second result class. Objects are creating during reading of features.
+class PreResult2
+{
public:
enum ResultType
{
@@ -35,64 +60,49 @@ public:
};
// For RESULT_FEATURE.
- IntermediateResult(m2::RectD const & viewportRect, m2::PointD const & pos,
- FeatureType const & f, m2::PointD const & center, uint8_t rank,
- string const & displayName, string const & fileName);
+ PreResult2(FeatureType const & f, PreResult1 const & res,
+ string const & displayName, string const & fileName);
// For RESULT_LATLON.
- IntermediateResult(m2::RectD const & viewportRect, m2::PointD const & pos,
- double lat, double lon, double precision);
+ PreResult2(m2::RectD const & viewport, m2::PointD const & pos,
+ double lat, double lon);
// For RESULT_CATEGORY.
- IntermediateResult(string const & name, int penalty);
+ PreResult2(string const & name, int penalty);
typedef multimap<strings::UniString, uint32_t> CategoriesT;
Result GenerateFinalResult(storage::CountryInfoGetter const * pInfo,
CategoriesT const * pCat) const;
- /// Results order functor.
- /*
- struct LessOrderF
- {
- bool operator() (IntermediateResult const & r1, IntermediateResult const & r2) const;
- };
- */
-
- static bool LessRank(IntermediateResult const & r1, IntermediateResult const & r2);
- static bool LessDistance(IntermediateResult const & r1, IntermediateResult const & r2);
- static bool LessViewportDistance(IntermediateResult const & r1, IntermediateResult const & r2);
+ static bool LessRank(PreResult2 const & r1, PreResult2 const & r2);
+ static bool LessDistance(PreResult2 const & r1, PreResult2 const & r2);
+ static bool LessViewportDistance(PreResult2 const & r1, PreResult2 const & r2);
/// Filter equal features for different mwm's.
class StrictEqualF
{
- IntermediateResult const & m_r;
+ PreResult2 const & m_r;
public:
- StrictEqualF(IntermediateResult const & r) : m_r(r) {}
- bool operator() (IntermediateResult const & r) const;
+ StrictEqualF(PreResult2 const & r) : m_r(r) {}
+ bool operator() (PreResult2 const & r) const;
};
/// To filter equal linear objects.
//@{
struct LessLinearTypesF
{
- bool operator() (IntermediateResult const & r1, IntermediateResult const & r2) const;
+ bool operator() (PreResult2 const & r1, PreResult2 const & r2) const;
};
class EqualLinearTypesF
{
public:
- bool operator() (IntermediateResult const & r1, IntermediateResult const & r2) const;
+ bool operator() (PreResult2 const & r1, PreResult2 const & r2) const;
};
//@}
string DebugPrint() const;
private:
- static double ResultDistance(m2::PointD const & viewportCenter,
- m2::PointD const & featureCenter);
- static double ResultDirection(m2::PointD const & viewportCenter,
- m2::PointD const & featureCenter);
- static int ViewportDistance(m2::RectD const & viewport, m2::PointD const & p);
-
string GetFeatureType(CategoriesT const * pCat) const;
feature::TypesHolder m_types;
@@ -124,26 +134,16 @@ private:
} m_region;
m2::PointD m_center;
-
double m_distance;
- int m_viewportDistance;
-
ResultType m_resultType;
uint8_t m_searchRank;
+ uint8_t m_viewportDistance;
};
-inline string DebugPrint(IntermediateResult const & t)
+inline string DebugPrint(PreResult2 const & t)
{
return t.DebugPrint();
}
} // namespace search::impl
} // namespace search
-
-namespace boost
-{
- inline string DebugPrint(shared_ptr<search::impl::IntermediateResult> const & p)
- {
- return DebugPrint(*p);
- }
-}