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:
authorVladiMihaylenko <vxmihaylenko@gmail.com>2017-10-20 14:29:26 +0300
committerr.kuznetsov <r.kuznetsov@corp.mail.ru>2017-11-09 11:10:09 +0300
commit8bcc2e1c5885e4348f9727881db7bb697d47dc24 (patch)
tree6851d00112801cd9f02fac3fc1ca374faa9dec0b /indexer/ftraits.hpp
parent9e725b7eb744b1d3f5028a60b5427db2797919f4 (diff)
Send type from ugc_types.csv
Diffstat (limited to 'indexer/ftraits.hpp')
-rw-r--r--indexer/ftraits.hpp68
1 files changed, 46 insertions, 22 deletions
diff --git a/indexer/ftraits.hpp b/indexer/ftraits.hpp
index 7900f43afc..35ac7f3241 100644
--- a/indexer/ftraits.hpp
+++ b/indexer/ftraits.hpp
@@ -23,22 +23,49 @@ template <typename Base, typename Value>
class TraitsBase
{
public:
- static Value GetValue(feature::TypesHolder const & types)
+ static bool GetValue(feature::TypesHolder const & types, Value & value)
{
- static Base instance;
+ auto const & instance = Instance();
+ auto const it = Find(types);
+ if (!instance.m_matcher.IsValid(it))
+ return false;
- auto const excluded = instance.m_excluded.Find(types);
- if (instance.m_excluded.IsValid(excluded))
- return Base::GetEmptyValue();
+ value = it->second;
+ return true;
+ }
- auto const it = instance.m_matcher.Find(types);
+ static bool GetType(feature::TypesHolder const & types, uint32_t & type)
+ {
+ auto const & instance = Instance();
+ auto const it = Find(types);
if (!instance.m_matcher.IsValid(it))
- return Base::GetEmptyValue();
+ return false;
- return it->second;
+ type = it->first;
+ return true;
+ }
+
+private:
+ using ConstIterator = typename ftypes::HashMapMatcher<uint32_t, Value>::ConstIterator;
+
+ static ConstIterator Find(feature::TypesHolder const & types)
+ {
+ auto const & instance = Instance();
+
+ auto const excluded = instance.m_excluded.Find(types);
+ if (instance.m_excluded.IsValid(excluded))
+ return instance.m_matcher.End();
+
+ return instance.m_matcher.Find(types);
}
protected:
+ static TraitsBase const & Instance()
+ {
+ static Base instance;
+ return instance;
+ }
+
ftypes::HashMapMatcher<uint32_t, Value> m_matcher;
ftypes::HashSetMatcher<uint32_t> m_excluded;
};
@@ -121,12 +148,6 @@ class UGC : public TraitsBase<UGC, UGCItem>
}
public:
- static UGCItem const & GetEmptyValue()
- {
- static const UGCItem item;
- return item;
- }
-
static bool IsUGCAvailable(UGCTypeMask mask) { return mask != UGCTYPE_NONE; }
static bool IsRatingAvailable(UGCTypeMask mask) { return mask & UGCTYPE_RATING; }
static bool IsReviewsAvailable(UGCTypeMask mask) { return mask & UGCTYPE_REVIEWS; }
@@ -134,23 +155,29 @@ public:
static bool IsUGCAvailable(feature::TypesHolder const & types)
{
- return IsUGCAvailable(GetValue(types).m_mask);
+ UGCItem item;
+ return GetValue(types, item) ? IsUGCAvailable(item.m_mask) : false;
}
static bool IsRatingAvailable(feature::TypesHolder const & types)
{
- return IsRatingAvailable(GetValue(types).m_mask);
+ UGCItem item;
+ return GetValue(types, item) ? IsRatingAvailable(item.m_mask) : false;
}
static bool IsReviewsAvailable(feature::TypesHolder const & types)
{
- return IsReviewsAvailable(GetValue(types).m_mask);
+ UGCItem item;
+ return GetValue(types, item) ? IsReviewsAvailable(item.m_mask) : false;
}
static bool IsDetailsAvailable(feature::TypesHolder const & types)
{
- return IsDetailsAvailable(GetValue(types).m_mask);
+ UGCItem item;
+ return GetValue(types, item) ? IsDetailsAvailable(item.m_mask) : false;
}
static UGCRatingCategories GetCategories(feature::TypesHolder const & types)
{
- return GetValue(types).m_categories;
+ UGCItem item;
+ GetValue(types, item);
+ return item.m_categories;
}
};
@@ -184,9 +211,6 @@ class Wheelchair : public TraitsBase<Wheelchair, WheelchairAvailability>
m_matcher.Append<TypesInitializer>({{"wheelchair", "limited"}},
WheelchairAvailability::Limited);
}
-
-public:
- static WheelchairAvailability GetEmptyValue() { return WheelchairAvailability::No; }
};
} // namespace ftraits