BWAPI
|
00001 // Copyright (c) 2008 Max-Planck-Institute Saarbruecken (Germany) 00002 // 00003 // This file is part of CGAL (www.cgal.org); you can redistribute it and/or 00004 // modify it under the terms of the GNU Lesser General Public License as 00005 // published by the Free Software Foundation; version 2.1 of the License. 00006 // See the file LICENSE.LGPL distributed with CGAL. 00007 // 00008 // Licensees holding a valid commercial license may use this file in 00009 // accordance with the commercial license agreement provided with the software. 00010 // 00011 // This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE 00012 // WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. 00013 // 00014 // $URL: svn+ssh://scm.gforge.inria.fr/svn/cgal/branches/CGAL-3.5-branch/Polynomial/include/CGAL/Polynomial/fwd.h $ 00015 // $Id: fwd.h 48562 2009-03-27 17:30:16Z mkerber $ 00016 // 00017 // 00018 // Author(s) : Michael Hemmer 00019 // ============================================================================ 00020 00021 00022 #ifndef CGAL_POLYNOMIAL_FWD_H 00023 #define CGAL_POLYNOMIAL_FWD_H 00024 00025 #include <CGAL/basic.h> 00026 00027 namespace CGAL{ 00028 00029 template <class NT> class Polynomial; 00030 00031 namespace CGALi{ 00032 template <class NT> inline Polynomial<NT> gcd (const Polynomial<NT>&, const Polynomial<NT>&); 00033 template <class NT> inline Polynomial<NT> gcd_(const Polynomial<NT>&, const Polynomial<NT>&, Field_tag); 00034 template <class NT> inline Polynomial<NT> gcd_(const Polynomial<NT>&, const Polynomial<NT>&, Unique_factorization_domain_tag); 00035 00036 00037 template <class NT> inline NT gcd_utcf_(const NT& a, const NT& b){return NT(1);} 00038 template <class NT> inline Polynomial<NT> gcd_utcf(const Polynomial<NT>&, const Polynomial<NT>&); 00039 00040 template <class NT> inline Polynomial<NT> gcd_utcf_(const Polynomial<NT>&, const Polynomial<NT>&); 00041 template <class NT> inline Polynomial<NT> gcd_utcf_UFD( Polynomial<NT> , Polynomial<NT>) ; 00042 template <class NT> inline Polynomial<NT> gcd_utcf_Integral_domain(Polynomial<NT>, Polynomial<NT>); 00043 template <class NT> inline Polynomial<NT> gcd_Euclidean_ring(Polynomial<NT>, Polynomial<NT>); 00044 00045 template <class NT> inline Polynomial<NT> modular_gcd_utcf(const Polynomial<NT>&, const Polynomial<NT>&, Integral_domain_tag); 00046 template <class NT> inline Polynomial<NT> modular_gcd_utcf(const Polynomial<NT>&, const Polynomial<NT>&, Unique_factorization_domain_tag); 00047 00048 // is fraction ? 00049 template <class NT> inline Polynomial<NT> gcd_utcf_is_fraction_( const Polynomial<NT>&, const Polynomial<NT>&, ::CGAL::Tag_true); 00050 template <class NT> inline Polynomial<NT> gcd_utcf_is_fraction_( const Polynomial<NT>&, const Polynomial<NT>&, ::CGAL::Tag_false); 00051 00052 // is type modularizable 00053 template <class NT> inline Polynomial<NT> gcd_utcf_modularizable_algebra_( const Polynomial<NT>&, const Polynomial<NT>&, ::CGAL::Tag_false, Integral_domain_tag); 00054 template <class NT> inline Polynomial<NT> gcd_utcf_modularizable_algebra_( const Polynomial<NT>&, const Polynomial<NT>&, ::CGAL::Tag_false, Unique_factorization_domain_tag); 00055 template <class NT> inline Polynomial<NT> gcd_utcf_modularizable_algebra_( const Polynomial<NT>&, const Polynomial<NT>&, ::CGAL::Tag_false, Field_tag); 00056 00057 template <class NT> inline Polynomial<NT> gcd_utcf_modularizable_algebra_( const Polynomial<NT>&, const Polynomial<NT>&, ::CGAL::Tag_true, Integral_domain_tag); 00058 template <class NT> inline Polynomial<NT> gcd_utcf_modularizable_algebra_( const Polynomial<NT>&, const Polynomial<NT>&, ::CGAL::Tag_true, Unique_factorization_domain_tag); 00059 template <class NT> inline Polynomial<NT> gcd_utcf_modularizable_algebra_( const Polynomial<NT>&, const Polynomial<NT>&, ::CGAL::Tag_true, Field_tag); 00060 00061 00062 // template <class NT> inline NT content_utcf(const Polynomial<NT>&); 00063 template <class NT> inline NT content_utcf_(const Polynomial<NT>&); 00064 00065 template <class NT, class OutputIterator1, class OutputIterator2> 00066 inline int filtered_square_free_factorize( Polynomial<NT>, OutputIterator1, OutputIterator2); 00067 template <class NT, class OutputIterator1, class OutputIterator2> 00068 inline int filtered_square_free_factorize_utcf( const Polynomial<NT>&, OutputIterator1, OutputIterator2); 00069 00070 template <class Coeff, class OutputIterator1, class OutputIterator2> 00071 inline int square_free_factorize_utcf(const Polynomial<Coeff>&, OutputIterator1, OutputIterator2); 00072 template <class Coeff, class OutputIterator1, class OutputIterator2> 00073 inline int square_free_factorize_utcf_for_regular_polynomial(const Polynomial<Coeff>&, OutputIterator1, OutputIterator2); 00074 00075 template <class Coeff, class OutputIterator1, class OutputIterator2> 00076 inline int square_free_factorize(const Polynomial<Coeff>&, OutputIterator1, OutputIterator2); 00077 template <class Coeff, class OutputIterator1, class OutputIterator2> 00078 inline int square_free_factorize_for_regular_polynomial(const Polynomial<Coeff>&, OutputIterator1, OutputIterator2); 00079 00080 template <class NT> inline bool may_have_multiple_factor( const Polynomial<NT>&); 00081 template <class NT> inline bool may_have_common_factor(const Polynomial<NT>&,const Polynomial<NT>&); 00082 00083 // eliminates outermost variable 00084 template <class Coeff> 00085 inline Coeff resultant( 00086 const CGAL::Polynomial<Coeff>&, const CGAL::Polynomial<Coeff>&); 00087 // eliminates innermost variable 00088 template <class Coeff> 00089 inline Coeff resultant_( 00090 const CGAL::Polynomial<Coeff>&, const CGAL::Polynomial<Coeff>&); 00091 00092 00093 00094 template< class Coeff > 00095 struct Simple_matrix; 00096 00097 template<class NT> 00098 CGALi::Simple_matrix<NT> polynomial_subresultant_matrix( 00099 CGAL::Polynomial<NT> f, 00100 CGAL::Polynomial<NT> g, 00101 int d=0); 00102 00103 template <typename Polynomial_traits_d,typename OutputIterator> inline 00104 OutputIterator polynomial_subresultants 00105 (typename Polynomial_traits_d::Polynomial_d A, 00106 typename Polynomial_traits_d::Polynomial_d B, 00107 OutputIterator out); 00108 00109 00110 template <typename Polynomial_traits_d,typename OutputIterator> inline 00111 OutputIterator principal_subresultants 00112 (typename Polynomial_traits_d::Polynomial_d A, 00113 typename Polynomial_traits_d::Polynomial_d B, 00114 OutputIterator out); 00115 00116 template<typename Polynomial_traits_d, 00117 typename OutputIterator1, 00118 typename OutputIterator2, 00119 typename OutputIterator3> 00120 OutputIterator1 polynomial_subresultants_with_cofactors 00121 (typename Polynomial_traits_d::Polynomial_d P, 00122 typename Polynomial_traits_d::Polynomial_d Q, 00123 OutputIterator1 sres_out, 00124 OutputIterator2 coP_out, 00125 OutputIterator3 coQ_out); 00126 00127 00128 template <typename Polynomial_traits_d,typename OutputIterator> inline 00129 OutputIterator 00130 principal_sturm_habicht_sequence 00131 (typename Polynomial_traits_d::Polynomial_d A, 00132 OutputIterator out); 00133 00134 00135 00136 template<typename Polynomial_traits_d,typename OutputIterator> OutputIterator 00137 sturm_habicht_sequence(typename Polynomial_traits_d::Polynomial_d P, 00138 OutputIterator out); 00139 00140 template<typename Polynomial_traits_d, 00141 typename OutputIterator1, 00142 typename OutputIterator2, 00143 typename OutputIterator3> 00144 OutputIterator1 00145 sturm_habicht_sequence_with_cofactors 00146 (typename Polynomial_traits_d::Polynomial_d P, 00147 OutputIterator1 out_stha, 00148 OutputIterator2 out_f, 00149 OutputIterator3 out_fx); 00150 00151 } // namespace CGALi 00152 00153 00154 } // namespace CGAL 00155 00156 00157 #include <CGAL/Polynomial.h> 00158 00159 #endif