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/streams_sink.hpp16
-rw-r--r--geometry/point2d.hpp16
-rw-r--r--geometry/rect2d.hpp25
-rw-r--r--geometry/region2d.hpp23
4 files changed, 79 insertions, 1 deletions
diff --git a/coding/streams_sink.hpp b/coding/streams_sink.hpp
index 85f7dc22ad..23ecad90f3 100644
--- a/coding/streams_sink.hpp
+++ b/coding/streams_sink.hpp
@@ -61,6 +61,14 @@ namespace stream
detail::ReadString(*this, t);
return *this;
}
+
+ SinkReaderStream & operator >> (double & t)
+ {
+ STATIC_ASSERT(sizeof(double) == sizeof(int64_t));
+ operator>>(reinterpret_cast<int64_t &>(t));
+ return *this;
+ }
+
};
template <class TWriter> class SinkWriterStream
@@ -118,5 +126,13 @@ namespace stream
return *this;
}
+ SinkWriterStream & operator << (double t)
+ {
+ STATIC_ASSERT(sizeof(double) == sizeof(int64_t));
+ int64_t tInt = *reinterpret_cast<int64_t const *>(&t);
+ operator<<(tInt);
+ return (*this);
+ }
+
};
}
diff --git a/geometry/point2d.hpp b/geometry/point2d.hpp
index 2b071485ec..d2b4c5e8bc 100644
--- a/geometry/point2d.hpp
+++ b/geometry/point2d.hpp
@@ -222,6 +222,22 @@ namespace m2
return my::AlmostEqual(a.x, b.x) && my::AlmostEqual(a.y, b.y);
}
+ template <class TArchive, class PointT>
+ TArchive & operator >> (TArchive & ar, m2::Point<PointT> & pt)
+ {
+ ar >> pt.x;
+ ar >> pt.y;
+ return ar;
+ }
+
+ template <class TArchive, class PointT>
+ TArchive & operator << (TArchive & ar, m2::Point<PointT> const & pt)
+ {
+ ar << pt.x;
+ ar << pt.y;
+ return ar;
+ }
+
typedef Point<float> PointF;
typedef Point<double> PointD;
typedef Point<uint32_t> PointU;
diff --git a/geometry/rect2d.hpp b/geometry/rect2d.hpp
index 36fcc701ee..896935b56d 100644
--- a/geometry/rect2d.hpp
+++ b/geometry/rect2d.hpp
@@ -31,6 +31,11 @@ namespace m2
template <typename T>
class Rect
{
+ template <class TArchive, class TPoint>
+ friend TArchive & operator << (TArchive & ar, Rect<TPoint> const & rect);
+ template <class TArchive, class TPoint>
+ friend TArchive & operator >> (TArchive & ar, Rect<TPoint> & rect);
+
enum { IsSigned = numeric_limits<T>::is_signed };
T m_minX, m_minY, m_maxX, m_maxY;
@@ -297,6 +302,26 @@ namespace m2
);
}
+ template <class TArchive, class PointT>
+ TArchive & operator >> (TArchive & ar, m2::Rect<PointT> & rect)
+ {
+ ar >> rect.m_minX;
+ ar >> rect.m_minY;
+ ar >> rect.m_maxX;
+ ar >> rect.m_maxY;
+ return ar;
+ }
+
+ template <class TArchive, class PointT>
+ TArchive & operator << (TArchive & ar, m2::Rect<PointT> const & rect)
+ {
+ ar << rect.m_minX;
+ ar << rect.m_minY;
+ ar << rect.m_maxX;
+ ar << rect.m_maxY;
+ return ar;
+ }
+
typedef Rect<float> RectF;
typedef Rect<double> RectD;
typedef Rect<unsigned> RectU;
diff --git a/geometry/region2d.hpp b/geometry/region2d.hpp
index 8a24cde225..639092964a 100644
--- a/geometry/region2d.hpp
+++ b/geometry/region2d.hpp
@@ -54,7 +54,12 @@ namespace m2
template <class PointT>
class Region
- {
+ {
+ template <class TArchive, class TPoint>
+ friend TArchive & operator << (TArchive & ar, Region<TPoint> const & region);
+ template <class TArchive, class TPoint>
+ friend TArchive & operator >> (TArchive & ar, Region<TPoint> & region);
+
public:
typedef PointT value_type;
typedef typename PointT::value_type coord_type;
@@ -167,6 +172,22 @@ namespace m2
m2::Rect<coord_type> m_rect;
};
+ template <class TArchive, class PointT>
+ TArchive & operator >> (TArchive & ar, m2::Region<PointT> & region)
+ {
+ ar >> region.m_rect;
+ ar >> region.m_points;
+ return ar;
+ }
+
+ template <class TArchive, class PointT>
+ TArchive & operator << (TArchive & ar, m2::Region<PointT> const & region)
+ {
+ ar << region.m_rect;
+ ar << region.m_points;
+ return ar;
+ }
+
typedef Region<m2::PointD> RegionD;
typedef Region<m2::PointI> RegionI;
typedef Region<m2::PointU> RegionU;