123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869 |
- #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
|