$extrastylesheet
Olena  User documentation 2.1
An Image Processing Platform
 All Classes Namespaces Functions Variables Typedefs Enumerations Enumerator Friends Groups Pages
delta.hh
1 // Copyright (C) 2008, 2009, 2012 EPITA Research and Development
2 // Laboratory (LRDE)
3 //
4 // This file is part of Olena.
5 //
6 // Olena is free software: you can redistribute it and/or modify it under
7 // the terms of the GNU General Public License as published by the Free
8 // Software Foundation, version 2 of the License.
9 //
10 // Olena is distributed in the hope that it will be useful,
11 // but WITHOUT ANY WARRANTY; without even the implied warranty of
12 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13 // General Public License for more details.
14 //
15 // You should have received a copy of the GNU General Public License
16 // along with Olena. If not, see <http://www.gnu.org/licenses/>.
17 //
18 // As a special exception, you may use this file as part of a free
19 // software project without restriction. Specifically, if other files
20 // instantiate templates or use macros or inline functions from this
21 // file, or you compile this file and link it with other files to produce
22 // an executable, this file does not by itself cause the resulting
23 // executable to be covered by the GNU General Public License. This
24 // exception does not however invalidate any other reasons why the
25 // executable file might be covered by the GNU General Public License.
26 
27 #ifndef MLN_GEOM_DELTA_HH
28 # define MLN_GEOM_DELTA_HH
29 
33 
34 
35 # include <mln/core/concept/window.hh>
36 # include <mln/core/concept/weighted_window.hh>
37 # include <mln/core/concept/neighborhood.hh>
38 
39 
40 namespace mln
41 {
42 
43  namespace geom
44  {
45 
50  template <typename W>
51  unsigned delta(const Window<W>& win);
52 
57  template <typename W>
58  unsigned delta(const Weighted_Window<W>& wwin);
59 
64  template <typename N>
65  unsigned delta(const Neighborhood<N>& nbh);
66 
67 
68 
69 # ifndef MLN_INCLUDE_ONLY
70 
71  namespace internal
72  {
73 
74  template <typename W>
75  unsigned delta_dispatch(trait::window::support::any,
76  trait::window::definition::any,
77  const W& win)
78  {
79  (void) win;
80  return 0;
81  }
82 
83  template <typename W>
84  unsigned delta_dispatch(trait::window::support::regular,
85  trait::window::definition::varying,
86  const W& win)
87  {
88  (void) win;
89  return 0;
90  }
91 
92  template <typename W>
93  unsigned delta_dispatch(trait::window::support::regular,
94  trait::window::definition::any, // So not varying.
95  const W& win)
96  {
97  return win.delta();
98  }
99 
100  } // end of namespace mln::geom::internal
101 
102 
103  // Facades.
104 
105  template <typename W>
106  unsigned delta(const Window<W>& win)
107  {
108  mln_precondition(exact(win).is_valid());
109  return internal::delta_dispatch(mln_trait_window_support(W)(),
110  mln_trait_window_definition(W)(),
111  exact(win));
112  }
113 
114  template <typename W>
115  unsigned delta(const Weighted_Window<W>& wwin)
116  {
117  mln_precondition(exact(wwin).is_valid());
118  return delta(exact(wwin).win());
119  }
120 
121  template <typename N>
122  unsigned delta(const Neighborhood<N>& nbh)
123  {
124  mln_precondition(exact(nbh).is_valid());
125  return delta(exact(nbh).win());
126  }
127 
128 # endif // ! MLN_INCLUDE_ONLY
129 
130  } // end of namespace mln::geom
131 
132 } // end of namespace mln
133 
134 
135 #endif // ! MLN_GEOM_DELTA_HH