00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028 #ifndef OLENA_CORE_DPOINT1D_HH
00029 # define OLENA_CORE_DPOINT1D_HH
00030
00031 # include <oln/config/system.hh>
00032 # include <ntg/core/predecls.hh>
00033 # include <oln/core/coord.hh>
00034 # include <oln/core/abstract/dpoint.hh>
00035 # include <iostream>
00036
00037 namespace oln {
00038
00039
00040 class point1d;
00041
00042 class dpoint1d;
00043
00049 template <>
00050 struct dpoint_traits<dpoint1d>: public
00051 dpoint_traits<abstract::dpoint<dpoint1d> >
00052 {
00053 enum { dim = 1 };
00054 typedef point1d point_type;
00055 };
00056
00068 class dpoint1d : public abstract::dpoint<dpoint1d>
00069 {
00070
00071 public:
00072
00073 typedef abstract::dpoint<dpoint1d> super_type;
00074
00075 friend class abstract::dpoint<dpoint1d>;
00076
00077
00078 dpoint1d();
00079
00081
00082 dpoint1d(coord c);
00083
00085
00086 explicit dpoint1d(const point1d& p);
00087
00089 coord
00090 col() const;
00091
00093
00094 coord&
00095 col();
00096
00097 static std::string
00098 name()
00099 {
00100 return "dpoint1d";
00101 }
00102
00103 protected:
00104
00110 dpoint1d
00111 plus_dp(const dpoint1d& dp) const;
00112
00117 dpoint1d
00118 minus() const;
00119
00124 dpoint1d
00125 minus_dp(const dpoint1d& dp) const;
00126
00131 dpoint1d&
00132 plus_assign_dp(const dpoint1d& dp);
00133
00138 dpoint1d&
00139 minus_assign_dp(const dpoint1d& dp);
00140
00141 };
00142
00143
00144 namespace internal
00145 {
00146
00152 template<>
00153 struct default_less<dpoint1d> :
00154 public default_less<dpoint1d::super_type>
00155 {
00156 };
00157
00158 }
00159 }
00160
00161
00163
00164 inline std::ostream&
00165 operator<<(std::ostream& o, const oln::dpoint1d& dp);
00166
00167 # include <oln/core/dpoint1d.hxx>
00168
00169 #endif // ! OLENA_CORE_DPOINT1D_HH