70 lines
1.8 KiB
C++
70 lines
1.8 KiB
C++
#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
|