* rgb.ixx: New file. * Makefile.am (meta_wrappers): Add rgb.ixx. * python/Makefile.am (rgb_ixx_deps): New variable. --- swilena/ChangeLog | 8 ++ swilena/Makefile.am | 6 +- swilena/python/Makefile.am | 1 + swilena/rgb.ixx | 155 ++++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 168 insertions(+), 2 deletions(-) create mode 100644 swilena/rgb.ixx
diff --git a/swilena/ChangeLog b/swilena/ChangeLog index 0860765..7d670b3 100644 --- a/swilena/ChangeLog +++ b/swilena/ChangeLog @@ -1,5 +1,13 @@ 2010-02-08 Roland Levillain roland@lrde.epita.fr
+ Add a Swilena meta-wrapper for mln::value::rgb<n>. + + * rgb.ixx: New file. + * Makefile.am (meta_wrappers): Add rgb.ixx. + * python/Makefile.am (rgb_ixx_deps): New variable. + +2010-02-08 Roland Levillain roland@lrde.epita.fr + Improve dependency management in Swilena/Python.
* python/Makefile.am (int_u_ixx_deps, box_ixx_deps) diff --git a/swilena/Makefile.am b/swilena/Makefile.am index 109fb2e..ea221a3 100644 --- a/swilena/Makefile.am +++ b/swilena/Makefile.am @@ -1,4 +1,5 @@ -# Copyright (C) 2008, 2009 EPITA Research and Development Laboratory (LRDE). +# Copyright (C) 2008, 2009, 2010 EPITA Research and Development +# Laboratory (LRDE). # # This file is part of Olena. # @@ -32,7 +33,8 @@ meta_wrappers = \ morpho.ixx \ pgm.ixx \ println.ixx \ - python-utils.ixx + python-utils.ixx \ + rgb.ixx
# Wrappers (generating actual modules). wrappers = \ diff --git a/swilena/python/Makefile.am b/swilena/python/Makefile.am index f6a834c..8f7faa9 100644 --- a/swilena/python/Makefile.am +++ b/swilena/python/Makefile.am @@ -197,6 +197,7 @@ nodist_python_PYTHON += dynamic_image2d.py
# Dependencies pulled by the meta wrapper (.ixx) files. int_u_ixx_deps = $(top_srcdir)/swilena/python-utils.ixx +rgb_ixx_deps = $(top_srcdir)/swilena/python-utils.ixx
box_ixx_deps = $(top_srcdir)/swilena/coord.ixx
diff --git a/swilena/rgb.ixx b/swilena/rgb.ixx new file mode 100644 index 0000000..c5607f3 --- /dev/null +++ b/swilena/rgb.ixx @@ -0,0 +1,155 @@ +// -*- C++ -*- +// Copyright (C) 2010 EPITA Research and Development Laboratory (LRDE) +// +// This file is part of Olena. +// +// Olena is free software: you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free +// Software Foundation, version 2 of the License. +// +// Olena 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 Olena. If not, see http://www.gnu.org/licenses/. +// +// As a special exception, you may use this file as part of a free +// software project 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. + +/// \file rgb.i +/// \brief A wrapper of mln::value::rgb. + +%module rgb + +%{ +#include "mln/value/rgb.hh" +%} + +// FIXME: Wrap mln::rgb by hand, for Milena macros disturb swig. +// Annotate the original source code instead? +namespace mln +{ + + namespace value + { + + /*! \brief Unsigned integer value class. + * + * The parameter is \c n the number of encoding bits. + */ + template <unsigned n> + struct rgb + : + public Vectorial< rgb<n> > + , + public internal::value_like_< algebra::vec< 3, int_u<n> >, // Equivalent. + algebra::vec< 3, int_u<n> >, // Encoding. + algebra::vec< 3, int >, // Interoperation. + rgb<n> > // Exact. + { + public: + + typedef int_u<n> red_t; + typedef int_u<n> green_t; + typedef int_u<n> blue_t; + + /// Acces to red/green/blue component. + /// { + mln::value::int_u<n> red() const; + mln::value::int_u<n>& red(); + + mln::value::int_u<n> green() const; + mln::value::int_u<n>& green(); + + mln::value::int_u<n> blue() const; + mln::value::int_u<n>& blue(); + + mln::value::int_u<n> comp(unsigned k); + mln::value::int_u<n>& comp(unsigned k); + /// } + + /// Constructor without argument. + rgb<n>(); + + /// Constructor from component values. + rgb<n>(int r, int g, int b); + + /// Constructor from a algebra::vec. + rgb<n>(const mln::algebra::vec<3, int>& rhs); + rgb<n>(const mln::algebra::vec<3, unsigned>& rhs); + rgb<n>(const mln::algebra::vec<3, mln::value::int_u<n> >& rhs); + rgb<n>(const mln::algebra::vec<3, float>& rhs); + + // Conversion to the interoperation type. + operator mln::algebra::vec<3, int>() const; + // Conversion to the sum type. + operator mln::algebra::vec<3, float>() const; + + /// Constructors with literals. + /// { + rgb<n>(const mln::literal::white_t&); + rgb<n>(const mln::literal::black_t&); + + rgb<n>(const mln::literal::light_gray_t&); + rgb<n>(const mln::literal::medium_gray_t&); + rgb<n>(const mln::literal::dark_gray_t&); + + rgb<n>(const mln::literal::red_t&); + rgb<n>(const mln::literal::blue_t&); + rgb<n>(const mln::literal::green_t&); + rgb<n>(const mln::literal::brown_t&); + rgb<n>(const mln::literal::lime_t&); + rgb<n>(const mln::literal::orange_t&); + rgb<n>(const mln::literal::pink_t&); + rgb<n>(const mln::literal::purple_t&); + rgb<n>(const mln::literal::teal_t&); + rgb<n>(const mln::literal::violet_t&); + rgb<n>(const mln::literal::cyan_t&); + rgb<n>(const mln::literal::magenta_t&); + rgb<n>(const mln::literal::yellow_t&); + rgb<n>(const mln::literal::olive_t&); + /// } + + /// Assignment. + rgb<n>& operator=(const rgb<n>& rhs); + + /// Zero value. + static const rgb<n> zero; + }; + + + /*! \brief Print an unsigned integer \p i into the output stream \p ostr. + * + * \param[in,out] ostr An output stream. + * \param[in] i An unsigned integer. + * + * \return The modified output stream \p ostr. + */ + template <unsigned n> + std::ostream& operator<<(std::ostream& ostr, const rgb<n>& i); + + // FIXME: Doc! + template <unsigned n> + std::istream& operator>>(std::istream& istr, rgb<n>& i); + + } // end of namespace mln::value + +} // end of namespace mln + + +/*--------------------------------. +| Conversion helpers for Python. | +`--------------------------------*/ + +#if SWIGPYTHON +%include python-utils.ixx +generate__str__(mln::value::rgb) +#endif // !SWIGPYTHON