$extrastylesheet
Olena  User documentation 2.1
An Image Processing Platform
 All Classes Namespaces Functions Variables Typedefs Enumerations Enumerator Friends Groups Pages
pixter3d_more.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/core/image/image3d.hh>
27 
28 
29 const unsigned size = 5;
30 const unsigned len = 125;
31 const int v = 51;
32 
33 
34 template <typename I>
35 void test_fill(I& ima)
36 {
37  mln_pixter(I) pxl(ima);
38  unsigned i = 0;
39  for_all(pxl)
40  {
41  ++i;
42  pxl.val() = v;
43  }
44  std::cout << i << std::endl;
45  mln_assertion(i == len);
46  mln_assertion(! pxl.is_valid());
47 
48  mln_piter(I) p(ima.domain());
49  for_all(p)
50  mln_assertion(ima(p) == v);
51 }
52 
53 
54 template <typename I>
55 void test_const(const I& imac, I& ima)
56 {
57  {
58  mln_pixter(const I) pxl(imac); // const is mandatory
59  pxl.start();
60  mln_assertion(pxl.val() == v);
61  // pxl.val() = v; // error is OK since pixter on 'const I'
62  }
63  {
64  // mln_pixter(I) pxl_(imac); // error is OK since mutable I but const imac
65  mln_pixter(I) pxl(ima);
66  pxl.start();
67  pxl.val() = 2 * pxl.val();
68  mln_assertion(pxl.val() == 2 * v);
69  }
70  {
71  mln_pixter(const I) pxl(ima); // const promotion is OK
72  pxl.start();
73  mln_assertion(pxl.val() == 2 * v);
74  // pxl.val() = v; // error is OK since pixter on 'const I'
75  }
76 }
77 
78 
79 
80 int main()
81 {
82  using namespace mln;
83 
84  typedef image3d<int> I;
85  I ima(size, size, size);
86 
87  test_fill(ima);
88  test_const(ima, ima);
89 }