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:
-rw-r--r--coding/traffic.hpp19
-rw-r--r--tracking/connection.cpp2
-rw-r--r--tracking/protocol.cpp14
-rw-r--r--tracking/protocol.hpp6
-rw-r--r--tracking/pytracking/bindings.cpp1
-rw-r--r--tracking/tracking_tests/protocol_test.cpp2
6 files changed, 24 insertions, 20 deletions
diff --git a/coding/traffic.hpp b/coding/traffic.hpp
index c28fcea13d..0df9ee0a64 100644
--- a/coding/traffic.hpp
+++ b/coding/traffic.hpp
@@ -6,6 +6,8 @@
#include "geometry/latlon.hpp"
+#include "base/checked_cast.hpp"
+
#include "std/limits.hpp"
#include "std/vector.hpp"
@@ -23,6 +25,7 @@ public:
struct DataPoint
{
+ // TODO(@m): document the version format
DataPoint() = default;
DataPoint(uint64_t timestamp, ms::LatLon latLon, uint8_t traffic)
@@ -33,7 +36,9 @@ public:
// It is expected that |m_timestamp| stores time since epoch in seconds.
uint64_t m_timestamp = 0;
ms::LatLon m_latLon = ms::LatLon::Zero();
- // TODO: comment the decision
+ // A pod type instead of the traffic::SpeedGroup enum
+ // so as not to introduce a cyclic dependency.
+ // This field was added in Version 1 (and was the only addition).
uint8_t m_traffic = 0;
bool operator==(DataPoint const & p) const
@@ -174,7 +179,7 @@ private:
Uint32ToDouble(ReadVarUint<uint32_t>(src), ms::LatLon::kMinLat, ms::LatLon::kMaxLat);
lastLon =
Uint32ToDouble(ReadVarUint<uint32_t>(src), ms::LatLon::kMinLon, ms::LatLon::kMaxLon);
- result.push_back(DataPoint(lastTimestamp, ms::LatLon(lastLat, lastLon), traffic));
+ result.emplace_back(lastTimestamp, ms::LatLon(lastLat, lastLon), traffic);
first = false;
}
else
@@ -182,7 +187,7 @@ private:
lastTimestamp += ReadVarUint<uint64_t>(src);
lastLat += Uint32ToDouble(ReadVarUint<uint32_t>(src), kMinDeltaLat, kMaxDeltaLat);
lastLon += Uint32ToDouble(ReadVarUint<uint32_t>(src), kMinDeltaLon, kMaxDeltaLon);
- result.push_back(DataPoint(lastTimestamp, ms::LatLon(lastLat, lastLon), traffic));
+ result.emplace_back(lastTimestamp, ms::LatLon(lastLat, lastLon), traffic);
}
}
}
@@ -205,8 +210,8 @@ private:
Uint32ToDouble(ReadVarUint<uint32_t>(src), ms::LatLon::kMinLat, ms::LatLon::kMaxLat);
lastLon =
Uint32ToDouble(ReadVarUint<uint32_t>(src), ms::LatLon::kMinLon, ms::LatLon::kMaxLon);
- traffic = static_cast<uint8_t>(ReadVarUint<uint32_t>(src));
- result.push_back(DataPoint(lastTimestamp, ms::LatLon(lastLat, lastLon), traffic));
+ traffic = base::asserted_cast<uint8_t>(ReadVarUint<uint32_t>(src));
+ result.emplace_back(lastTimestamp, ms::LatLon(lastLat, lastLon), traffic);
first = false;
}
else
@@ -214,8 +219,8 @@ private:
lastTimestamp += ReadVarUint<uint64_t>(src);
lastLat += Uint32ToDouble(ReadVarUint<uint32_t>(src), kMinDeltaLat, kMaxDeltaLat);
lastLon += Uint32ToDouble(ReadVarUint<uint32_t>(src), kMinDeltaLon, kMaxDeltaLon);
- traffic = static_cast<uint8_t>(ReadVarUint<uint32_t>(src));
- result.push_back(DataPoint(lastTimestamp, ms::LatLon(lastLat, lastLon), traffic));
+ traffic = base::asserted_cast<uint8_t>(ReadVarUint<uint32_t>(src));
+ result.emplace_back(lastTimestamp, ms::LatLon(lastLat, lastLon), traffic);
}
}
}
diff --git a/tracking/connection.cpp b/tracking/connection.cpp
index d9e13304c7..bc242f3d3b 100644
--- a/tracking/connection.cpp
+++ b/tracking/connection.cpp
@@ -60,7 +60,7 @@ bool Connection::Send(boost::circular_buffer<DataPoint> const & points)
if (!m_socket)
return false;
- auto packet = Protocol::CreateDataPacket(points);
+ auto packet = Protocol::CreateDataPacket(points, tracking::Protocol::PacketType::CurrentData);
return m_socket->Write(packet.data(), static_cast<uint32_t>(packet.size()));
}
} // namespace tracking
diff --git a/tracking/protocol.cpp b/tracking/protocol.cpp
index 3d97400a87..d394c34a8f 100644
--- a/tracking/protocol.cpp
+++ b/tracking/protocol.cpp
@@ -18,15 +18,15 @@ vector<uint8_t> CreateDataPacketImpl(Container const & points,
vector<uint8_t> buffer;
MemWriter<decltype(buffer)> writer(buffer);
- uint32_t serializer_version = tracking::Protocol::Encoder::kLatestVersion;
+ uint32_t version = tracking::Protocol::Encoder::kLatestVersion;
switch (type)
{
- case tracking::Protocol::PacketType::DataV0: serializer_version = 0; break;
- case tracking::Protocol::PacketType::DataV1: serializer_version = 1; break;
- case tracking::Protocol::PacketType::AuthV0: ASSERT(false, ("Not a DATA type.")); break;
+ case tracking::Protocol::PacketType::DataV0: version = 0; break;
+ case tracking::Protocol::PacketType::DataV1: version = 1; break;
+ case tracking::Protocol::PacketType::AuthV0: ASSERT(false, ("Not a DATA packet.")); break;
}
- tracking::Protocol::Encoder::SerializeDataPoints(serializer_version, writer, points);
+ tracking::Protocol::Encoder::SerializeDataPoints(version, writer, points);
auto packet = tracking::Protocol::CreateHeader(type, static_cast<uint32_t>(buffer.size()));
packet.insert(packet.end(), begin(buffer), end(buffer));
@@ -92,7 +92,7 @@ string Protocol::DecodeAuthPacket(Protocol::PacketType type, vector<uint8_t> con
{
case Protocol::PacketType::AuthV0: return string(begin(data), end(data));
case Protocol::PacketType::DataV0:
- case Protocol::PacketType::DataV1: ASSERT(false, ("Not AUTH packet.")); break;
+ case Protocol::PacketType::DataV1: ASSERT(false, ("Not an AUTH packet.")); break;
}
return string();
}
@@ -111,7 +111,7 @@ Protocol::DataElementsVec Protocol::DecodeDataPacket(PacketType type, vector<uin
case Protocol::PacketType::DataV1:
Encoder::DeserializeDataPoints(1 /* version */, src, points);
break;
- case Protocol::PacketType::AuthV0: ASSERT(false, ("Not DATA packet.")); break;
+ case Protocol::PacketType::AuthV0: ASSERT(false, ("Not a DATA packet.")); break;
}
return points;
}
diff --git a/tracking/protocol.hpp b/tracking/protocol.hpp
index 03efd3dac9..da1752b80d 100644
--- a/tracking/protocol.hpp
+++ b/tracking/protocol.hpp
@@ -31,10 +31,8 @@ public:
static vector<uint8_t> CreateHeader(PacketType type, uint32_t payloadSize);
static vector<uint8_t> CreateAuthPacket(string const & clientId);
- static vector<uint8_t> CreateDataPacket(DataElementsCirc const & points,
- PacketType type = PacketType::CurrentData);
- static vector<uint8_t> CreateDataPacket(DataElementsVec const & points,
- PacketType type = PacketType::CurrentData);
+ static vector<uint8_t> CreateDataPacket(DataElementsCirc const & points, PacketType type);
+ static vector<uint8_t> CreateDataPacket(DataElementsVec const & points, PacketType type);
static std::pair<PacketType, size_t> DecodeHeader(vector<uint8_t> const & data);
static string DecodeAuthPacket(PacketType type, vector<uint8_t> const & data);
diff --git a/tracking/pytracking/bindings.cpp b/tracking/pytracking/bindings.cpp
index 528351e614..0e44b54d8f 100644
--- a/tracking/pytracking/bindings.cpp
+++ b/tracking/pytracking/bindings.cpp
@@ -30,6 +30,7 @@ BOOST_PYTHON_MODULE(pytracking)
.def(init<uint64_t, ms::LatLon const &>())
.def_readwrite("timestamp", &coding::TrafficGPSEncoder::DataPoint::m_timestamp)
.def_readwrite("coords", &coding::TrafficGPSEncoder::DataPoint::m_latLon);
+ .def_readwrite("traffic", &coding::TrafficGPSEncoder::DataPoint::m_traffic);
enum_<Protocol::PacketType>("PacketType")
.value("AuthV0", Protocol::PacketType::AuthV0)
diff --git a/tracking/tracking_tests/protocol_test.cpp b/tracking/tracking_tests/protocol_test.cpp
index 38f1c87381..0bd1f76a86 100644
--- a/tracking/tracking_tests/protocol_test.cpp
+++ b/tracking/tracking_tests/protocol_test.cpp
@@ -47,7 +47,7 @@ UNIT_TEST(Protocol_CreateDataPacket)
TEST_EQUAL(packetV0[5], 227, ());
TEST_EQUAL(packetV0[6], 241, ());
- auto packetV1 = Protocol::CreateDataPacket(buffer);
+ auto packetV1 = Protocol::CreateDataPacket(buffer, Protocol::PacketType::DataV1);
TEST_EQUAL(packetV1.size(), 28, ());
TEST_EQUAL(Protocol::PacketType(packetV1[0]), Protocol::PacketType::DataV1, ());
TEST_EQUAL(packetV1[1], 0x00, ());