450: Add some math functions and clean up file deps.

https://svn.lrde.epita.fr/svn/oln/trunk/extended Index: ChangeLog from Thierry Geraud <theo@lrde.epita.fr> Add some math functions and clean up file deps. * xtd/math.hh: Add includes. * xtd/math/log.hh: New. * xtd/math/floor.hh: New. * xtd/math/log10.hh: New. * xtd/math/tan.hh: New. * xtd/math/atan.hh: New. * xtd/math/cos.hh: New. * xtd/math/trigo.hh: Remove; dispatch contents into several files. * xtd/math/acos.hh: New. * xtd/math/sin.hh: New. * xtd/math/sqrt.hh: New. * xtd/math/asin.hh: New. * xtd/math/tanh.hh: New. * xtd/math/exp.hh: New. * xtd/math/cosh.hh: New. * xtd/math/id.hh: Update includes. * xtd/math/sinh.hh: New. * xtd/math/atan2.hh: New. * xtd/math/abs.hh: New. * xtd/math/pow.hh: New. * xtd/math/includes.hh: New. * xtd/math/constraints.hh: New. * xtd/math/ceil.hh: New. * xtd/ops_expr.hh: Remove; dispatch contents into... * xtd/internal/opmacros.hh: ...this new file and the following three files. * xtd/math/arith.hh: Update. * xtd/math/cmp.hh: New. * xtd/math/logic.hh: New. * xtd/traits.hh: Rename as... * xtd/optraits.hh: ...this; update. * xtd/builtin/traits.hh: Update. * tests/cos.cc: Update. * tests/Makefile.am: Update. * tests/math.cc: New. * tests/cast.cc: Update. tests/Makefile.am | 4 + tests/cast.cc | 2 tests/cos.cc | 16 +++--- tests/math.cc | 14 +++++ xtd/builtin/traits.hh | 2 xtd/internal/opmacros.hh | 124 +++++++++++++++++++++++++++-------------------- xtd/math.hh | 60 +++++++++++++++++++--- xtd/math/abs.hh | 115 +++++++++++++++++++++++++++++++++++++++++++ xtd/math/acos.hh | 93 +++++++++++++++++++++++++++++++++++ xtd/math/arith.hh | 104 ++------------------------------------- xtd/math/asin.hh | 93 +++++++++++++++++++++++++++++++++++ xtd/math/atan.hh | 93 +++++++++++++++++++++++++++++++++++ xtd/math/atan2.hh | 94 +++++++++++++++++++++++++++++++++++ xtd/math/ceil.hh | 93 +++++++++++++++++++++++++++++++++++ xtd/math/cmp.hh | 49 ++++++++++++++++++ xtd/math/constraints.hh | 63 +++++++++++++++++++++++ xtd/math/cos.hh | 93 +++++++++++++++++++++++++++++++++++ xtd/math/cosh.hh | 93 +++++++++++++++++++++++++++++++++++ xtd/math/exp.hh | 93 +++++++++++++++++++++++++++++++++++ xtd/math/floor.hh | 93 +++++++++++++++++++++++++++++++++++ xtd/math/id.hh | 3 - xtd/math/includes.hh | 40 +++++++++++++++ xtd/math/log.hh | 93 +++++++++++++++++++++++++++++++++++ xtd/math/log10.hh | 93 +++++++++++++++++++++++++++++++++++ xtd/math/logic.hh | 48 ++++++++++++++++++ xtd/math/pow.hh | 109 +++++++++++++++++++++++++++++++++++++++++ xtd/math/sin.hh | 93 +++++++++++++++++++++++++++++++++++ xtd/math/sinh.hh | 93 +++++++++++++++++++++++++++++++++++ xtd/math/sqrt.hh | 93 +++++++++++++++++++++++++++++++++++ xtd/math/tan.hh | 93 +++++++++++++++++++++++++++++++++++ xtd/math/tanh.hh | 93 +++++++++++++++++++++++++++++++++++ xtd/optraits.hh | 6 +- 32 files changed, 2076 insertions(+), 172 deletions(-) Index: xtd/math.hh --- xtd/math.hh (revision 449) +++ xtd/math.hh (working copy) @@ -28,17 +28,61 @@ #ifndef EXTENDED_MATH_HH # define EXTENDED_MATH_HH -# include <cmath> -# include <xtd/abstract/plain_fun.hh> -# include <xtd/mfun.hh> -# include <xtd/arg.hh> -# include <xtd/ops_expr.hh> -# include <xtd/math/id.hh> -# include <xtd/math/trigo.hh> +// FIXME: preconditions are not handled in code included below... + + + +/// \{ +/// Definition of xtd cmath-like functions. + +# include <xtd/math/abs.hh> +# include <xtd/math/acos.hh> +# include <xtd/math/asin.hh> +# include <xtd/math/atan.hh> +# include <xtd/math/atan2.hh> +# include <xtd/math/ceil.hh> +# include <xtd/math/cos.hh> +# include <xtd/math/cosh.hh> +# include <xtd/math/exp.hh> +// 'fabs' is obsolete +# include <xtd/math/floor.hh> +// fmod +// frexp +// ldexp +# include <xtd/math/log.hh> +# include <xtd/math/log10.hh> +// modf +# include <xtd/math/pow.hh> +# include <xtd/math/sin.hh> +# include <xtd/math/sinh.hh> +# include <xtd/math/sqrt.hh> +# include <xtd/math/tan.hh> +# include <xtd/math/tanh.hh> + +/// \} + + + +/// \{ +/// Definition of xtd operators and related functions. + # include <xtd/math/arith.hh> -// # include <xtd/math/logic.hh> +# include <xtd/math/logic.hh> +# include <xtd/math/cmp.hh> + +/// \} + + + +/// \{ +/// Misc functions. + +# include <xtd/math/id.hh> + +/// \} + Index: xtd/math/log.hh --- xtd/math/log.hh (revision 0) +++ xtd/math/log.hh (revision 0) @@ -0,0 +1,93 @@ +// Copyright (C) 2002, 2005, 2006 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 EXTENDED_MATH_LOG_HH +# define EXTENDED_MATH_LOG_HH + +# include <xtd/math/includes.hh> + + +namespace xtd +{ + + /// \{ + /// Definition of xtd (base-2) logarithm functions. + + + template <typename T> struct log_; + + template <> struct constraints_< log_, float > {}; + template <> struct constraints_< log_, double > {}; + template <> struct constraints_< log_, long double > {}; + + template <typename T> + struct fun_traits_< log_<T> > + { + typedef T arg_type; + typedef T res_type; + }; + + + template <typename T> + struct log_ + + : public abstract::plain_nary_fun_< 1, log_<T> >, + + private constraints_< log_, T > + { + xtd_res(log_<T>) impl_op(const T& arg) const + { + return std::log(arg); + } + }; + + + typedef m1fun_<log_> log_type; + + + /// \} + + + + /// \brief Plain function object xtd::log_f : float -> float. + const log_<float> log_f; + + /// \brief Plain function object xtd::log_d : double -> double. + const log_<double> log_d; + + /// \brief Plain function object xtd::log_ld : long double -> long double. + const log_<long double> log_ld; + + /// \brief Meta function object xtd::log. + const log_type log; + + +} // end of namespace xtd + + + +#endif // ! EXTENDED_MATH_LOG_HH Index: xtd/math/floor.hh --- xtd/math/floor.hh (revision 0) +++ xtd/math/floor.hh (revision 0) @@ -0,0 +1,93 @@ +// Copyright (C) 2002, 2005, 2006 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 EXTENDED_MATH_FLOOR_HH +# define EXTENDED_MATH_FLOOR_HH + +# include <xtd/math/includes.hh> + + +namespace xtd +{ + + /// \{ + /// Definition of xtd floor functions. + + + template <typename T> struct floor_; + + template <> struct constraints_< floor_, float > {}; + template <> struct constraints_< floor_, double > {}; + template <> struct constraints_< floor_, long double > {}; + + template <typename T> + struct fun_traits_< floor_<T> > + { + typedef T arg_type; + typedef T res_type; + }; + + + template <typename T> + struct floor_ + + : public abstract::plain_nary_fun_< 1, floor_<T> >, + + private constraints_< floor_, T > + { + xtd_res(floor_<T>) impl_op(const T& arg) const + { + return std::floor(arg); + } + }; + + + typedef m1fun_<floor_> floor_type; + + + /// \} + + + + /// \brief Plain function object xtd::floor_f : float -> float. + const floor_<float> floor_f; + + /// \brief Plain function object xtd::floor_d : double -> double. + const floor_<double> floor_d; + + /// \brief Plain function object xtd::floor_ld : long double -> long double. + const floor_<long double> floor_ld; + + /// \brief Meta function object xtd::floor. + const floor_type floor; + + +} // end of namespace xtd + + + +#endif // ! EXTENDED_MATH_FLOOR_HH Index: xtd/math/log10.hh --- xtd/math/log10.hh (revision 0) +++ xtd/math/log10.hh (revision 0) @@ -0,0 +1,93 @@ +// Copyright (C) 2002, 2005, 2006 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 EXTENDED_MATH_LOG10_HH +# define EXTENDED_MATH_LOG10_HH + +# include <xtd/math/includes.hh> + + +namespace xtd +{ + + /// \{ + /// Definition of xtd base-10 logarithm functions. + + + template <typename T> struct log10_; + + template <> struct constraints_< log10_, float > {}; + template <> struct constraints_< log10_, double > {}; + template <> struct constraints_< log10_, long double > {}; + + template <typename T> + struct fun_traits_< log10_<T> > + { + typedef T arg_type; + typedef T res_type; + }; + + + template <typename T> + struct log10_ + + : public abstract::plain_nary_fun_< 1, log10_<T> >, + + private constraints_< log10_, T > + { + xtd_res(log10_<T>) impl_op(const T& arg) const + { + return std::log10(arg); + } + }; + + + typedef m1fun_<log10_> log10_type; + + + /// \} + + + + /// \brief Plain function object xtd::log10_f : float -> float. + const log10_<float> log10_f; + + /// \brief Plain function object xtd::log10_d : double -> double. + const log10_<double> log10_d; + + /// \brief Plain function object xtd::log10_ld : long double -> long double. + const log10_<long double> log10_ld; + + /// \brief Meta function object xtd::log10. + const log10_type log10; + + +} // end of namespace xtd + + + +#endif // ! EXTENDED_MATH_LOG10_HH Index: xtd/math/tan.hh --- xtd/math/tan.hh (revision 0) +++ xtd/math/tan.hh (revision 0) @@ -0,0 +1,93 @@ +// Copyright (C) 2002, 2005, 2006 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 EXTENDED_MATH_TAN_HH +# define EXTENDED_MATH_TAN_HH + +# include <xtd/math/includes.hh> + + +namespace xtd +{ + + /// \{ + /// Definition of xtd tangent functions. + + + template <typename T> struct tan_; + + template <> struct constraints_< tan_, float > {}; + template <> struct constraints_< tan_, double > {}; + template <> struct constraints_< tan_, long double > {}; + + template <typename T> + struct fun_traits_< tan_<T> > + { + typedef T arg_type; + typedef T res_type; + }; + + + template <typename T> + struct tan_ + + : public abstract::plain_nary_fun_< 1, tan_<T> >, + + private constraints_< tan_, T > + { + xtd_res(tan_<T>) impl_op(const T& arg) const + { + return std::tan(arg); + } + }; + + + typedef m1fun_<tan_> tan_type; + + + /// \} + + + + /// \brief Plain function object xtd::tan_f : float -> float. + const tan_<float> tan_f; + + /// \brief Plain function object xtd::tan_d : double -> double. + const tan_<double> tan_d; + + /// \brief Plain function object xtd::tan_ld : long double -> long double. + const tan_<long double> tan_ld; + + /// \brief Meta function object xtd::tan. + const tan_type tan; + + +} // end of namespace xtd + + + +#endif // ! EXTENDED_MATH_TAN_HH Index: xtd/math/atan.hh --- xtd/math/atan.hh (revision 0) +++ xtd/math/atan.hh (revision 0) @@ -0,0 +1,93 @@ +// Copyright (C) 2002, 2005, 2006 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 EXTENDED_MATH_ATAN_HH +# define EXTENDED_MATH_ATAN_HH + +# include <xtd/math/includes.hh> + + +namespace xtd +{ + + /// \{ + /// Definition of xtd arc tangent functions. + + + template <typename T> struct atan_; + + template <> struct constraints_< atan_, float > {}; + template <> struct constraints_< atan_, double > {}; + template <> struct constraints_< atan_, long double > {}; + + template <typename T> + struct fun_traits_< atan_<T> > + { + typedef T arg_type; + typedef T res_type; + }; + + + template <typename T> + struct atan_ + + : public abstract::plain_nary_fun_< 1, atan_<T> >, + + private constraints_< atan_, T > + { + xtd_res(atan_<T>) impl_op(const T& arg) const + { + return std::atan(arg); + } + }; + + + typedef m1fun_<atan_> atan_type; + + + /// \} + + + + /// \brief Plain function object xtd::atan_f : float -> float. + const atan_<float> atan_f; + + /// \brief Plain function object xtd::atan_d : double -> double. + const atan_<double> atan_d; + + /// \brief Plain function object xtd::atan_ld : long double -> long double. + const atan_<long double> atan_ld; + + /// \brief Meta function object xtd::atan. + const atan_type atan; + + +} // end of namespace xtd + + + +#endif // ! EXTENDED_MATH_ATAN_HH Index: xtd/math/cos.hh --- xtd/math/cos.hh (revision 0) +++ xtd/math/cos.hh (revision 0) @@ -0,0 +1,93 @@ +// Copyright (C) 2002, 2005, 2006 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 EXTENDED_MATH_COS_HH +# define EXTENDED_MATH_COS_HH + +# include <xtd/math/includes.hh> + + +namespace xtd +{ + + /// \{ + /// Definition of xtd cosine functions. + + + template <typename T> struct cos_; + + template <> struct constraints_< cos_, float > {}; + template <> struct constraints_< cos_, double > {}; + template <> struct constraints_< cos_, long double > {}; + + template <typename T> + struct fun_traits_< cos_<T> > + { + typedef T arg_type; + typedef T res_type; + }; + + + template <typename T> + struct cos_ + + : public abstract::plain_nary_fun_< 1, cos_<T> >, + + private constraints_< cos_, T > + { + xtd_res(cos_<T>) impl_op(const T& arg) const + { + return std::cos(arg); + } + }; + + + typedef m1fun_<cos_> cos_type; + + + /// \} + + + + /// \brief Plain function object xtd::cos_f : float -> float. + const cos_<float> cos_f; + + /// \brief Plain function object xtd::cos_d : double -> double. + const cos_<double> cos_d; + + /// \brief Plain function object xtd::cos_ld : long double -> long double. + const cos_<long double> cos_ld; + + /// \brief Meta function object xtd::cos. + const cos_type cos; + + +} // end of namespace xtd + + + +#endif // ! EXTENDED_MATH_COS_HH Index: xtd/math/acos.hh --- xtd/math/acos.hh (revision 0) +++ xtd/math/acos.hh (revision 0) @@ -0,0 +1,93 @@ +// Copyright (C) 2002, 2005, 2006 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 EXTENDED_MATH_ACOS_HH +# define EXTENDED_MATH_ACOS_HH + +# include <xtd/math/includes.hh> + + +namespace xtd +{ + + /// \{ + /// Definition of xtd arc cosine functions. + + + template <typename T> struct acos_; + + template <> struct constraints_< acos_, float > {}; + template <> struct constraints_< acos_, double > {}; + template <> struct constraints_< acos_, long double > {}; + + template <typename T> + struct fun_traits_< acos_<T> > + { + typedef T arg_type; + typedef T res_type; + }; + + + template <typename T> + struct acos_ + + : public abstract::plain_nary_fun_< 1, acos_<T> >, + + private constraints_< acos_, T > + { + xtd_res(acos_<T>) impl_op(const T& arg) const + { + return std::acos(arg); + } + }; + + + typedef m1fun_<acos_> acos_type; + + + /// \} + + + + /// \brief Plain function object xtd::acos_f : float -> float. + const acos_<float> acos_f; + + /// \brief Plain function object xtd::acos_d : double -> double. + const acos_<double> acos_d; + + /// \brief Plain function object xtd::acos_ld : long double -> long double. + const acos_<long double> acos_ld; + + /// \brief Meta function object xtd::acos. + const acos_type acos; + + +} // end of namespace xtd + + + +#endif // ! EXTENDED_MATH_ACOS_HH Index: xtd/math/sin.hh --- xtd/math/sin.hh (revision 0) +++ xtd/math/sin.hh (revision 0) @@ -0,0 +1,93 @@ +// Copyright (C) 2002, 2005, 2006 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 EXTENDED_MATH_SIN_HH +# define EXTENDED_MATH_SIN_HH + +# include <xtd/math/includes.hh> + + +namespace xtd +{ + + /// \{ + /// Definition of xtd sine functions. + + + template <typename T> struct sin_; + + template <> struct constraints_< sin_, float > {}; + template <> struct constraints_< sin_, double > {}; + template <> struct constraints_< sin_, long double > {}; + + template <typename T> + struct fun_traits_< sin_<T> > + { + typedef T arg_type; + typedef T res_type; + }; + + + template <typename T> + struct sin_ + + : public abstract::plain_nary_fun_< 1, sin_<T> >, + + private constraints_< sin_, T > + { + xtd_res(sin_<T>) impl_op(const T& arg) const + { + return std::sin(arg); + } + }; + + + typedef m1fun_<sin_> sin_type; + + + /// \} + + + + /// \brief Plain function object xtd::sin_f : float -> float. + const sin_<float> sin_f; + + /// \brief Plain function object xtd::sin_d : double -> double. + const sin_<double> sin_d; + + /// \brief Plain function object xtd::sin_ld : long double -> long double. + const sin_<long double> sin_ld; + + /// \brief Meta function object xtd::sin. + const sin_type sin; + + +} // end of namespace xtd + + + +#endif // ! EXTENDED_MATH_SIN_HH Index: xtd/math/sqrt.hh --- xtd/math/sqrt.hh (revision 0) +++ xtd/math/sqrt.hh (revision 0) @@ -0,0 +1,93 @@ +// Copyright (C) 2002, 2005, 2006 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 EXTENDED_MATH_SQRT_HH +# define EXTENDED_MATH_SQRT_HH + +# include <xtd/math/includes.hh> + + +namespace xtd +{ + + /// \{ + /// Definition of xtd square root functions. + + + template <typename T> struct sqrt_; + + template <> struct constraints_< sqrt_, float > {}; + template <> struct constraints_< sqrt_, double > {}; + template <> struct constraints_< sqrt_, long double > {}; + + template <typename T> + struct fun_traits_< sqrt_<T> > + { + typedef T arg_type; + typedef T res_type; + }; + + + template <typename T> + struct sqrt_ + + : public abstract::plain_nary_fun_< 1, sqrt_<T> >, + + private constraints_< sqrt_, T > + { + xtd_res(sqrt_<T>) impl_op(const T& arg) const + { + return std::sqrt(arg); + } + }; + + + typedef m1fun_<sqrt_> sqrt_type; + + + /// \} + + + + /// \brief Plain function object xtd::sqrt_f : float -> float. + const sqrt_<float> sqrt_f; + + /// \brief Plain function object xtd::sqrt_d : double -> double. + const sqrt_<double> sqrt_d; + + /// \brief Plain function object xtd::sqrt_ld : long double -> long double. + const sqrt_<long double> sqrt_ld; + + /// \brief Meta function object xtd::sqrt. + const sqrt_type sqrt; + + +} // end of namespace xtd + + + +#endif // ! EXTENDED_MATH_SQRT_HH Index: xtd/math/asin.hh --- xtd/math/asin.hh (revision 0) +++ xtd/math/asin.hh (revision 0) @@ -0,0 +1,93 @@ +// Copyright (C) 2002, 2005, 2006 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 EXTENDED_MATH_ASIN_HH +# define EXTENDED_MATH_ASIN_HH + +# include <xtd/math/includes.hh> + + +namespace xtd +{ + + /// \{ + /// Definition of xtd arc sine functions. + + + template <typename T> struct asin_; + + template <> struct constraints_< asin_, float > {}; + template <> struct constraints_< asin_, double > {}; + template <> struct constraints_< asin_, long double > {}; + + template <typename T> + struct fun_traits_< asin_<T> > + { + typedef T arg_type; + typedef T res_type; + }; + + + template <typename T> + struct asin_ + + : public abstract::plain_nary_fun_< 1, asin_<T> >, + + private constraints_< asin_, T > + { + xtd_res(asin_<T>) impl_op(const T& arg) const + { + return std::asin(arg); + } + }; + + + typedef m1fun_<asin_> asin_type; + + + /// \} + + + + /// \brief Plain function object xtd::asin_f : float -> float. + const asin_<float> asin_f; + + /// \brief Plain function object xtd::asin_d : double -> double. + const asin_<double> asin_d; + + /// \brief Plain function object xtd::asin_ld : long double -> long double. + const asin_<long double> asin_ld; + + /// \brief Meta function object xtd::asin. + const asin_type asin; + + +} // end of namespace xtd + + + +#endif // ! EXTENDED_MATH_ASIN_HH Index: xtd/math/tanh.hh --- xtd/math/tanh.hh (revision 0) +++ xtd/math/tanh.hh (revision 0) @@ -0,0 +1,93 @@ +// Copyright (C) 2002, 2005, 2006 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 EXTENDED_MATH_TANH_HH +# define EXTENDED_MATH_TANH_HH + +# include <xtd/math/includes.hh> + + +namespace xtd +{ + + /// \{ + /// Definition of xtd hyperbolic tangent functions. + + + template <typename T> struct tanh_; + + template <> struct constraints_< tanh_, float > {}; + template <> struct constraints_< tanh_, double > {}; + template <> struct constraints_< tanh_, long double > {}; + + template <typename T> + struct fun_traits_< tanh_<T> > + { + typedef T arg_type; + typedef T res_type; + }; + + + template <typename T> + struct tanh_ + + : public abstract::plain_nary_fun_< 1, tanh_<T> >, + + private constraints_< tanh_, T > + { + xtd_res(tanh_<T>) impl_op(const T& arg) const + { + return std::tanh(arg); + } + }; + + + typedef m1fun_<tanh_> tanh_type; + + + /// \} + + + + /// \brief Plain function object xtd::tanh_f : float -> float. + const tanh_<float> tanh_f; + + /// \brief Plain function object xtd::tanh_d : double -> double. + const tanh_<double> tanh_d; + + /// \brief Plain function object xtd::tanh_ld : long double -> long double. + const tanh_<long double> tanh_ld; + + /// \brief Meta function object xtd::tanh. + const tanh_type tanh; + + +} // end of namespace xtd + + + +#endif // ! EXTENDED_MATH_TANH_HH Index: xtd/math/exp.hh --- xtd/math/exp.hh (revision 0) +++ xtd/math/exp.hh (revision 0) @@ -0,0 +1,93 @@ +// Copyright (C) 2002, 2005, 2006 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 EXTENDED_MATH_EXP_HH +# define EXTENDED_MATH_EXP_HH + +# include <xtd/math/includes.hh> + + +namespace xtd +{ + + /// \{ + /// Definition of xtd exponential functions. + + + template <typename T> struct exp_; + + template <> struct constraints_< exp_, float > {}; + template <> struct constraints_< exp_, double > {}; + template <> struct constraints_< exp_, long double > {}; + + template <typename T> + struct fun_traits_< exp_<T> > + { + typedef T arg_type; + typedef T res_type; + }; + + + template <typename T> + struct exp_ + + : public abstract::plain_nary_fun_< 1, exp_<T> >, + + private constraints_< exp_, T > + { + xtd_res(exp_<T>) impl_op(const T& arg) const + { + return std::exp(arg); + } + }; + + + typedef m1fun_<exp_> exp_type; + + + /// \} + + + + /// \brief Plain function object xtd::exp_f : float -> float. + const exp_<float> exp_f; + + /// \brief Plain function object xtd::exp_d : double -> double. + const exp_<double> exp_d; + + /// \brief Plain function object xtd::exp_ld : long double -> long double. + const exp_<long double> exp_ld; + + /// \brief Meta function object xtd::exp. + const exp_type exp; + + +} // end of namespace xtd + + + +#endif // ! EXTENDED_MATH_EXP_HH Index: xtd/math/cosh.hh --- xtd/math/cosh.hh (revision 0) +++ xtd/math/cosh.hh (revision 0) @@ -0,0 +1,93 @@ +// Copyright (C) 2002, 2005, 2006 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 EXTENDED_MATH_COSH_HH +# define EXTENDED_MATH_COSH_HH + +# include <xtd/math/includes.hh> + + +namespace xtd +{ + + /// \{ + /// Definition of xtd hyperbolic cosine functions. + + + template <typename T> struct cosh_; + + template <> struct constraints_< cosh_, float > {}; + template <> struct constraints_< cosh_, double > {}; + template <> struct constraints_< cosh_, long double > {}; + + template <typename T> + struct fun_traits_< cosh_<T> > + { + typedef T arg_type; + typedef T res_type; + }; + + + template <typename T> + struct cosh_ + + : public abstract::plain_nary_fun_< 1, cosh_<T> >, + + private constraints_< cosh_, T > + { + xtd_res(cosh_<T>) impl_op(const T& arg) const + { + return std::cosh(arg); + } + }; + + + typedef m1fun_<cosh_> cosh_type; + + + /// \} + + + + /// \brief Plain function object xtd::cosh_f : float -> float. + const cosh_<float> cosh_f; + + /// \brief Plain function object xtd::cosh_d : double -> double. + const cosh_<double> cosh_d; + + /// \brief Plain function object xtd::cosh_ld : long double -> long double. + const cosh_<long double> cosh_ld; + + /// \brief Meta function object xtd::cosh. + const cosh_type cosh; + + +} // end of namespace xtd + + + +#endif // ! EXTENDED_MATH_COSH_HH Index: xtd/math/id.hh --- xtd/math/id.hh (revision 449) +++ xtd/math/id.hh (working copy) @@ -28,8 +28,7 @@ #ifndef EXTENDED_MATH_ID_HH # define EXTENDED_MATH_ID_HH -# include <xtd/abstract/plain_nary_fun.hh> -# include <xtd/mfun.hh> +# include <xtd/math/includes.hh> namespace xtd Index: xtd/math/logic.hh --- xtd/math/logic.hh (revision 0) +++ xtd/math/logic.hh (revision 0) @@ -0,0 +1,48 @@ +// Copyright (C) 2002, 2005, 2006 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 EXTENDED_MATH_LOGIC_HH +# define EXTENDED_MATH_LOGIC_HH + +# include <xtd/internal/opmacros.hh> + + +namespace xtd +{ + + xtd_internal_decl_binary_operator( land, and ); + xtd_internal_decl_binary_operator( lor, or ); + xtd_internal_decl_binary_operator( lxor, xor ); + + xtd_internal_decl_unary_operator( lnot, not ); + + +} // end of namespace xtd + + + +#endif // ! EXTENDED_MATH_LOGIC_HH Index: xtd/math/sinh.hh --- xtd/math/sinh.hh (revision 0) +++ xtd/math/sinh.hh (revision 0) @@ -0,0 +1,93 @@ +// Copyright (C) 2002, 2005, 2006 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 EXTENDED_MATH_SINH_HH +# define EXTENDED_MATH_SINH_HH + +# include <xtd/math/includes.hh> + + +namespace xtd +{ + + /// \{ + /// Definition of xtd hyperbolic sine functions. + + + template <typename T> struct sinh_; + + template <> struct constraints_< sinh_, float > {}; + template <> struct constraints_< sinh_, double > {}; + template <> struct constraints_< sinh_, long double > {}; + + template <typename T> + struct fun_traits_< sinh_<T> > + { + typedef T arg_type; + typedef T res_type; + }; + + + template <typename T> + struct sinh_ + + : public abstract::plain_nary_fun_< 1, sinh_<T> >, + + private constraints_< sinh_, T > + { + xtd_res(sinh_<T>) impl_op(const T& arg) const + { + return std::sinh(arg); + } + }; + + + typedef m1fun_<sinh_> sinh_type; + + + /// \} + + + + /// \brief Plain function object xtd::sinh_f : float -> float. + const sinh_<float> sinh_f; + + /// \brief Plain function object xtd::sinh_d : double -> double. + const sinh_<double> sinh_d; + + /// \brief Plain function object xtd::sinh_ld : long double -> long double. + const sinh_<long double> sinh_ld; + + /// \brief Meta function object xtd::sinh. + const sinh_type sinh; + + +} // end of namespace xtd + + + +#endif // ! EXTENDED_MATH_SINH_HH Index: xtd/math/atan2.hh --- xtd/math/atan2.hh (revision 0) +++ xtd/math/atan2.hh (revision 0) @@ -0,0 +1,94 @@ +// Copyright (C) 2002, 2005, 2006 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 EXTENDED_MATH_ATAN2_HH +# define EXTENDED_MATH_ATAN2_HH + +# include <xtd/math/includes.hh> + + +namespace xtd +{ + + /// \{ + /// Definition of xtd arc tangent functions taking two arguments. + + + template <typename T1, typename T2> struct atan2_; + + template <> struct constraints_2_< atan2_, float, float > {}; + template <> struct constraints_2_< atan2_, double, double > {}; + template <> struct constraints_2_< atan2_, long double, long double > {}; + + template <typename T> + struct fun_traits_< atan2_<T, T> > + { + typedef T arg1_type; + typedef T arg2_type; + typedef T res_type; + }; + + + template <typename T1, typename T2> + struct atan2_ + + : public abstract::plain_nary_fun_< 2, atan2_<T1, T2> >, + + private constraints_2_< atan2_, T1, T2 > + { + xtd_res(mlc_comma_1(atan2_<T1,T2>)) impl_op(const T1& arg1, const T2& arg2) const + { + return std::atan2(arg1, arg2); + } + }; + + + typedef m2fun_<atan2_> atan2_type; + + + /// \} + + + + /// \brief Plain function object xtd::atan2_f : (float, float) -> float. + const atan2_<float, float> atan2_f; + + /// \brief Plain function object xtd::atan2_d : (double, double) -> double. + const atan2_<double, double> atan2_d; + + /// \brief Plain function object xtd::atan2_ld : (long double, long double) -> long double. + const atan2_<long double, long double> atan2_ld; + + /// \brief Meta function object xtd::atan2. + const atan2_type atan2; + + +} // end of namespace xtd + + + +#endif // ! EXTENDED_MATH_ATAN2_HH Index: xtd/math/abs.hh --- xtd/math/abs.hh (revision 0) +++ xtd/math/abs.hh (revision 0) @@ -0,0 +1,115 @@ +// Copyright (C) 2002, 2005, 2006 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 EXTENDED_MATH_ABS_HH +# define EXTENDED_MATH_ABS_HH + +# include <xtd/math/includes.hh> + + +namespace xtd +{ + + /// \{ + /// Definition of xtd absolute value functions. + + + template <typename T> struct abs_; + + template <> struct constraints_< abs_, int > {}; + template <> struct constraints_< abs_, long int > {}; + + template <> struct constraints_< abs_, float > {}; + template <> struct constraints_< abs_, double > {}; + template <> struct constraints_< abs_, long double > {}; + + template <typename T> + struct fun_traits_< abs_<T> > + { + typedef T arg_type; + typedef T res_type; + }; + + namespace internal { + + int abs_(int i) { return std::abs(i); } + long int abs_(long int i) { return std::abs(i); } + + float abs_(float i) { return std::fabs(i); } + double abs_(double i) { return std::fabs(i); } + long double abs_(long double i) { return std::fabs(i); } + + } // end of namespace xtd::internal + + + template <typename T> + struct abs_ + + : public abstract::plain_nary_fun_< 1, abs_<T> >, + + private constraints_< abs_, T > + { + xtd_res(abs_<T>) impl_op(const T& arg) const + { + return internal::abs_(arg); + } + }; + + + typedef m1fun_<abs_> abs_type; + + + /// \} + + + + /// \brief Plain function object xtd::abs_f : int -> int. + const abs_<int> abs_i; + + /// \brief Plain function object xtd::abs_d : long int -> long int. + const abs_<long int> abs_li; + + + /// \brief Plain function object xtd::abs_f : float -> float. + const abs_<float> abs_f; + + /// \brief Plain function object xtd::abs_d : double -> double. + const abs_<double> abs_d; + + /// \brief Plain function object xtd::abs_ld : long double -> long double. + const abs_<long double> abs_ld; + + + /// \brief Meta function object xtd::abs. + const abs_type abs; + + +} // end of namespace xtd + + + +#endif // ! EXTENDED_MATH_ABS_HH Index: xtd/math/pow.hh --- xtd/math/pow.hh (revision 0) +++ xtd/math/pow.hh (revision 0) @@ -0,0 +1,109 @@ +// Copyright (C) 2002, 2005, 2006 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 EXTENDED_MATH_POW_HH +# define EXTENDED_MATH_POW_HH + +# include <xtd/math/includes.hh> + + +namespace xtd +{ + + /// \{ + /// Definition of xtd arc tangent functions taking two arguments. + + + template <typename T1, typename T2> struct pow_; + + template <> struct constraints_2_< pow_, float, float > {}; + template <> struct constraints_2_< pow_, double, double > {}; + template <> struct constraints_2_< pow_, long double, long double > {}; + + template <> struct constraints_2_< pow_, float, int > {}; + template <> struct constraints_2_< pow_, double, int > {}; + template <> struct constraints_2_< pow_, long double, int > {}; + + template <typename T1, typename T2> + struct fun_traits_< pow_<T1, T2> > + { + typedef T1 arg1_type; + typedef T2 arg2_type; + typedef T1 res_type; + }; + + + template <typename T1, typename T2> + struct pow_ + + : public abstract::plain_nary_fun_< 2, pow_<T1, T2> >, + + private constraints_2_< pow_, T1, T2 > + { + xtd_res(mlc_comma_1(pow_<T1,T2>)) impl_op(const T1& arg1, const T2& arg2) const + { + return std::pow(arg1, arg2); + } + }; + + + typedef m2fun_<pow_> pow_type; + + + /// \} + + + + /// \brief Plain function object xtd::pow_f : (float, float) -> float. + const pow_<float, float> pow_f; + + /// \brief Plain function object xtd::pow_d : (double, double) -> double. + const pow_<double, double> pow_d; + + /// \brief Plain function object xtd::pow_ld : (long double, long double) -> long double. + const pow_<long double, long double> pow_ld; + + + /// \brief Plain function object xtd::pow_f : (float, int) -> float. + const pow_<float, int> pow_fi; + + /// \brief Plain function object xtd::pow_d : (double, int) -> double. + const pow_<double, int> pow_di; + + /// \brief Plain function object xtd::pow_ld : (long double, int) -> long double. + const pow_<long double, int> pow_ldi; + + + /// \brief Meta function object xtd::pow. + const pow_type pow; + + +} // end of namespace xtd + + + +#endif // ! EXTENDED_MATH_POW_HH Index: xtd/math/includes.hh --- xtd/math/includes.hh (revision 0) +++ xtd/math/includes.hh (revision 0) @@ -0,0 +1,40 @@ +// Copyright (C) 2002, 2005, 2006 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 EXTENDED_MATH_INCLUDES_HH +# define EXTENDED_MATH_INCLUDES_HH + + +# include <cmath> +# include <cassert> + +# include <xtd/abstract/plain_nary_fun.hh> +# include <xtd/mfun.hh> +# include <xtd/math/constraints.hh> + + +#endif // ! EXTENDED_MATH_INCLUDES_HH Index: xtd/math/arith.hh --- xtd/math/arith.hh (revision 449) +++ xtd/math/arith.hh (working copy) @@ -28,109 +28,19 @@ #ifndef EXTENDED_MATH_ARITH_HH # define EXTENDED_MATH_ARITH_HH -# include <xtd/builtin/traits.hh> -# include <xtd/abstract/plain_nary_fun.hh> -# include <xtd/mfun.hh> - - -// FIXME: doc - -# define xtd_internal_decl_plain_unary_fun_op(OperatorName, OperatorSymbol) \ - \ - template <typename T> \ - struct plain_##OperatorName##_; \ - \ - template <typename T> \ - struct fun_traits_< plain_##OperatorName##_<T> > \ - { \ - typedef T arg_type; \ - typedef xtd_##OperatorName(T) res_type; \ - }; \ - \ - template <typename T> \ - struct plain_##OperatorName##_ \ - \ - : public abstract::plain_nary_fun_< 1, plain_##OperatorName##_<T> > \ - { \ - typedef plain_##OperatorName##_<T> self; \ - xtd_res(self) impl_op(const T& arg) const \ - { \ - return OperatorSymbol arg; \ - } \ - }; \ - \ - typedef m1fun_<plain_##OperatorName##_> OperatorName##_type; \ - const OperatorName##_type OperatorName; \ - \ - struct e_n_d__w_i_t_h__s_e_m_i_c_o_l_o_n - - - - -# define xtd_internal_decl_plain_binary_fun_op(OperatorName, OperatorSymbol) \ - \ - template <typename T1, typename T2> \ - struct plain_##OperatorName##_; \ - \ - template <typename T1, typename T2> \ - struct fun_traits_< plain_##OperatorName##_<T1, T2> > \ - { \ - typedef T1 arg1_type; \ - typedef T2 arg2_type; \ - typedef xtd_##OperatorName(T1, T2) res_type; \ - }; \ - \ - template <typename T1, typename T2> \ - struct plain_##OperatorName##_ \ - \ - : public abstract::plain_nary_fun_< 2, plain_##OperatorName##_<T1, T2> > \ - { \ - typedef plain_##OperatorName##_<T1, T2> self; \ - xtd_res(self) impl_op(const T1& arg1, const T2& arg2) const \ - { \ - return arg1 OperatorSymbol arg2; \ - } \ - }; \ - \ - typedef m2fun_<plain_##OperatorName##_> OperatorName##_type; \ - const OperatorName##_type OperatorName; \ - \ - struct e_n_d__w_i_t_h__s_e_m_i_c_o_l_o_n - - +# include <xtd/internal/opmacros.hh> namespace xtd { - // logic - - xtd_internal_decl_plain_binary_fun_op( land, and ); - xtd_internal_decl_plain_binary_fun_op( lor, or ); - xtd_internal_decl_plain_binary_fun_op( lxor, xor ); - - xtd_internal_decl_plain_unary_fun_op( lnot, not ); - - - // cmp - - xtd_internal_decl_plain_binary_fun_op( eq, == ); - xtd_internal_decl_plain_binary_fun_op( neq, != ); - xtd_internal_decl_plain_binary_fun_op( less, < ); - xtd_internal_decl_plain_binary_fun_op( leq, <= ); - xtd_internal_decl_plain_binary_fun_op( greater, > ); - xtd_internal_decl_plain_binary_fun_op( geq, >= ); - - - // arith - - xtd_internal_decl_plain_binary_fun_op( plus, + ); - xtd_internal_decl_plain_binary_fun_op( minus, - ); - xtd_internal_decl_plain_binary_fun_op( mult, * ); - xtd_internal_decl_plain_binary_fun_op( div, / ); - xtd_internal_decl_plain_binary_fun_op( mod, % ); + xtd_internal_decl_binary_operator( plus, + ); + xtd_internal_decl_binary_operator( minus, - ); + xtd_internal_decl_binary_operator( mult, * ); + xtd_internal_decl_binary_operator( div, / ); + xtd_internal_decl_binary_operator( mod, % ); - xtd_internal_decl_plain_unary_fun_op( uminus, - ); + xtd_internal_decl_unary_operator( uminus, - ); } // end of namespace xtd Index: xtd/math/constraints.hh --- xtd/math/constraints.hh (revision 0) +++ xtd/math/constraints.hh (revision 0) @@ -0,0 +1,63 @@ +// Copyright (C) 2002, 2005, 2006 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 EXTENDED_MATH_CONSTRAINTS_HH +# define EXTENDED_MATH_CONSTRAINTS_HH + +# include <mlc/abort.hh> + + +namespace xtd +{ + + namespace ERROR + { + struct FIXME; + + } // end of namespace xtd::ERROR + + + template < template<typename> class pfun, + typename T > + struct constraints_ : private mlc::abort_< ERROR::FIXME > + { + }; + + + template < template<typename, typename> class pfun, + typename T1, + typename T2 > + struct constraints_2_ : private mlc::abort_< ERROR::FIXME > + { + }; + + +} // end of namespace xtd + + + +#endif // ! EXTENDED_MATH_CONSTRAINTS_HH Index: xtd/math/ceil.hh --- xtd/math/ceil.hh (revision 0) +++ xtd/math/ceil.hh (revision 0) @@ -0,0 +1,93 @@ +// Copyright (C) 2002, 2005, 2006 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 EXTENDED_MATH_CEIL_HH +# define EXTENDED_MATH_CEIL_HH + +# include <xtd/math/includes.hh> + + +namespace xtd +{ + + /// \{ + /// Definition of xtd ceil functions. + + + template <typename T> struct ceil_; + + template <> struct constraints_< ceil_, float > {}; + template <> struct constraints_< ceil_, double > {}; + template <> struct constraints_< ceil_, long double > {}; + + template <typename T> + struct fun_traits_< ceil_<T> > + { + typedef T arg_type; + typedef T res_type; + }; + + + template <typename T> + struct ceil_ + + : public abstract::plain_nary_fun_< 1, ceil_<T> >, + + private constraints_< ceil_, T > + { + xtd_res(ceil_<T>) impl_op(const T& arg) const + { + return std::ceil(arg); + } + }; + + + typedef m1fun_<ceil_> ceil_type; + + + /// \} + + + + /// \brief Plain function object xtd::ceil_f : float -> float. + const ceil_<float> ceil_f; + + /// \brief Plain function object xtd::ceil_d : double -> double. + const ceil_<double> ceil_d; + + /// \brief Plain function object xtd::ceil_ld : long double -> long double. + const ceil_<long double> ceil_ld; + + /// \brief Meta function object xtd::ceil. + const ceil_type ceil; + + +} // end of namespace xtd + + + +#endif // ! EXTENDED_MATH_CEIL_HH Index: xtd/math/cmp.hh --- xtd/math/cmp.hh (revision 0) +++ xtd/math/cmp.hh (revision 0) @@ -0,0 +1,49 @@ +// Copyright (C) 2002, 2005, 2006 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 EXTENDED_MATH_CMP_HH +# define EXTENDED_MATH_CMP_HH + +# include <xtd/internal/opmacros.hh> + + +namespace xtd +{ + + xtd_internal_decl_binary_operator( eq, == ); + xtd_internal_decl_binary_operator( neq, != ); + xtd_internal_decl_binary_operator( less, < ); + xtd_internal_decl_binary_operator( leq, <= ); + xtd_internal_decl_binary_operator( greater, > ); + xtd_internal_decl_binary_operator( geq, >= ); + + +} // end of namespace xtd + + + +#endif // ! EXTENDED_MATH_CMP_HH Index: xtd/optraits.hh --- xtd/optraits.hh (revision 443) +++ xtd/optraits.hh (working copy) @@ -25,8 +25,8 @@ // reasons why the executable file might be covered by the GNU General // Public License. -#ifndef EXTENDED_TRAITS_HH -# define EXTENDED_TRAITS_HH +#ifndef EXTENDED_OPTRAITS_HH +# define EXTENDED_OPTRAITS_HH # include <mlc/flags.hh> @@ -165,4 +165,4 @@ -#endif // ! EXTENDED_TRAITS_HH +#endif // ! EXTENDED_OPTRAITS_HH Index: xtd/builtin/traits.hh --- xtd/builtin/traits.hh (revision 449) +++ xtd/builtin/traits.hh (working copy) @@ -28,7 +28,7 @@ #ifndef EXTENDED_BUILTIN_TRAITS_HH # define EXTENDED_BUILTIN_TRAITS_HH -# include <xtd/traits.hh> +# include <xtd/optraits.hh> Index: xtd/internal/opmacros.hh --- xtd/internal/opmacros.hh (revision 443) +++ xtd/internal/opmacros.hh (working copy) @@ -25,22 +25,51 @@ // reasons why the executable file might be covered by the GNU General // Public License. -#ifndef EXTENDED_OPS_EXPR_HH -# define EXTENDED_OPS_EXPR_HH +#ifndef EXTENDED_INTERNAL_OPMACROS_HH +# define EXTENDED_INTERNAL_OPMACROS_HH + +# include <xtd/math/includes.hh> # include <xtd/abstract/fun_expr.hh> # include <xtd/mexpr.hh> -# include <xtd/math/arith.hh> - - - +# include <xtd/literal.hh> -// FIXME: doc +# include <xtd/optraits.hh> +# include <xtd/builtin/traits.hh> # define xtd_internal_decl_unary_operator(OperatorName, OperatorSymbol) \ \ + \ + template <typename T> \ + struct plain_##OperatorName##_; \ + \ + template <typename T> \ + struct fun_traits_< plain_##OperatorName##_<T> > \ + { \ + typedef T arg_type; \ + typedef xtd_##OperatorName(T) res_type; \ + }; \ + \ + \ + template <typename T> \ + struct plain_##OperatorName##_ \ + \ + : public abstract::plain_nary_fun_< 1, plain_##OperatorName##_<T> > \ + { \ + typedef plain_##OperatorName##_<T> self; \ + xtd_res(self) impl_op(const T& arg) const \ + { \ + return OperatorSymbol arg; \ + } \ + }; \ + \ + \ + typedef m1fun_<plain_##OperatorName##_> OperatorName##_type; \ + const OperatorName##_type OperatorName; \ + \ + \ template <typename Expr> \ xtd::m1expr_<xtd::OperatorName##_type, Expr> \ operator OperatorSymbol (const xtd::abstract::fun_expr_<Expr>& expr) \ @@ -49,10 +78,11 @@ return tmp; \ } \ \ - struct e_n_d__w_i_t_h__s_e_m_i_c_o_l_o_n + \ + struct e_n_d__w_i_t_h__s_e_m_i_c_o_l_o_n \ -// FIXME: add something like: +// FIXME: does not specialize any template arguments // template <typename Expr> // struct OperatorName##_trait_ < Expr > @@ -62,9 +92,38 @@ - # define xtd_internal_decl_binary_operator(OperatorName, OperatorSymbol) \ \ + \ + template <typename T1, typename T2> \ + struct plain_##OperatorName##_; \ + \ + template <typename T1, typename T2> \ + struct fun_traits_< plain_##OperatorName##_<T1, T2> > \ + { \ + typedef T1 arg1_type; \ + typedef T2 arg2_type; \ + typedef xtd_##OperatorName(T1, T2) res_type; \ + }; \ + \ + \ + template <typename T1, typename T2> \ + struct plain_##OperatorName##_ \ + \ + : public abstract::plain_nary_fun_< 2, plain_##OperatorName##_<T1, T2> > \ + { \ + typedef plain_##OperatorName##_<T1, T2> self; \ + xtd_res(self) impl_op(const T1& arg1, const T2& arg2) const \ + { \ + return arg1 OperatorSymbol arg2; \ + } \ + }; \ + \ + \ + typedef m2fun_<plain_##OperatorName##_> OperatorName##_type; \ + const OperatorName##_type OperatorName; \ + \ + \ template <typename Lexpr, typename Rexpr> \ xtd::m2expr_<xtd::OperatorName##_type, Lexpr, Rexpr> \ operator OperatorSymbol (const xtd::abstract::fun_expr_<Lexpr>& lexpr, \ @@ -74,10 +133,11 @@ return tmp; \ } \ \ - struct e_n_d__w_i_t_h__s_e_m_i_c_o_l_o_n + \ + struct e_n_d__w_i_t_h__s_e_m_i_c_o_l_o_n \ -// FIXME: add something like: +// FIXME: does not specialize any template arguments // template <typename Lexpr, typename Rexpr> // struct OperatorName##_trait_ < Lexpr, Rexpr > @@ -86,42 +146,4 @@ // }; - - - -namespace xtd -{ - - // logic - - xtd_internal_decl_binary_operator( land, and ); - xtd_internal_decl_binary_operator( lor, or ); - xtd_internal_decl_binary_operator( lxor, xor ); - - xtd_internal_decl_unary_operator( lnot, not ); - - - // cmp - - xtd_internal_decl_binary_operator( eq, == ); - xtd_internal_decl_binary_operator( neq, != ); - xtd_internal_decl_binary_operator( less, < ); - xtd_internal_decl_binary_operator( leq, <= ); - xtd_internal_decl_binary_operator( greater, > ); - xtd_internal_decl_binary_operator( geq, >= ); - - - // arith - - xtd_internal_decl_binary_operator( plus, + ); - xtd_internal_decl_binary_operator( minus, - ); - xtd_internal_decl_binary_operator( mult, * ); - xtd_internal_decl_binary_operator( div, / ); - xtd_internal_decl_binary_operator( mod, % ); - - xtd_internal_decl_unary_operator( uminus, - ); - -} // end of namespace xtd - - -#endif // ! EXTENDED_OPS_EXPR_HH +#endif // ! EXTENDED_INTERNAL_OPMACROS_HH Index: tests/cos.cc --- tests/cos.cc (revision 449) +++ tests/cos.cc (working copy) @@ -1,6 +1,6 @@ #include <iostream> -#include <xtd/math.hh> +#include <xtd/math/cos.hh> int main() @@ -29,11 +29,11 @@ // std::cout << (cos(_1)(_2)).nargs() << std::endl; // gives: 2 // } - { - using xtd::cos; - using xtd::sin; - using xtd::_1; - using xtd::_2; +// { +// using xtd::cos; +// using xtd::sin; +// using xtd::_1; +// using xtd::_2; // std::cout << (cos(_1) * cos(_1) + sin(_2) * sin(_2))(5.f, 5.f) << std::endl; @@ -44,9 +44,9 @@ // (cos(_1) + sin(_1))(_1); // std::cout << (cos(_1) * cos(_1) + sin(_1) * sin(_1))(_1)(51.f) << std::endl; - std::cout << (_1 * _1 + _2 * _2)(cos(_1), sin(_1))(51.f) << std::endl; +// std::cout << (_1 * _1 + _2 * _2)(cos(_1), sin(_1))(51.f) << std::endl; // std::cout << ((cos(_1) + sin(_2))(_1, _1)).nargs() << std::endl; - } +// } } Index: tests/Makefile.am --- tests/Makefile.am (revision 449) +++ tests/Makefile.am (working copy) @@ -13,7 +13,8 @@ cast \ cfun \ cos \ - lit + lit \ + math id_SOURCES = id.cc bind_SOURCES = bind.cc @@ -21,5 +22,6 @@ cfun_SOURCES = cfun.cc cos_SOURCES = cos.cc lit_SOURCES = lit.cc +math_SOURCES = math.cc TESTS = $(check_PROGRAMS) Index: tests/math.cc --- tests/math.cc (revision 0) +++ tests/math.cc (revision 0) @@ -0,0 +1,14 @@ +#include <iostream> +#include <xtd/math.hh> + + +int main() +{ + using xtd::cos; + using xtd::sin; + using xtd::_1; + using xtd::_2; + + std::cout << (cos(_1) * cos(_1) + sin(_2) * sin(_2))(_1, _1)(51.f) << std::endl; + std::cout << (_1 * _1 + _2 * _2)(cos(_1), sin(_1))(51.f) << std::endl; +} Index: tests/cast.cc --- tests/cast.cc (revision 449) +++ tests/cast.cc (working copy) @@ -1,7 +1,7 @@ #include <iostream> #include <xtd/cast.hh> #include <xtd/arg.hh> -#include <xtd/math/trigo.hh> +#include <xtd/math/cos.hh> int main()
participants (1)
-
Thierry Geraud