26 #ifndef MLN_WIN_INTER_HH
27 # define MLN_WIN_INTER_HH
33 # include <mln/core/window.hh>
41 template <
typename W1,
typename W2>
43 operator && (const Window<W1>& win1, const Window<W2>&
win2);
46 # ifndef MLN_INCLUDE_ONLY
54 template <
typename W1,
typename W2>
57 inter(trait::window::definition::unique,
58 const W1& win1, const W2& win2)
60 mlc_is(mln_trait_window_size(W1),
61 trait::window::size::fixed)::check();
62 mlc_is(mln_trait_window_size(W2),
63 trait::window::size::fixed)::check();
66 unsigned n = win1.size();
67 for (
unsigned i = 0; i < n; ++i)
68 if (win2.has(win1.
dp(i)))
69 tmp.insert(win1.
dp(i));
73 template <typename W1, typename W2>
76 inter(trait::window::definition::multiple,
77 const W1& win1, const W2& win2)
79 mln_precondition(win1.nwindows() == win2.nwindows());
83 const
unsigned nw = win1.nwindows();
84 for (
unsigned w = 0; w < nw; ++w)
85 tmp.set_window(w, win1.window(w) && win2.window(w));
95 template <typename W1, typename W2>
98 operator && (const Window<W1>& win1, const Window<W2>& win2)
100 mln_trace(
"win::inter");
104 mlc_converts_to(mln_dpsite(W1), mln_dpsite(W2))::check();
107 mlc_is(mln_trait_window_support(W1),
108 trait::window::support::regular)::check();
109 mlc_is(mln_trait_window_support(W2),
110 trait::window::support::regular)::check();
113 mlc_equal(mln_trait_window_definition(W1),
114 mln_trait_window_definition(W2))::check();
116 mlc_is_not(mln_trait_window_definition(W1),
117 trait::window::definition::varying)::check();
119 mln_regular(W1) tmp = win::impl::inter(mln_trait_window_definition(W1)(),
125 # endif // ! MLN_INCLUDE_ONLY
130 #endif // ! MLN_WIN_INTER_HH