summaryrefslogtreecommitdiffstats
path: root/src/boost/libs/mpi/test/gps_position.hpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/boost/libs/mpi/test/gps_position.hpp')
-rw-r--r--src/boost/libs/mpi/test/gps_position.hpp69
1 files changed, 69 insertions, 0 deletions
diff --git a/src/boost/libs/mpi/test/gps_position.hpp b/src/boost/libs/mpi/test/gps_position.hpp
new file mode 100644
index 00000000..e6910c44
--- /dev/null
+++ b/src/boost/libs/mpi/test/gps_position.hpp
@@ -0,0 +1,69 @@
+#ifndef GPS_POSITION_HPP
+#define GPS_POSITION_HPP
+
+// Copyright Matthias Troyer
+// 2005. Distributed under the Boost Software License, Version
+// 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+#include <boost/mpi/datatype_fwd.hpp>
+#include <boost/mpl/and.hpp>
+#include <boost/serialization/export.hpp>
+#include <boost/shared_ptr.hpp>
+#include <iostream>
+
+class gps_position
+{
+private:
+ friend class boost::serialization::access;
+ // When the class Archive corresponds to an output archive, the
+ // & operator is defined similar to <<. Likewise, when the class Archive
+ // is a type of input archive the & operator is defined similar to >>.
+ template<class Archive>
+ void serialize(Archive & ar, const unsigned int version)
+ {
+ ar & degrees & minutes & seconds;
+ }
+ int degrees;
+ int minutes;
+ float seconds;
+public:
+ gps_position(){};
+ gps_position(int d, int m, float s) :
+ degrees(d), minutes(m), seconds(s)
+ {}
+
+ friend std::ostream& operator<<(std::ostream& out, const gps_position& g);
+
+ friend bool operator==(const gps_position& x, const gps_position& y)
+ {
+ return (x.degrees == y.degrees
+ && x.minutes == y.minutes
+ && x.seconds == y.seconds);
+ }
+
+ inline friend bool operator!=(const gps_position& x, const gps_position& y)
+ {
+ return !(x == y);
+ }
+};
+
+inline
+std::ostream& operator<<(std::ostream& out, const gps_position& g) {
+ out << "gps{" << g.degrees << 'd' << g.minutes << 'm' << g.seconds << "s}";
+ return out;
+}
+
+namespace boost { namespace mpi {
+
+ template <>
+ struct is_mpi_datatype<gps_position>
+ : public mpl::and_
+ <
+ is_mpi_datatype<int>,
+ is_mpi_datatype<float>
+ >
+ {};
+
+} }
+#endif