Index: ChangeLog
from Damien Thivolle <damien(a)lrde.epita.fr>
* tests/level: New.
* tests/level/tests: New.
* tests/level/tests/compare: New.
* tests/level/tests/fill: New.
* tests/level/runs: New.
* tests/level/Makefile.am: New.
* oln/makefile.src: Add new files.
* oln/level: New.
* oln/level/compare.hh: Add comparison operators for images.
* oln/level/fill.hh: Add fill function for images.
oln/level/compare.hh | 132 ++++++++++++++++++++++++++++++++++++++++++++++
oln/level/fill.hh | 53 ++++++++++++++++++
oln/makefile.src | 4 +
tests/level/Makefile.am | 4 +
tests/level/tests/compare | 76 ++++++++++++++++++++++++++
tests/level/tests/fill | 50 +++++++++++++++++
6 files changed, 318 insertions(+), 1 deletion(-)
Index: tests/level/tests/compare
--- tests/level/tests/compare (revision 0)
+++ tests/level/tests/compare (revision 0)
@@ -0,0 +1,76 @@
+// -*- c++ -*-
+// Copyright (C) 2002, 2003, 2004, 2005 EPITA Research and Development Laboratory
+//
+// This file is part of the Olena Library. This library is free
+// software; you can redistribute it and/or modify it under the terms
+// of the GNU General Public License version 2 as published by the
+// Free Software Foundation.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+// General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with this library; see the file COPYING. If not, write to
+// the Free Software Foundation, 59 Temple Place - Suite 330, Boston,
+// MA 02111-1307, USA.
+//
+// As a special exception, you may use this file as part of a free
+// software library without restriction. Specifically, if other files
+// instantiate templates or use macros or inline functions from this
+// file, or you compile this file and link it with other files to
+// produce an executable, this file does not by itself cause the
+// resulting executable to be covered by the GNU General Public
+// License. This exception does not however invalidate any other
+// reasons why the executable file might be covered by the GNU General
+// Public License.
+
+#include <ntg/all.hh>
+#include <oln/basics2d.hh>
+#include <oln/level/fill.hh>
+#include <oln/level/compare.hh>
+#include <iostream>
+#include "check.hh"
+#include "data.hh"
+
+#define OK_OR_FAIL \
+ std::cout << "OK" << std::endl; \
+ else \
+ { \
+ std::cout << "FAIL" << std::endl; \
+ fail = true; \
+ }
+
+#define ASSERT_CHECK(Val) { assert_check(Val, #Val, fail); }
+
+void assert_check(bool res, const std::string& desc, bool &fail)
+{
+ std::cout << "---- " << desc << " ----" << std::endl;
+ if (res)
+ OK_OR_FAIL;
+}
+
+
+bool
+check(void)
+{
+ bool fail = false;
+
+ oln::image2d<ntg::int_u8>
+ im_0(16, 16),
+ im_20(16, 16);
+ oln::level::fill(im_0, 0);
+ oln::level::fill(im_20, 20);
+
+ ASSERT_CHECK(oln::level::is_greater(im_20, im_0));
+ ASSERT_CHECK(!oln::level::is_greater(im_0, im_20));
+ ASSERT_CHECK(oln::level::is_greater_or_equal(im_0, im_0));
+
+ ASSERT_CHECK(oln::level::is_lower(im_0, im_20));
+ ASSERT_CHECK(!oln::level::is_lower(im_20, im_0));
+ ASSERT_CHECK(oln::level::is_lower_or_equal(im_0, im_0));
+
+ ASSERT_CHECK(oln::level::is_equal(im_0, im_0));
+ return fail;
+}
Index: tests/level/tests/fill
--- tests/level/tests/fill (revision 0)
+++ tests/level/tests/fill (revision 0)
@@ -0,0 +1,50 @@
+// -*- c++ -*-
+// Copyright (C) 2002, 2003, 2004, 2005 EPITA Research and Development Laboratory
+//
+// This file is part of the Olena Library. This library is free
+// software; you can redistribute it and/or modify it under the terms
+// of the GNU General Public License version 2 as published by the
+// Free Software Foundation.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+// General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with this library; see the file COPYING. If not, write to
+// the Free Software Foundation, 59 Temple Place - Suite 330, Boston,
+// MA 02111-1307, USA.
+//
+// As a special exception, you may use this file as part of a free
+// software library without restriction. Specifically, if other files
+// instantiate templates or use macros or inline functions from this
+// file, or you compile this file and link it with other files to
+// produce an executable, this file does not by itself cause the
+// resulting executable to be covered by the GNU General Public
+// License. This exception does not however invalidate any other
+// reasons why the executable file might be covered by the GNU General
+// Public License.
+
+#include <ntg/all.hh>
+#include <oln/basics2d.hh>
+#include <oln/level/fill.hh>
+#include <iostream>
+#include "check.hh"
+#include "data.hh"
+
+bool
+check(void)
+{
+
+ oln::image2d<ntg::int_u8> im(10, 10);
+
+ oln::level::fill(im, 51);
+
+ oln::fwd_piter2d it(im.size());
+ for_all(it)
+ if (im[it] != 51)
+ return true;
+
+ return false;
+}
Index: tests/level/Makefile.am
--- tests/level/Makefile.am (revision 0)
+++ tests/level/Makefile.am (revision 0)
@@ -0,0 +1,4 @@
+include ../check/Makefile.runtests
+
+CLEANFILES += cc 2nd_cc connected_out lena_inverted set_level \
+ set_level2 threshold_128
Index: oln/makefile.src
--- oln/makefile.src (revision 66)
+++ oln/makefile.src (working copy)
@@ -46,4 +46,6 @@
io/read_image_2d_pnm.hh \
io/utils.hh \
io/write_image.hh \
- io/write_image_2d_pnm.hh
+ io/write_image_2d_pnm.hh \
+ level/compare.hh \
+ level/fill.hh
Index: oln/level/compare.hh
--- oln/level/compare.hh (revision 0)
+++ oln/level/compare.hh (revision 0)
@@ -0,0 +1,132 @@
+// Copyright (C) 2001, 2002, 2003, 2004, 2005 EPITA Research and Development Laboratory
+//
+// This file is part of the Olena Library. This library is free
+// software; you can redistribute it and/or modify it under the terms
+// of the GNU General Public License version 2 as published by the
+// Free Software Foundation.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+// General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with this library; see the file COPYING. If not, write to
+// the Free Software Foundation, 59 Temple Place - Suite 330, Boston,
+// MA 02111-1307, USA.
+//
+// As a special exception, you may use this file as part of a free
+// software library without restriction. Specifically, if other files
+// instantiate templates or use macros or inline functions from this
+// file, or you compile this file and link it with other files to
+// produce an executable, this file does not by itself cause the
+// resulting executable to be covered by the GNU General Public
+// License. This exception does not however invalidate any other
+// reasons why the executable file might be covered by the GNU General
+// Public License.
+
+#ifndef OLENA_LEVEL_COMPARE_HH
+# define OLENA_LEVEL_COMPARE_HH
+
+# include <oln/basics.hh>
+
+namespace oln {
+
+ namespace level {
+
+ /*! \brief Tests if all pixels of input1 are greater or equal than input2.
+ **
+ ** \pre input1.size() == input2.size()
+ **/
+ template<class I1, class I2> inline
+ bool
+ is_greater_or_equal(const abstract::image<I1>& input1,
+ const abstract::image<I2>& input2)
+ {
+ precondition(input1.size() == input2.size());
+ oln_type_of(I1, fwd_piter) p(input1.size());
+
+ for_all (p)
+ if (!(input1[p] >= input2[p]))
+ return false;
+ return true;
+ }
+
+ /*! \brief Tests if all pixels of input1 are greater than input2.
+ **
+ ** \pre input1.size() == input2.size()
+ **/
+ template<class I1, class I2> inline
+ bool
+ is_greater(const abstract::image<I1>& input1,
+ const abstract::image<I2>& input2)
+ {
+ precondition(input1.size() == input2.size());
+ oln_type_of(I1, fwd_piter) p(input1.size());
+
+ for_all (p)
+ if (!(input1[p] > input2[p]))
+ return false;
+ return true;
+ }
+
+ /*! \brief Tests if all pixels of input1 are lower or equal than input2.
+ **
+ ** \pre input1.size() == input2.size()
+ **/
+ template<class I1, class I2> inline
+ bool
+ is_lower_or_equal(const abstract::image<I1>& input1,
+ const abstract::image<I2>& input2)
+ {
+ precondition(input1.size() == input2.size());
+ oln_type_of(I1, fwd_piter) p(input1.size());
+
+ for_all (p)
+ if (!(input1[p] <= input2[p]))
+ return false;
+ return true;
+ }
+
+ /*! \brief Tests if all pixel of input1 are lower than input2.
+ **
+ ** \pre input1.size() == input2.size()
+ **/
+ template<class I1, class I2> inline
+ bool
+ is_lower(const abstract::image<I1>& input1,
+ const abstract::image<I2>& input2)
+ {
+ precondition(input1.size() == input2.size());
+ oln_type_of(I1, fwd_piter) p(input1.size());
+
+ for_all (p)
+ if (!(input1[p] < input2[p]))
+ return false;
+ return true;
+ }
+
+
+ /*! \brief Tests if input1 is equal to input2.
+ **
+ ** \pre input1.size() == input2.size()
+ **/
+ template<class I1, class I2> inline
+ bool
+ is_equal(const abstract::image<I1>& input1,
+ const abstract::image<I2>& input2)
+ {
+ precondition(input1.size() == input2.size());
+ oln_type_of(I1, fwd_piter) p(input1.size());
+
+ for_all (p)
+ if (!(input1[p] == input2[p]))
+ return false;
+ return true;
+ }
+
+ } // end of namespace level
+
+} // end of namespace oln
+
+#endif // ! OLENA_LEVEL_COMPARE_HH
Index: oln/level/fill.hh
--- oln/level/fill.hh (revision 0)
+++ oln/level/fill.hh (revision 0)
@@ -0,0 +1,53 @@
+// Copyright (C) 2001, 2002, 2003, 2004, 2005 EPITA Research and Development Laboratory
+//
+// This file is part of the Olena Library. This library is free
+// software; you can redistribute it and/or modify it under the terms
+// of the GNU General Public License version 2 as published by the
+// Free Software Foundation.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+// General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with this library; see the file COPYING. If not, write to
+// the Free Software Foundation, 59 Temple Place - Suite 330, Boston,
+// MA 02111-1307, USA.
+//
+// As a special exception, you may use this file as part of a free
+// software library without restriction. Specifically, if other files
+// instantiate templates or use macros or inline functions from this
+// file, or you compile this file and link it with other files to
+// produce an executable, this file does not by itself cause the
+// resulting executable to be covered by the GNU General Public
+// License. This exception does not however invalidate any other
+// reasons why the executable file might be covered by the GNU General
+// Public License.
+
+#ifndef OLENA_LEVEL_FILL_HH
+# define OLENA_LEVEL_FILL_HH
+
+# include <oln/basics.hh>
+
+namespace oln {
+
+ namespace level {
+
+ /*! \brief Fill the image with a value.
+ */
+ template <class I>
+ I
+ fill(abstract::image<I>& im, const oln_type_of(I, value)& val)
+ {
+ oln_type_of(I, fwd_piter) p(im.size());
+ for_all(p)
+ im[p] = val;
+ return im.exact();
+ }
+
+ } // end of namespace level
+
+} // end of namespace oln
+
+#endif // ! OLENA_LEVEL_FILL_HH
Index: ChangeLog
from Damien Thivolle <damien(a)lrde.epita.fr>
* mlc/math.hh: Add power of 2 traits.
* mlc/makefile.src: Add new file.
makefile.src | 1
math.hh | 82 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
2 files changed, 83 insertions(+)
Index: mlc/math.hh
--- mlc/math.hh (revision 0)
+++ mlc/math.hh (revision 0)
@@ -0,0 +1,82 @@
+// Copyright (C) 2001, 2002, 2003 EPITA Research and Development Laboratory
+//
+// This file is part of the Olena Library. This library is free
+// software; you can redistribute it and/or modify it under the terms
+// of the GNU General Public License version 2 as published by the
+// Free Software Foundation.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+// General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with this library; see the file COPYING. If not, write to
+// the Free Software Foundation, 59 Temple Place - Suite 330, Boston,
+// MA 02111-1307, USA.
+//
+// As a special exception, you may use this file as part of a free
+// software library without restriction. Specifically, if other files
+// instantiate templates or use macros or inline functions from this
+// file, or you compile this file and link it with other files to
+// produce an executable, this file does not by itself cause the
+// resulting executable to be covered by the GNU General Public
+// License. This exception does not however invalidate any other
+// reasons why the executable file might be covered by the GNU General
+// Public License.
+
+#ifndef METALIC_MATH_HH
+# define METALIC_MATH_HH
+
+# include <mlc/bool.hh>
+
+namespace mlc
+{
+
+ namespace internal
+ {
+
+ // Helper structs for pow2sup below.
+
+ template<unsigned N> struct is_pow2 { typedef false_type ret; };
+ template<> struct is_pow2<8> { typedef true_type ret; };
+ template<> struct is_pow2<16> { typedef true_type ret; };
+ template<> struct is_pow2<32> { typedef true_type ret; };
+ template<> struct is_pow2<64> { typedef true_type ret; };
+
+ template<unsigned N, class> struct find_pow2sup;
+ template<unsigned N> struct find_pow2sup<N,true_type> {
+ enum { value = N };
+ };
+ template<unsigned N> struct find_pow2sup<N,false_type> {
+ enum { value = find_pow2sup< N+1,
+ typename is_pow2<N+1>::ret >::value };
+ };
+
+ } // end of internal
+
+ // Smaller power of 2 greater than N.
+
+ template<unsigned N>
+ struct pow2sup {
+ enum {
+ value =
+ internal::find_pow2sup< N,
+ typename internal::is_pow2<N>::ret >::value
+ };
+ private:
+ typedef typename is_true<N < 32>::ensure_type precondition_type;
+ };
+
+ // Various tests on N (actually, we tests only oddness.)
+
+ template<unsigned N>
+ class utest {
+ public:
+ typedef typename is_true<N/2 == (N+1)/2>::ensure_type is_odd_type;
+ static void ensure_odd() { is_odd_type::is_true(); }
+ };
+
+} // end of namespace mlc
+
+#endif // METALIC_MATH_HH
Index: mlc/makefile.src
--- mlc/makefile.src (revision 62)
+++ mlc/makefile.src (working copy)
@@ -20,6 +20,7 @@
config/system.hh \
contract.hh \
is_a.hh \
+ math.hh \
properties.hh \
tracked_ptr.hh \
traits.hh \