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_DPOINT3D_HH
00029 # define OLENA_CORE_DPOINT3D_HH
00030
00031 # include <oln/core/coord.hh>
00032 # include <oln/core/abstract/dpoint.hh>
00033 # include <iostream>
00034
00035 namespace oln {
00036
00037
00038 class point3d;
00039 class dpoint3d;
00040
00046 template<>
00047 struct dpoint_traits<dpoint3d>: public
00048 dpoint_traits<abstract::dpoint<dpoint3d> >
00049 {
00050 enum { dim = 3 };
00051 typedef point3d point_type;
00052 };
00053
00065 class dpoint3d : public abstract::dpoint< dpoint3d >
00066 {
00067
00068 public:
00069
00070 typedef abstract::dpoint< dpoint3d > super_type;
00071
00072 friend class abstract::dpoint< dpoint3d >;
00073
00074 dpoint3d();
00075
00077
00078 dpoint3d(coord slice, coord row, coord col);
00079
00081
00082 explicit dpoint3d(const point3d& p);
00083
00084
00086
00087 coord
00088 slice() const;
00089
00091
00092 coord&
00093 slice();
00094
00096
00097 coord
00098 row() const;
00099
00104 coord&
00105 row();
00106
00108
00109 coord
00110 col() const;
00111
00113
00114 coord&
00115 col();
00116
00117 static std::string
00118 name()
00119 {
00120 return "dpoint3d";
00121 }
00122
00123 protected:
00124
00130 dpoint3d
00131 plus_dp(const dpoint3d& dp) const;
00132
00137 dpoint3d
00138 minus() const;
00139
00144 dpoint3d
00145 minus_dp(const dpoint3d& dp) const;
00146
00151 dpoint3d&
00152 plus_assign_dp(const dpoint3d& dp);
00153
00158 dpoint3d&
00159 minus_assign_dp(const dpoint3d& dp);
00160
00161 };
00162 namespace internal
00163 {
00169 template<>
00170 struct default_less<dpoint3d> :
00171 public default_less<dpoint3d::super_type>
00172 {
00173 };
00174 }
00175
00176 }
00177
00179
00180 inline std::ostream&
00181 operator<<(std::ostream& o, const oln::dpoint3d& dp);
00182
00183 # include <oln/core/dpoint3d.hxx>
00184
00185
00186 #endif // ! OLENA_CORE_DPOINT3D_HH