1 /*++ 2 Copyright (c) 2012 Microsoft Corporation 3 4 Module Name: 5 6 polynomial_cache.h 7 8 Abstract: 9 10 "Hash-consing" for polynomials 11 12 Author: 13 14 Leonardo (leonardo) 2012-01-07 15 16 Notes: 17 18 --*/ 19 #pragma once 20 21 #include "math/polynomial/polynomial.h" 22 23 namespace polynomial { 24 25 /** 26 \brief Functor for creating unique polynomials and caching results of operations 27 */ 28 class cache { 29 struct imp; 30 imp * m_imp; 31 public: 32 cache(manager & m); 33 ~cache(); 34 manager & m() const; pm()35 manager & pm() const { return m(); } 36 polynomial * mk_unique(polynomial * p); 37 void psc_chain(polynomial const * p, polynomial const * q, var x, polynomial_ref_vector & S); 38 void factor(polynomial const * p, polynomial_ref_vector & distinct_factors); 39 void reset(); 40 }; 41 }; 42 43