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 #ifndef MLN_WIN_SHIFT_HH
00027 # define MLN_WIN_SHIFT_HH
00028
00032
00033 # include <mln/core/window.hh>
00034
00035
00036
00037 namespace mln
00038 {
00039
00040 namespace win
00041 {
00042
00044 template <typename W>
00045 mln_regular(W)
00046 shift(const Window<W>& win, const mln_dpsite(W)& dp);
00047
00048
00049 # ifndef MLN_INCLUDE_ONLY
00050
00051 namespace impl
00052 {
00053
00054 template <typename W>
00055 inline
00056 mln_regular(W)
00057 shift_(trait::window::definition::unique,
00058 const W& win, const mln_dpsite(W)& dp)
00059 {
00060 mlc_is(mln_trait_window_size(W),
00061 trait::window::size::fixed)::check();
00062 mln_regular(W) tmp;
00063 unsigned n = win.size();
00064 for (unsigned i = 0; i < n; ++i)
00065 tmp.insert(win.dp(i) + dp);
00066 return tmp;
00067 }
00068
00069 template <typename W>
00070 inline
00071 mln_regular(W)
00072 shift_(trait::window::definition::multiple,
00073 const W& win, const mln_dpsite(W)& dp)
00074 {
00075 mln_regular(W) tmp(win.function());
00076 const unsigned nw = win.nwindows();
00077 for (unsigned w = 0; w < nw; ++w)
00078 tmp.set_window(w, win::shift(win.window(w), dp));
00079 return tmp;
00080 }
00081
00082 }
00083
00084
00085
00086 template <typename W>
00087 inline
00088 mln_regular(W)
00089 shift(const Window<W>& win, const mln_dpsite(W)& dp)
00090 {
00091 trace::entering("win::shift");
00092
00093 mlc_is(mln_trait_window_support(W),
00094 trait::window::support::regular)::check();
00095 mlc_is_not(mln_trait_window_definition(W),
00096 trait::window::definition::varying)::check();
00097
00098 mln_regular(W) tmp = impl::shift_(mln_trait_window_definition(W)(),
00099 exact(win), dp);
00100
00101 trace::exiting("win::shift");
00102 return tmp;
00103 }
00104
00105 # endif // ! MLN_INCLUDE_ONLY
00106
00107 }
00108
00109 }
00110
00111
00112 #endif // ! MLN_WIN_SHIFT_HH