My Project
Macros | Functions | Variables
p_Procs_Dynamic.cc File Reference
#include "misc/auxiliary.h"
#include "factory/factory.h"
#include "reporter/reporter.h"
#include "polys/monomials/ring.h"
#include "polys/monomials/p_polys.h"
#include "polys/kbuckets.h"
#include "polys/templates/p_Numbers.h"
#include "polys/templates/p_Procs.h"
#include "polys/templates/p_MemCmp.h"
#include "polys/templates/p_MemAdd.h"
#include "polys/templates/p_MemCopy.h"
#include "templates/p_Procs.inc"
#include "templates/p_Procs_Dynamic.h"
#include "templates/p_Procs_Impl.h"
#include "mod_raw.h"
#include "templates/p_Procs_Set.h"

Go to the source code of this file.

Macros

#define WARN_MSG   "Singular will work properly, but much slower."
 
#define LINKAGE   extern "C"
 
#define p_Procs_Kernel
 
#define MAX_PROCNAME_LEN   200
 
#define DoReallySetProc(what, field, length, ord)
 
#define DoSetProc(what, field, length, ord)
 

Functions

static void * p_ProcInitHandle (void **handle, const char *module)
 
static void * p_ProcGetHandle (p_Proc proc, p_Field field)
 
static void * GetGeneralProc (p_Proc proc)
 
static const char * GetGeneralProcName (p_Proc proc)
 
static void * GetDynamicProc (const char *proc_s, p_Proc proc, p_Field field, p_Length length, p_Ord ord, int get_name=0)
 

Variables

const BOOLEAN p_procs_dynamic = TRUE
 
void * p_procs_handle_FieldIndep = NULL
 
void * p_procs_handle_FieldZp = NULL
 
void * p_procs_handle_FieldQ = NULL
 
void * p_procs_handle_FieldGeneral = NULL
 

Macro Definition Documentation

◆ DoReallySetProc

