Milena (Olena)
User documentation 2.0a Id
Main Page
Related Pages
Modules
Namespaces
Classes
All
Classes
Namespaces
Functions
Variables
Typedefs
Enumerator
Groups
Pages
concept/point.hh
1
// Copyright (C) 2007, 2008, 2009 EPITA Research and Development Laboratory (LRDE)
2
//
3
// This file is part of Olena.
4
//
5
// Olena is free software: you can redistribute it and/or modify it under
6
// the terms of the GNU General Public License as published by the Free
7
// Software Foundation, version 2 of the License.
8
//
9
// Olena is distributed in the hope that it will be useful,
10
// but WITHOUT ANY WARRANTY; without even the implied warranty of
11
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12
// General Public License for more details.
13
//
14
// You should have received a copy of the GNU General Public License
15
// along with Olena. If not, see <http://www.gnu.org/licenses/>.
16
//
17
// As a special exception, you may use this file as part of a free
18
// software project without restriction. Specifically, if other files
19
// instantiate templates or use macros or inline functions from this
20
// file, or you compile this file and link it with other files to produce
21
// an executable, this file does not by itself cause the resulting
22
// executable to be covered by the GNU General Public License. This
23
// exception does not however invalidate any other reasons why the
24
// executable file might be covered by the GNU General Public License.
25
26
#ifndef MLN_CORE_CONCEPT_POINT_HH
27
# define MLN_CORE_CONCEPT_POINT_HH
28
34
# include <mln/core/concept/point_site.hh>
35
# include <mln/core/concept/dpoint.hh>
36
# include <mln/value/concept/scalar.hh>
37
38
39
namespace
mln
40
{
41
42
// Fwd decl.
43
template
<
typename
E>
struct
Point;
44
45
46
// Point category flag type.
47
template
<>
48
struct
Point<void>
49
{
50
typedef
Point_Site<void> super;
51
};
52
53
61
template
<
typename
P>
62
struct
Point
:
public
Point_Site<P>
63
{
66
typedef
P
point
;
67
70
const
P&
to_point
()
const
;
71
72
protected
:
73
Point
();
74
};
75
76
88
template
<
typename
P,
typename
D>
89
P& operator+=(
Point<P>
& p,
const
Dpoint<D>
& dp);
90
91
103
template
<
typename
P,
typename
D>
104
P& operator-=(
Point<P>
& p,
const
Dpoint<D>
& dp);
105
114
template
<
typename
P,
typename
D>
115
P& operator/(
Point<P>
& p,
const
value::Scalar<D>& dp);
116
117
// FIXME : add operators and traits?
118
119
# ifndef MLN_INCLUDE_ONLY
120
121
template
<
typename
P>
122
inline
123
Point<P>::Point
()
124
{
125
}
126
127
template
<
typename
P>
128
inline
129
const
P&
130
Point<P>::to_point
()
const
131
{
132
return
exact(*
this
);
133
}
134
135
template
<
typename
P,
typename
D>
136
inline
137
P& operator+=(
Point<P>
& p_,
const
Dpoint<D>
& dp_)
138
{
139
P& p = exact(p_);
140
const
D& dp = exact(dp_);
141
// FIXME: Use to_vec()!
142
for
(
unsigned
i = 0; i < P::dim; ++i)
143
p[i] += dp[i];
144
return
p;
145
}
146
147
template
<
typename
P,
typename
D>
148
inline
149
P& operator-=(
Point<P>
& p_,
const
Dpoint<D>
& dp_)
150
{
151
P& p = exact(p_);
152
const
D& dp = exact(dp_);
153
// FIXME: Use to_vec()!
154
for
(
unsigned
i = 0; i < P::dim; ++i)
155
p[i] -= dp[i];
156
return
p;
157
}
158
159
160
template
<
typename
P,
typename
D>
161
inline
162
P&
163
operator/(
Point<P>
& p_,
const
value::Scalar<D>& s_)
164
{
165
P& p = exact(p_);
166
const
D& s = exact(s_);
167
for
(
unsigned
i = 0; i < P::dim; ++i)
168
p[i] /= s;
169
return
p;
170
}
171
172
# endif // ! MLN_INCLUDE_ONLY
173
174
}
// end of namespace mln
175
176
177
178
#endif // ! MLN_CORE_CONCEPT_POINT_HH
mln
core
concept
point.hh
Generated on Thu Nov 8 2012 10:58:18 for Milena (Olena) by
1.8.2-20120930