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 <omalloc/omalloc.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
 
static void * p_procs_handle_FieldIndep = NULL
 
static void * p_procs_handle_FieldZp = NULL
 
static void * p_procs_handle_FieldQ = NULL
 
static 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 p_Procs_s * _p_procs
Definition: p_Procs_Set.h:113

Definition at line 253 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 int set_names
Definition: p_Procs_Set.h:117

Definition at line 258 of file p_Procs_Dynamic.cc.

§ LINKAGE

#define LINKAGE   extern "C"

Definition at line 37 of file p_Procs_Dynamic.cc.

§ MAX_PROCNAME_LEN

#define MAX_PROCNAME_LEN   200

Definition at line 49 of file p_Procs_Dynamic.cc.

§ p_Procs_Kernel

#define p_Procs_Kernel

Definition at line 38 of file p_Procs_Dynamic.cc.

§ WARN_MSG

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

Definition at line 33 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 211 of file p_Procs_Dynamic.cc.

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

§ GetGeneralProc()

static void* GetGeneralProc ( p_Proc  proc)
static

Definition at line 87 of file p_Procs_Dynamic.cc.

88 {
89  switch(proc)
90  {
91  case p_Copy_Proc:
92  return cast_A_to_vptr(p_Copy__FieldGeneral_LengthGeneral_OrdGeneral);
93  case p_Delete_Proc:
94  return cast_A_to_vptr(p_Delete__FieldGeneral_LengthGeneral_OrdGeneral);
96  return cast_A_to_vptr(p_ShallowCopyDelete__FieldGeneral_LengthGeneral_OrdGeneral);
97  case p_Add_q_Proc:
98  return cast_A_to_vptr(p_Add_q__FieldGeneral_LengthGeneral_OrdGeneral);
99  case p_Neg_Proc:
100  return cast_A_to_vptr(p_Neg__FieldGeneral_LengthGeneral_OrdGeneral);
101  case p_Merge_q_Proc:
102  return cast_A_to_vptr(p_Merge_q__FieldGeneral_LengthGeneral_OrdGeneral);
103  case p_kBucketSetLm_Proc:
104  return cast_A_to_vptr(p_kBucketSetLm__FieldGeneral_LengthGeneral_OrdGeneral);
105 #ifdef HAVE_RINGS
106  case p_Mult_nn_Proc:
107  return cast_A_to_vptr(p_Mult_nn__RingGeneral_LengthGeneral_OrdGeneral);
108  case pp_Mult_nn_Proc:
109  return cast_A_to_vptr(pp_Mult_nn__RingGeneral_LengthGeneral_OrdGeneral);
110  case pp_Mult_mm_Proc:
111  return cast_A_to_vptr(pp_Mult_mm__RingGeneral_LengthGeneral_OrdGeneral);
113  return cast_A_to_vptr(pp_Mult_mm_Noether__RingGeneral_LengthGeneral_OrdGeneral);
114  case p_Mult_mm_Proc:
115  return cast_A_to_vptr(p_Mult_mm__RingGeneral_LengthGeneral_OrdGeneral);
117  return cast_A_to_vptr(p_Minus_mm_Mult_qq__RingGeneral_LengthGeneral_OrdGeneral);
119  return cast_A_to_vptr(pp_Mult_Coeff_mm_DivSelect__RingGeneral_LengthGeneral_OrdGeneral);
121  return cast_A_to_vptr(pp_Mult_Coeff_mm_DivSelectMult__RingGeneral_LengthGeneral_OrdGeneral);
122 #else
123  case p_Mult_nn_Proc:
124  return cast_A_to_vptr(p_Mult_nn__FieldGeneral_LengthGeneral_OrdGeneral);
125  case pp_Mult_nn_Proc:
126  return cast_A_to_vptr(pp_Mult_nn__FieldGeneral_LengthGeneral_OrdGeneral);
127  case pp_Mult_mm_Proc:
128  return cast_A_to_vptr(pp_Mult_mm__FieldGeneral_LengthGeneral_OrdGeneral);
130  return cast_A_to_vptr(pp_Mult_mm_Noether__FieldGeneral_LengthGeneral_OrdGeneral);
131  case p_Mult_mm_Proc:
132  return cast_A_to_vptr(p_Mult_mm__FieldGeneral_LengthGeneral_OrdGeneral);
134  return cast_A_to_vptr(p_Minus_mm_Mult_qq__FieldGeneral_LengthGeneral_OrdGeneral);
136  return cast_A_to_vptr(pp_Mult_Coeff_mm_DivSelect__FieldGeneral_LengthGeneral_OrdGeneral);
138  return cast_A_to_vptr(pp_Mult_Coeff_mm_DivSelectMult__FieldGeneral_LengthGeneral_OrdGeneral);
139 #endif
140  case p_Unknown_Proc:
141  break;
142  }
143  dReportBug("p_Unknown_Proc");
144  return NULL;
145 }
#define dReportBug(s)
Definition: reporter.h:112
#define NULL
Definition: omList.c:10
void * cast_A_to_vptr(A a)
Definition: auxiliary.h:384

§ GetGeneralProcName()

static const char* GetGeneralProcName ( p_Proc  proc)
static

Definition at line 150 of file p_Procs_Dynamic.cc.

