Milena (Olena)  User documentation 2.0a Id
 All Classes Namespaces Functions Variables Typedefs Enumerator Groups Pages
windows.hh
1 // Copyright (C) 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_TRAIT_WINDOWS_HH
27 # define MLN_TRAIT_WINDOWS_HH
28 
34 # include <mln/trait/undef.hh>
35 # include <mln/trait/window/props.hh>
36 
37 
39 # define mln_trait_window_size(W) typename mln::trait::window_< W >::size
40 
42 # define mln_trait_window_support(W) typename mln::trait::window_< W >::support
43 
45 # define mln_trait_window_definition(W) typename mln::trait::window_< W >::definition
46 
47 
48 # define mln_internal_add_classical_window_trait(W) \
49  \
50  namespace win { struct W; } \
51  \
52  namespace trait \
53  { \
54  \
55  template <> \
56  struct window_< win::W > : classical_window_ \
57  { \
58  }; \
59  \
60  } \
61  \
62  struct e_n_d__w_i_t_h__s_e_m_i_c_o_l_u_m_n
63 
64 
65 namespace mln
66 {
67 
68  namespace trait
69  {
70 
72  template <typename W>
73  struct undefined_window_
74  {
75  typedef undef size; // Fixed or unknown.
76  typedef undef support; // Regular or irregular.
77  typedef undef definition; // Unique, n_ary, or varying.
78  };
79 
80 
89  template <typename W>
90  struct window_ : undefined_window_<W>
91  {
92  };
93 
94 
95  // \internal Trait for classical windows.
96  struct classical_window_
97  {
98  typedef mln::trait::window::size::fixed size;
99  typedef mln::trait::window::support::regular support;
100  typedef mln::trait::window::definition::unique definition;
101  };
102 
103  } // end of namespace mln::trait
104 
105 } // end of namespace mln
106 
107 
108 # include <mln/trait/window/print.hh>
109 
110 
111 #endif // ! MLN_TRAIT_WINDOWS_HH