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