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:
authorSergey Yershov <yershov@corp.mail.ru>2014-12-12 16:00:53 +0300
committerAlex Zolotarev <alex@maps.me>2015-09-23 02:35:24 +0300
commitebf94896845e189fc9fbab187eb88b2f2b233324 (patch)
tree1d673cf95ad6f79c349bf7d2244ede0bc80d2ec7 /indexer/feature_data.hpp
parentb79ade75a8885d627646c474bbc5f04c268de5ef (diff)
Add read/write temporary feature state with additional info
Diffstat (limited to 'indexer/feature_data.hpp')
-rw-r--r--indexer/feature_data.hpp44
1 files changed, 42 insertions, 2 deletions
diff --git a/indexer/feature_data.hpp b/indexer/feature_data.hpp
index 798da16241..4224e80380 100644
--- a/indexer/feature_data.hpp
+++ b/indexer/feature_data.hpp
@@ -206,6 +206,16 @@ class FeatureParams : public FeatureParamsBase
string m_street;
public:
+
+ enum additional_info_types {
+ ait_cuisine = 1,
+ ait_open_hours,
+ ait_phone_number,
+ ait_fax_number
+ };
+ typedef std::map<uint8_t, std::string> additional_info_type;
+ additional_info_type m_additional_info;
+
typedef vector<uint32_t> types_t;
types_t m_Types;
@@ -216,6 +226,9 @@ public:
bool AddName(string const & lang, string const & s);
bool AddHouseName(string const & s);
bool AddHouseNumber(string const & s);
+
+ bool AddAdditionalInfo(additional_info_types type,string const &s);
+
/// @name Used in storing full street address only.
//@{
void AddStreetAddress(string const & s);
@@ -230,6 +243,7 @@ public:
m_Types = rhs.m_Types;
m_street = rhs.m_street;
+ m_additional_info = rhs.m_additional_info;
}
inline bool IsValid() const { return !m_Types.empty(); }
@@ -255,7 +269,7 @@ public:
uint8_t GetHeader() const;
- template <class TSink> void Write(TSink & sink) const
+ template <class TSink> void Write(TSink & sink, bool need_store_additional_info = true) const
{
uint8_t const header = GetHeader();
@@ -264,10 +278,24 @@ public:
for (size_t i = 0; i < m_Types.size(); ++i)
WriteVarUint(sink, GetIndexForType(m_Types[i]));
+ if( need_store_additional_info )
+ {
+ uint8_t const ait_size = m_additional_info.size();
+ WriteToSink(sink, ait_size);
+ if (ait_size)
+ {
+ for(auto &it: m_additional_info)
+ {
+ WriteToSink(sink, uint8_t(it.first));
+ utils::WriteString(sink, it.second);
+ }
+ }
+ }
+
BaseT::Write(sink, header);
}
- template <class TSrc> void Read(TSrc & src)
+ template <class TSrc> void Read(TSrc & src, bool need_read_additional_info = true)
{
using namespace feature;
@@ -278,6 +306,18 @@ public:
for (size_t i = 0; i < count; ++i)
m_Types.push_back(GetTypeForIndex(ReadVarUint<uint32_t>(src)));
+ if( need_read_additional_info )
+ {
+ uint8_t const ait_size = ReadPrimitiveFromSource<uint8_t>(src);
+ for(size_t i=0; i<ait_size; ++i)
+ {
+ uint8_t const key = ReadPrimitiveFromSource<uint8_t>(src);
+ std::string value;
+ utils::ReadString(src, value);
+ m_additional_info.insert(make_pair(key, value));
+ }
+ }
+
BaseT::Read(src, header);
}