$extrastylesheet
Olena  User documentation 2.1
An Image Processing Platform
 All Classes Namespaces Functions Variables Typedefs Enumerations Enumerator Friends Groups Pages
uminus.cc
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 #include <mln/trait/op/uminus.hh>
27 #include <mln/core/concept/object.hh>
28 
29 
30 template <typename E> struct Top_Concept;
31 template <typename E> struct Sub_Concept;
32 
33 
34 // Top_Concept.
35 
36 template <> struct Top_Concept<void> { typedef mln::Object<void> super; };
37 
38 template <typename E>
39 struct Top_Concept
40 {
41  typedef Top_Concept<void> category;
42 protected:
43  Top_Concept() {}
44 };
45 
46 
47 // Sub_Concept.
48 
49 template <> struct Sub_Concept<void> { typedef Top_Concept<void> super; };
50 
51 template <typename E>
52 struct Sub_Concept
53 {
54  typedef Sub_Concept<void> category;
55 protected:
56  Sub_Concept() {}
57 };
58 
59 
60 // test.
61 
62 struct test : Sub_Concept< test >
63 {
64  void is_test() {}
65 };
66 
67 
68 namespace mln
69 {
70 
71  namespace trait
72  {
73 
74  // FIXME: Dead code?
75 // template <>
76 // struct p_setrecise_unary_< op::uminus, test >
77 // {
78 // typedef bool ret;
79 // };
80 
81 // template <typename T>
82 // struct set_unary_< op::uminus, Sub_Concept, T >
83 // {
84 // typedef int ret;
85 // };
86 
87 // template <typename T>
88 // struct set_unary_< op::uminus, Top_Concept, T >
89 // {
90 // typedef float ret;
91 // };
92 
93  } // mln::trait
94 
95 } // mln
96 
97 
98 int main()
99 {
100  using namespace mln;
101 
102  // FIXME: Dead code?
103 
104 // {
105 // mln_trait_op_uminus_(test) tmp; /* bool if precise */
106 // bool* b = &tmp;
107 // *b = true;
108 // }
109 
110 // {
111 // mln_trait_op_uminus_(test) tmp; /* int if no precise def and both sub and top defs */
112 // void* v = tmp;
113 // }
114 
115 // {
116 // mln_trait_op_uminus_(test) tmp; /* float if only top def */
117 // void* v = tmp;
118 // }
119 
120 // {
121 // mln_trait_op_uminus_(test) tmp; // test if no def here (default is id, given for Object)
122 // tmp.is_test();
123 // }
124 
125 }