cached extended euclidean algorithm

This commit is contained in:
Michael Hemmer 2008-07-29 10:13:22 +00:00
parent 504698e910
commit 8143ec3d0c
1 changed files with 61 additions and 0 deletions

View File

@ -0,0 +1,61 @@
#ifndef CGAL_POLYNOMIAL_CACHED_EEA_H
#define CGAL_POLYNOMIAL_CACHED_EEA_H
#include <CGAL/basic.h>
#include <CGAL/extended_euclidean_algorithm.h>
#include <CGAL/Cache.h>
namespace CGAL{
namespace CGALi{
template <class UFD>
struct Extended_euclidean_algorithm{
typedef std::pair<UFD,UFD> result_type;
typedef std::pair<UFD,UFD> first_argument_type;
result_type operator()(const first_argument_type& pq){
result_type result;
CGAL::extended_euclidean_algorithm(
pq.first, pq.second,result.first, result.second);
return result;
}
};
template <class UFD>
struct Cached_extended_euclidean_algorithm{
typedef std::pair<UFD,UFD> PAIR;
typedef Extended_euclidean_algorithm<UFD> FUNC;
typedef CGAL::Cache<PAIR,PAIR,FUNC,CGAL::Identity<PAIR>, CGAL::Less<PAIR> > CACHE;
static CACHE cache;
void operator()(const UFD& p, const UFD& q, UFD& s, UFD& t){
PAIR pq(p,q);
PAIR result = cache(pq);
s = result.first;
t = result.second;
}
};
template <class UFD>
typename Cached_extended_euclidean_algorithm<UFD>::CACHE
Cached_extended_euclidean_algorithm<UFD>::cache;
template <class UFD>
void
cached_extended_euclidean_algorithm(
const UFD& p,
const UFD& q,
UFD& s,
UFD& t){
// CGAL::extended_euclidean_algorithm(p,q,s,t); return ;
Cached_extended_euclidean_algorithm<UFD> eea_cache;
eea_cache(p,q,s,t);
}
} // namespace CGALi
} // namespace CGAL
#endif // CGAL_POLYNOMIAL_CACHED_EEA_H