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