1 /****************************************
2 *  Computer Algebra System SINGULAR     *
3 ****************************************/
4 
5 /***************************************************************
6  *  File:    pProcs.h
7  *  Purpose: declaration of primitive procs for polys
8  *  Author:  obachman (Olaf Bachmann)
9  *  Created: 8/00
10  *******************************************************************/
11 #ifndef P_PROCS_H
12 #define P_PROCS_H
13 
14 #include "polys/monomials/ring.h"
15 
16 /*------------- p_Proc stuff ----------------------*/
17 typedef poly (*p_Copy_Proc_Ptr)(poly p, const ring r);
18 typedef void (*p_Delete_Proc_Ptr)(poly *p, const ring r);
19 typedef poly (*p_ShallowCopyDelete_Proc_Ptr)(poly p, const ring r, omBin dest_bin);
20 typedef poly (*p_Mult_nn_Proc_Ptr)(poly p, const number n, const ring r);
21 typedef poly (*pp_Mult_nn_Proc_Ptr)(poly p, const number n, const ring r);
22 typedef poly (*p_Mult_mm_Proc_Ptr)(poly p, const poly m, const ring r);
23 typedef poly (*pp_Mult_mm_Proc_Ptr)(poly p, const poly m, const ring r);
24 typedef poly (*pp_Mult_mm_Noether_Proc_Ptr)(poly p, const poly m,
25                                             const poly spNoether, int &ll,
26                                             const ring r);
27 typedef poly (*p_Add_q_Proc_Ptr)(poly p, poly q, int & shorter, const ring r);
28 typedef poly (*p_Minus_mm_Mult_qq_Proc_Ptr)(poly p, poly m, poly q,
29                                             int &shorter, const poly spNoether,
30                                             const ring r);
31 typedef poly (*p_Neg_Proc_Ptr)(poly p, const ring r);
32 typedef poly (*pp_Mult_Coeff_mm_DivSelect_Proc_Ptr)(poly p, const poly m,
33                                                     int &shorter,const ring r);
34 typedef poly (*pp_Mult_Coeff_mm_DivSelectMult_Proc_Ptr)
35   (poly p,const poly m, const poly a, const poly b, int &shorter,const ring r);
36 
37 typedef poly (*p_Merge_q_Proc_Ptr)(poly p, poly q, const ring r);
38 typedef void (*p_kBucketSetLm_Proc_Ptr)(kBucket_pt bucket);
39 
40 typedef struct p_Procs_s
41 {
42   p_Copy_Proc_Ptr                       p_Copy;
43   p_Delete_Proc_Ptr                     p_Delete;
44   p_ShallowCopyDelete_Proc_Ptr          p_ShallowCopyDelete;
45   p_Mult_nn_Proc_Ptr                    p_Mult_nn;
46   pp_Mult_nn_Proc_Ptr                   pp_Mult_nn;
47   pp_Mult_mm_Proc_Ptr                   pp_Mult_mm;
48   pp_Mult_mm_Proc_Ptr                   pp_mm_Mult;
49   pp_Mult_mm_Noether_Proc_Ptr           pp_Mult_mm_Noether;
50   p_Mult_mm_Proc_Ptr                    p_Mult_mm;
51   p_Mult_mm_Proc_Ptr                    p_mm_Mult;
52   p_Add_q_Proc_Ptr                      p_Add_q;
53   p_Minus_mm_Mult_qq_Proc_Ptr           p_Minus_mm_Mult_qq;
54   p_Neg_Proc_Ptr                        p_Neg;
55   pp_Mult_Coeff_mm_DivSelect_Proc_Ptr   pp_Mult_Coeff_mm_DivSelect;
56   pp_Mult_Coeff_mm_DivSelectMult_Proc_Ptr   pp_Mult_Coeff_mm_DivSelectMult;
57   p_Merge_q_Proc_Ptr                    p_Merge_q;
58   p_kBucketSetLm_Proc_Ptr               p_kBucketSetLm;
59 } pProcs_s;
60 
61 
62 void p_ProcsSet(ring r, p_Procs_s* p_Procs);
63 #ifdef RDEBUG
64 void p_Debug_GetSpecNames(const ring r, const char* &field, const char* &length,
65                           const char* &ord);
66 void p_Debug_GetProcNames(const ring r, p_Procs_s* p_Procs);
67 #endif
68 // if set, then dynamic p_procs are used, otherwise static
69 extern const BOOLEAN p_procs_dynamic;
70 
71 #endif /* ! P_PROCS_H */
72