151 {
152  switch(proc)
153  {
154  case p_Copy_Proc:
155  return "p_Copy__FieldGeneral_LengthGeneral_OrdGeneral";
156  case p_Delete_Proc:
157  return "p_Delete__FieldGeneral_LengthGeneral_OrdGeneral";
159  return "p_ShallowCopyDelete__FieldGeneral_LengthGeneral_OrdGeneral";
160  case p_Add_q_Proc:
161  return "p_Add_q__FieldGeneral_LengthGeneral_OrdGeneral";
162  case p_Neg_Proc:
163  return "p_Neg__FieldGeneral_LengthGeneral_OrdGeneral";
164  case p_Merge_q_Proc:
165  return "p_Merge_q__FieldGeneral_LengthGeneral_OrdGeneral";
166  case p_kBucketSetLm_Proc:
167  return "p_kBucketSetLm__FieldGeneral_LengthGeneral_OrdGeneral";
168  case p_Unknown_Proc:
169  break;
170 #ifdef HAVE_RINGS
171  case p_Mult_nn_Proc:
172  return "p_Mult_nn__RingGeneral_LengthGeneral_OrdGeneral";
173  case pp_Mult_nn_Proc:
174  return "pp_Mult_nn__RingGeneral_LengthGeneral_OrdGeneral";
175  case pp_Mult_mm_Proc:
176  return "pp_Mult_mm__RingGeneral_LengthGeneral_OrdGeneral";
178  return "pp_Mult_mm_Noether__RingGeneral_LengthGeneral_OrdGeneral";
179  case p_Mult_mm_Proc:
180  return "p_Mult_mm__RingGeneral_LengthGeneral_OrdGeneral";
182  return "p_Minus_mm_Mult_qq__RingGeneral_LengthGeneral_OrdGeneral";
184  return "pp_Mult_Coeff_mm_DivSelect__RingGeneral_LengthGeneral_OrdGeneral";
186  return "pp_Mult_Coeff_mm_DivSelectMult__RingGeneral_LengthGeneral_OrdGeneral";
187 #else
188  case p_Mult_nn_Proc:
189  return "p_Mult_nn__FieldGeneral_LengthGeneral_OrdGeneral";
190  case pp_Mult_nn_Proc:
191  return "pp_Mult_nn__FieldGeneral_LengthGeneral_OrdGeneral";
192  case pp_Mult_mm_Proc:
193  return "pp_Mult_mm__FieldGeneral_LengthGeneral_OrdGeneral";
195  return "pp_Mult_mm_Noether__FieldGeneral_LengthGeneral_OrdGeneral";
196  case p_Mult_mm_Proc:
197  return "p_Mult_mm__FieldGeneral_LengthGeneral_OrdGeneral";
199  return "p_Minus_mm_Mult_qq__FieldGeneral_LengthGeneral_OrdGeneral";
201  return "pp_Mult_Coeff_mm_DivSelect__FieldGeneral_LengthGeneral_OrdGeneral";
203  return "pp_Mult_Coeff_mm_DivSelectMult__FieldGeneral_LengthGeneral_OrdGeneral";
204 #endif
205  }
206  return "p_Unknown_Proc";
207 }

§ p_ProcGetHandle()

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

Definition at line 67 of file p_Procs_Dynamic.cc.

68 {
69  const char* module = p_ProcField_2_Module(proc, field);
70 
71  if (strcmp(module, "FieldIndep") == 0)
73  else if (strcmp(module, "FieldZp") == 0)
75  else if (strcmp(module, "FieldQ") == 0)
76  return p_ProcInitHandle(&p_procs_handle_FieldQ, module);
77  else if (strcmp(module, "FieldGeneral") == 0)
79  else
80  {
81  assume(0);
82  return NULL;
83  }
84 }
static void * p_ProcInitHandle(void **handle, const char *module)
static void * p_procs_handle_FieldIndep
static void * p_procs_handle_FieldGeneral
#define assume(x)
Definition: mod2.h:394
static void * p_procs_handle_FieldZp
static void * p_procs_handle_FieldQ
#define NULL
Definition: omList.c:10
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 56 of file p_Procs_Dynamic.cc.

57 {
58  if (*handle == NULL)
59  {
60  char name[25];
61  sprintf(name, "p_Procs_%s", module);
62  *handle = dynl_open_binary_warn(name, WARN_MSG);
63  }
64  return *handle;
65 }
void * dynl_open_binary_warn(const char *binary_name, const char *msg)
Definition: mod_raw.cc:56
#define WARN_MSG
char name(const Variable &v)
Definition: factory.h:178
#define NULL
Definition: omList.c:10

Variable Documentation

§ p_procs_dynamic

const BOOLEAN p_procs_dynamic = TRUE

Definition at line 31 of file p_Procs_Dynamic.cc.

§ p_procs_handle_FieldGeneral

void* p_procs_handle_FieldGeneral = NULL
static

Definition at line 54 of file p_Procs_Dynamic.cc.

§ p_procs_handle_FieldIndep

void* p_procs_handle_FieldIndep = NULL
static

Definition at line 51 of file p_Procs_Dynamic.cc.

§ p_procs_handle_FieldQ

void* p_procs_handle_FieldQ = NULL
static

Definition at line 53 of file p_Procs_Dynamic.cc.

§ p_procs_handle_FieldZp

void* p_procs_handle_FieldZp = NULL
static

Definition at line 52 of file p_Procs_Dynamic.cc.