#define DoReallySetProc (   what,
  field,
  length,
  ord 
)
Value:
_p_procs->what = cast_vptr_to_A<what##_Proc_Ptr>( \
GetDynamicProc(#what, what##_Proc, field, length, ord))
static BOOLEAN length(leftv result, leftv arg)
Definition: interval.cc:257
static void * GetDynamicProc(const char *proc_s, p_Proc proc, p_Field field, p_Length length, p_Ord ord, int get_name=0)
STATIC_VAR p_Procs_s * _p_procs
Definition: p_Procs_Set.h:116

Definition at line 250 of file p_Procs_Dynamic.cc.

◆ DoSetProc

#define DoSetProc (   what,
  field,
  length,
  ord 
)
Value:
do \
{ \
if (set_names) \
_p_procs->what = cast_vptr_to_A<what##_Proc_Ptr>( \
GetDynamicProc(#what, what##_Proc, field, length, ord, 1)); \
DoReallySetProc(what, field, length, ord); \
} \
while(0)
#define DoReallySetProc(what, field, length, ord)
STATIC_VAR int set_names
Definition: p_Procs_Set.h:120

Definition at line 255 of file p_Procs_Dynamic.cc.

◆ LINKAGE

#define LINKAGE   extern "C"

Definition at line 36 of file p_Procs_Dynamic.cc.

◆ MAX_PROCNAME_LEN

#define MAX_PROCNAME_LEN   200

Definition at line 48 of file p_Procs_Dynamic.cc.

◆ p_Procs_Kernel

#define p_Procs_Kernel

Definition at line 37 of file p_Procs_Dynamic.cc.

◆ WARN_MSG

#define WARN_MSG   "Singular will work properly, but much slower."

Definition at line 32 of file p_Procs_Dynamic.cc.

Function Documentation

◆ GetDynamicProc()

static void* GetDynamicProc ( const char *  proc_s,
p_Proc  proc,
p_Field  field,
p_Length  length,
p_Ord  ord,
int  get_name = 0 
)
static

Definition at line 208 of file p_Procs_Dynamic.cc.

214 {
215  void* proc_ptr = NULL;
216  char proc_name[MAX_PROCNAME_LEN];
217  sprintf(proc_name, "%s__%s_%s_%s", proc_s,
218  p_FieldEnum_2_String(field),
220  p_OrdEnum_2_String(ord));
221  // printf("set %s\n",proc_name);
222  // first, try to get the proc from the kernel
223  proc_ptr = dynl_sym(DYNL_KERNEL_HANDLE, proc_name);
224  if (proc_ptr == NULL)
225  {
226  proc_ptr = dynl_sym_warn(p_ProcGetHandle(proc, field), proc_name, WARN_MSG);
227  // last but not least use general proc
228  if (proc_ptr == NULL)
229  {
230  proc_ptr = GetGeneralProc(proc);
231 #ifdef RDEBUG
232  sprintf(proc_name,"%s", GetGeneralProcName(proc));
233 #endif
234  }
235  }
236 #ifdef RDEBUG
237  if (get_name)
238  {
239  char* name = omStrDup(proc_name);
240 #if (!defined(SING_NDEBUG)) && (!defined(OM_NDEBUG))
242 #endif
243  return (void*) name;
244  }
245 #endif
246  return proc_ptr;
247 }
unsigned char * proc[NUM_PROC]
Definition: checklibs.c:16
char name(const Variable &v)
Definition: factory.h:196
void * dynl_sym(void *handle, const char *symbol)
Definition: mod_raw.cc:159
void * dynl_sym_warn(void *handle, const char *proc, const char *msg)
Definition: mod_raw.cc:89
#define DYNL_KERNEL_HANDLE
Definition: mod_raw.h:32
#define omStrDup(s)
Definition: omAllocDecl.h:263
void omMarkAsStaticAddr(void *addr)
#define NULL
Definition: omList.c:12
static void * p_ProcGetHandle(p_Proc proc, p_Field field)
static const char * GetGeneralProcName(p_Proc proc)
#define WARN_MSG
#define MAX_PROCNAME_LEN
static void * GetGeneralProc(p_Proc proc)
static const char * p_FieldEnum_2_String(p_Field field)
Definition: p_Procs_Impl.h:198
static const char * p_LengthEnum_2_String(p_Length length)
Definition: p_Procs_Impl.h:219
static const char * p_OrdEnum_2_String(p_Ord ord)
Definition: p_Procs_Impl.h:237

◆ GetGeneralProc()

static void* GetGeneralProc ( p_Proc  proc)
static

Definition at line 86 of file p_Procs_Dynamic.cc.

87 {
88  switch(proc)
89  {
90  case p_Copy_Proc:
91  return cast_A_to_vptr(p_Copy__FieldGeneral_LengthGeneral_OrdGeneral);
92  case p_Delete_Proc:
93  return cast_A_to_vptr(p_Delete__FieldGeneral_LengthGeneral_OrdGeneral);
95  return cast_A_to_vptr(p_ShallowCopyDelete__FieldGeneral_LengthGeneral_OrdGeneral);
96  case p_Add_q_Proc:
97  return cast_A_to_vptr(p_Add_q__FieldGeneral_LengthGeneral_OrdGeneral);
98  case p_Neg_Proc:
99  return cast_A_to_vptr(p_Neg__FieldGeneral_LengthGeneral_OrdGeneral);
100  case p_Merge_q_Proc:
101  return cast_A_to_vptr(p_Merge_q__FieldGeneral_LengthGeneral_OrdGeneral);
102  case p_kBucketSetLm_Proc:
103  return cast_A_to_vptr(p_kBucketSetLm__FieldGeneral_LengthGeneral_OrdGeneral);
104 #ifdef HAVE_RINGS
105  case p_Mult_nn_Proc:
106  return cast_A_to_vptr(p_Mult_nn__RingGeneral_LengthGeneral_OrdGeneral);
107  case pp_Mult_nn_Proc:
108  return cast_A_to_vptr(pp_Mult_nn__RingGeneral_LengthGeneral_OrdGeneral);
109  case pp_Mult_mm_Proc:
110  return cast_A_to_vptr(pp_Mult_mm__RingGeneral_LengthGeneral_OrdGeneral);
112  return cast_A_to_vptr(pp_Mult_mm_Noether__RingGeneral_LengthGeneral_OrdGeneral);
113  case p_Mult_mm_Proc:
114  return cast_A_to_vptr(p_Mult_mm__RingGeneral_LengthGeneral_OrdGeneral);
116  return cast_A_to_vptr(p_Minus_mm_Mult_qq__RingGeneral_LengthGeneral_OrdGeneral);
118  return cast_A_to_vptr(pp_Mult_Coeff_mm_DivSelect__RingGeneral_LengthGeneral_OrdGeneral);
120  return cast_A_to_vptr(pp_Mult_Coeff_mm_DivSelectMult__RingGeneral_LengthGeneral_OrdGeneral);
121 #else
122  case p_Mult_nn_Proc:
123  return cast_A_to_vptr(p_Mult_nn__FieldGeneral_LengthGeneral_OrdGeneral);
124  case pp_Mult_nn_Proc:
125  return cast_A_to_vptr(pp_Mult_nn__FieldGeneral_LengthGeneral_OrdGeneral);
126  case pp_Mult_mm_Proc:
127  return cast_A_to_vptr(pp_Mult_mm__FieldGeneral_LengthGeneral_OrdGeneral);
129  return cast_A_to_vptr(pp_Mult_mm_Noether__FieldGeneral_LengthGeneral_OrdGeneral);
130  case p_Mult_mm_Proc:
131  return cast_A_to_vptr(p_Mult_mm__FieldGeneral_LengthGeneral_OrdGeneral);
133  return cast_A_to_vptr(p_Minus_mm_Mult_qq__FieldGeneral_LengthGeneral_OrdGeneral);
135  return cast_A_to_vptr(pp_Mult_Coeff_mm_DivSelect__FieldGeneral_LengthGeneral_OrdGeneral);
137  return cast_A_to_vptr(pp_Mult_Coeff_mm_DivSelectMult__FieldGeneral_LengthGeneral_OrdGeneral);
138 #endif
139  case p_Unknown_Proc:
140  break;
141  }
142  dReportBug("p_Unknown_Proc");
143  return NULL;
144 }
void * cast_A_to_vptr(A a)
Definition: auxiliary.h:385
@ p_ShallowCopyDelete_Proc
Definition: p_Procs_Impl.h:182
@ p_Delete_Proc
Definition: p_Procs_Impl.h:181
@ p_kBucketSetLm_Proc
Definition: p_Procs_Impl.h:194
@ p_Neg_Proc
Definition: p_Procs_Impl.h:190
@ p_Mult_nn_Proc
Definition: p_Procs_Impl.h:183
@ p_Mult_mm_Proc
Definition: p_Procs_Impl.h:187
@ pp_Mult_nn_Proc
Definition: p_Procs_Impl.h:184
@ pp_Mult_Coeff_mm_DivSelect_Proc
Definition: p_Procs_Impl.h:191
@ p_Merge_q_Proc
Definition: p_Procs_Impl.h:193
@ p_Copy_Proc
Definition: p_Procs_Impl.h:180
@ p_Add_q_Proc
Definition: p_Procs_Impl.h:188
@ pp_Mult_mm_Proc
Definition: p_Procs_Impl.h:185
@ pp_Mult_Coeff_mm_DivSelectMult_Proc
Definition: p_Procs_Impl.h:192
@ p_Minus_mm_Mult_qq_Proc
Definition: p_Procs_Impl.h:189
@ pp_Mult_mm_Noether_Proc
Definition: p_Procs_Impl.h:186
@ p_Unknown_Proc
Definition: p_Procs_Impl.h:195
#define dReportBug(s)
Definition: reporter.h:113

◆ GetGeneralProcName()

static const char* GetGeneralProcName ( p_Proc  proc)
static

Definition at line 147 of file p_Procs_Dynamic.cc.

148 {
149  switch(proc)
150  {
151  case p_Copy_Proc:
152  return "p_Copy__FieldGeneral_LengthGeneral_OrdGeneral";
153  case p_Delete_Proc:
154  return "p_Delete__FieldGeneral_LengthGeneral_OrdGeneral";
156  return "p_ShallowCopyDelete__FieldGeneral_LengthGeneral_OrdGeneral";
157  case p_Add_q_Proc:
158  return "p_Add_q__FieldGeneral_LengthGeneral_OrdGeneral";
159  case p_Neg_Proc:
160  return "p_Neg__FieldGeneral_LengthGeneral_OrdGeneral";
161  case p_Merge_q_Proc:
162  return "p_Merge_q__FieldGeneral_LengthGeneral_OrdGeneral";
163  case p_kBucketSetLm_Proc:
164  return "p_kBucketSetLm__FieldGeneral_LengthGeneral_OrdGeneral";
165  case p_Unknown_Proc:
166  break;
167 #ifdef HAVE_RINGS
168  case p_Mult_nn_Proc:
169  return "p_Mult_nn__RingGeneral_LengthGeneral_OrdGeneral";
170  case pp_Mult_nn_Proc:
171  return "pp_Mult_nn__RingGeneral_LengthGeneral_OrdGeneral";
172  case pp_Mult_mm_Proc:
173  return "pp_Mult_mm__RingGeneral_LengthGeneral_OrdGeneral";
175  return "pp_Mult_mm_Noether__RingGeneral_LengthGeneral_OrdGeneral";
176  case p_Mult_mm_Proc:
177  return "p_Mult_mm__RingGeneral_LengthGeneral_OrdGeneral";
179  return "p_Minus_mm_Mult_qq__RingGeneral_LengthGeneral_OrdGeneral";
181  return "pp_Mult_Coeff_mm_DivSelect__RingGeneral_LengthGeneral_OrdGeneral";
183  return "pp_Mult_Coeff_mm_DivSelectMult__RingGeneral_LengthGeneral_OrdGeneral";
184 #else
185  case p_Mult_nn_Proc:
186  return "p_Mult_nn__FieldGeneral_LengthGeneral_OrdGeneral";
187  case pp_Mult_nn_Proc:
188  return "pp_Mult_nn__FieldGeneral_LengthGeneral_OrdGeneral";
189  case pp_Mult_mm_Proc:
190  return "pp_Mult_mm__FieldGeneral_LengthGeneral_OrdGeneral";
192  return "pp_Mult_mm_Noether__FieldGeneral_LengthGeneral_OrdGeneral";
193  case p_Mult_mm_Proc:
194  return "p_Mult_mm__FieldGeneral_LengthGeneral_OrdGeneral";
196  return "p_Minus_mm_Mult_qq__FieldGeneral_LengthGeneral_OrdGeneral";
198  return "pp_Mult_Coeff_mm_DivSelect__FieldGeneral_LengthGeneral_OrdGeneral";
200  return "pp_Mult_Coeff_mm_DivSelectMult__FieldGeneral_LengthGeneral_OrdGeneral";
201 #endif
202  }
203  return "p_Unknown_Proc";
204 }

◆ p_ProcGetHandle()

static void* p_ProcGetHandle ( p_Proc  proc,
p_Field  field 
)
inlinestatic

Definition at line 66 of file p_Procs_Dynamic.cc.

67 {
68  const char* module = p_ProcField_2_Module(proc, field);
69 
70  if (strcmp(module, "FieldIndep") == 0)
72  else if (strcmp(module, "FieldZp") == 0)
74  else if (strcmp(module, "FieldQ") == 0)
75  return p_ProcInitHandle(&p_procs_handle_FieldQ, module);
76  else if (strcmp(module, "FieldGeneral") == 0)
78  else
79  {
80  assume(0);
81  return NULL;
82  }
83 }
#define assume(x)
Definition: mod2.h:387
void * p_procs_handle_FieldZp
void * p_procs_handle_FieldQ
void * p_procs_handle_FieldGeneral
void * p_procs_handle_FieldIndep
static void * p_ProcInitHandle(void **handle, const char *module)
static const char * p_ProcField_2_Module(p_Proc proc, p_Field field)
Definition: p_Procs_Impl.h:331

◆ p_ProcInitHandle()

static void* p_ProcInitHandle ( void **  handle,
const char *  module 
)
static

Definition at line 55 of file p_Procs_Dynamic.cc.

56 {
57  if (*handle == NULL)
58  {
59  char name[25];
60  sprintf(name, "p_Procs_%s", module);
62  }
63  return *handle;
64 }
void * dynl_open_binary_warn(const char *binary_name, const char *msg)
Definition: mod_raw.cc:45

Variable Documentation

◆ p_procs_dynamic

const BOOLEAN p_procs_dynamic = TRUE

Definition at line 30 of file p_Procs_Dynamic.cc.

◆ p_procs_handle_FieldGeneral

void* p_procs_handle_FieldGeneral = NULL

Definition at line 53 of file p_Procs_Dynamic.cc.

◆ p_procs_handle_FieldIndep

void* p_procs_handle_FieldIndep = NULL

Definition at line 50 of file p_Procs_Dynamic.cc.

◆ p_procs_handle_FieldQ

void* p_procs_handle_FieldQ = NULL

Definition at line 52 of file p_Procs_Dynamic.cc.

◆ p_procs_handle_FieldZp

void* p_procs_handle_FieldZp = NULL

Definition at line 51 of file p_Procs_Dynamic.cc.