diff options
Diffstat (limited to 'src/boost/libs/mpi/test/gps_position.hpp')
-rw-r--r-- | src/boost/libs/mpi/test/gps_position.hpp | 69 |
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 |