Loading...
Searching...
No Matches
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))
cast_vptr_to_A
A cast_vptr_to_A(void *p)
Definition auxiliary.h:393
length
static BOOLEAN length(leftv result, leftv arg)
Definition interval.cc:257
GetDynamicProc
static void * GetDynamicProc(const char *proc_s, p_Proc proc, p_Field field, p_Length length, p_Ord ord, int get_name=0)
Definition p_Procs_Dynamic.cc:208
_p_procs
STATIC_VAR p_Procs_s * _p_procs
Definition p_Procs_Set.h:116

Definition at line 250 of file p_Procs_Dynamic.cc.

#define DoReallySetProc(what, field, length, ord) \
_p_procs->what = cast_vptr_to_A<what##_Proc_Ptr>( \
GetDynamicProc(#what, what##_Proc, field, length, ord))

## 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)); \
else \
DoReallySetProc(what, field, length, ord); \
} \
while(0)
set_names
STATIC_VAR int set_names
Definition p_Procs_Set.h:120

Definition at line 255 of file p_Procs_Dynamic.cc.

#define DoSetProc(what, field, length, ord) \
do \
{ \
if (set_names) \
_p_procs->what = cast_vptr_to_A<what##_Proc_Ptr>( \
GetDynamicProc(#what, what##_Proc, field, length, ord, 1)); \
else \
DoReallySetProc(what, field, length, ord); \
} \
while(0)

## 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()

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.

{
void* proc_ptr = NULL;
char proc_name[MAX_PROCNAME_LEN];
snprintf(proc_name,MAX_PROCNAME_LEN, "%s__%s_%s_%s", proc_s,
p_FieldEnum_2_String(field),
p_LengthEnum_2_String(length),
p_OrdEnum_2_String(ord));
// printf("set %s\n",proc_name);
// first, try to get the proc from the kernel
proc_ptr = dynl_sym(DYNL_KERNEL_HANDLE, proc_name);
if (proc_ptr == NULL)
{
proc_ptr = dynl_sym_warn(p_ProcGetHandle(proc, field), proc_name, WARN_MSG);
// last but not least use general proc
if (proc_ptr == NULL)
{
proc_ptr = GetGeneralProc(proc);
#ifdef RDEBUG
snprintf(proc_name,MAX_PROCNAME_LEN,"%s", GetGeneralProcName(proc));
#endif
}
}
#ifdef RDEBUG
if (get_name)
{
char* name = omStrDup(proc_name);
#if (!defined(SING_NDEBUG)) && (!defined(OM_NDEBUG))
omMarkAsStaticAddr(name);
#endif
return (void*) name;
}
#endif
return proc_ptr;
}
proc
unsigned char * proc[NUM_PROC]
Definition checklibs.c:16
name
char name(const Variable &v)
Definition factory.h:189
dynl_sym_warn
void * dynl_sym_warn(void *handle, const char *proc, const char *msg)
Definition mod_raw.cc:89
dynl_sym
void * dynl_sym(void *handle, const char *symbol)
Definition mod_raw.cc:159
DYNL_KERNEL_HANDLE
#define DYNL_KERNEL_HANDLE
Definition mod_raw.h:32
omStrDup
#define omStrDup(s)
Definition omAllocDecl.h:263
NULL
#define NULL
Definition omList.c:12
GetGeneralProcName
static const char * GetGeneralProcName(p_Proc proc)
Definition p_Procs_Dynamic.cc:147
GetGeneralProc
static void * GetGeneralProc(p_Proc proc)
Definition p_Procs_Dynamic.cc:86
p_ProcGetHandle
static void * p_ProcGetHandle(p_Proc proc, p_Field field)
Definition p_Procs_Dynamic.cc:66
WARN_MSG
#define WARN_MSG
Definition p_Procs_Dynamic.cc:32
MAX_PROCNAME_LEN
#define MAX_PROCNAME_LEN
Definition p_Procs_Dynamic.cc:48
p_FieldEnum_2_String
static const char * p_FieldEnum_2_String(p_Field field)
Definition p_Procs_Impl.h:198
p_OrdEnum_2_String
static const char * p_OrdEnum_2_String(p_Ord ord)
Definition p_Procs_Impl.h:237
p_LengthEnum_2_String
static const char * p_LengthEnum_2_String(p_Length length)
Definition p_Procs_Impl.h:219
omMarkAsStaticAddr
#define omMarkAsStaticAddr(A)
Definition xalloc.h:245

## GetGeneralProc()

void * GetGeneralProc | ( | p_Proc | proc | ) |

static

Definition at line 86 of file p_Procs_Dynamic.cc.

{
switch(proc)
{
case p_Copy_Proc:
return cast_A_to_vptr(p_Copy__FieldGeneral_LengthGeneral_OrdGeneral);
case p_Delete_Proc:
return cast_A_to_vptr(p_Delete__FieldGeneral_LengthGeneral_OrdGeneral);
case p_ShallowCopyDelete_Proc:
return cast_A_to_vptr(p_ShallowCopyDelete__FieldGeneral_LengthGeneral_OrdGeneral);
case p_Add_q_Proc:
return cast_A_to_vptr(p_Add_q__FieldGeneral_LengthGeneral_OrdGeneral);
case p_Neg_Proc:
return cast_A_to_vptr(p_Neg__FieldGeneral_LengthGeneral_OrdGeneral);
case p_Merge_q_Proc:
return cast_A_to_vptr(p_Merge_q__FieldGeneral_LengthGeneral_OrdGeneral);
case p_kBucketSetLm_Proc:
return cast_A_to_vptr(p_kBucketSetLm__FieldGeneral_LengthGeneral_OrdGeneral);
#ifdef HAVE_RINGS
case p_Mult_nn_Proc:
return cast_A_to_vptr(p_Mult_nn__RingGeneral_LengthGeneral_OrdGeneral);
case pp_Mult_nn_Proc:
return cast_A_to_vptr(pp_Mult_nn__RingGeneral_LengthGeneral_OrdGeneral);
case pp_Mult_mm_Proc:
return cast_A_to_vptr(pp_Mult_mm__RingGeneral_LengthGeneral_OrdGeneral);
case pp_Mult_mm_Noether_Proc:
return cast_A_to_vptr(pp_Mult_mm_Noether__RingGeneral_LengthGeneral_OrdGeneral);
case p_Mult_mm_Proc:
return cast_A_to_vptr(p_Mult_mm__RingGeneral_LengthGeneral_OrdGeneral);
case p_Minus_mm_Mult_qq_Proc:
return cast_A_to_vptr(p_Minus_mm_Mult_qq__RingGeneral_LengthGeneral_OrdGeneral);
case pp_Mult_Coeff_mm_DivSelect_Proc:
return cast_A_to_vptr(pp_Mult_Coeff_mm_DivSelect__RingGeneral_LengthGeneral_OrdGeneral);
case pp_Mult_Coeff_mm_DivSelectMult_Proc:
return cast_A_to_vptr(pp_Mult_Coeff_mm_DivSelectMult__RingGeneral_LengthGeneral_OrdGeneral);
#else
case p_Mult_nn_Proc:
return cast_A_to_vptr(p_Mult_nn__FieldGeneral_LengthGeneral_OrdGeneral);
case pp_Mult_nn_Proc:
return cast_A_to_vptr(pp_Mult_nn__FieldGeneral_LengthGeneral_OrdGeneral);
case pp_Mult_mm_Proc:
return cast_A_to_vptr(pp_Mult_mm__FieldGeneral_LengthGeneral_OrdGeneral);
case pp_Mult_mm_Noether_Proc:
return cast_A_to_vptr(pp_Mult_mm_Noether__FieldGeneral_LengthGeneral_OrdGeneral);
case p_Mult_mm_Proc:
return cast_A_to_vptr(p_Mult_mm__FieldGeneral_LengthGeneral_OrdGeneral);
case p_Minus_mm_Mult_qq_Proc:
return cast_A_to_vptr(p_Minus_mm_Mult_qq__FieldGeneral_LengthGeneral_OrdGeneral);
case pp_Mult_Coeff_mm_DivSelect_Proc:
return cast_A_to_vptr(pp_Mult_Coeff_mm_DivSelect__FieldGeneral_LengthGeneral_OrdGeneral);
case pp_Mult_Coeff_mm_DivSelectMult_Proc:
return cast_A_to_vptr(pp_Mult_Coeff_mm_DivSelectMult__FieldGeneral_LengthGeneral_OrdGeneral);
#endif
case p_Unknown_Proc:
break;
}
dReportBug("p_Unknown_Proc");
return NULL;
}
cast_A_to_vptr
void * cast_A_to_vptr(A a)
Definition auxiliary.h:386
p_ShallowCopyDelete_Proc
@ p_ShallowCopyDelete_Proc
Definition p_Procs_Impl.h:182
p_Delete_Proc
@ p_Delete_Proc
Definition p_Procs_Impl.h:181
p_kBucketSetLm_Proc
@ p_kBucketSetLm_Proc
Definition p_Procs_Impl.h:194
p_Neg_Proc
@ p_Neg_Proc
Definition p_Procs_Impl.h:190
p_Mult_nn_Proc
@ p_Mult_nn_Proc
Definition p_Procs_Impl.h:183
p_Mult_mm_Proc
@ p_Mult_mm_Proc
Definition p_Procs_Impl.h:187
pp_Mult_nn_Proc
@ pp_Mult_nn_Proc
Definition p_Procs_Impl.h:184
pp_Mult_Coeff_mm_DivSelect_Proc
@ pp_Mult_Coeff_mm_DivSelect_Proc
Definition p_Procs_Impl.h:191
p_Merge_q_Proc
@ p_Merge_q_Proc
Definition p_Procs_Impl.h:193
p_Copy_Proc
@ p_Copy_Proc
Definition p_Procs_Impl.h:180
p_Add_q_Proc
@ p_Add_q_Proc
Definition p_Procs_Impl.h:188
pp_Mult_mm_Proc
@ pp_Mult_mm_Proc
Definition p_Procs_Impl.h:185
pp_Mult_Coeff_mm_DivSelectMult_Proc
@ pp_Mult_Coeff_mm_DivSelectMult_Proc
Definition p_Procs_Impl.h:192
p_Minus_mm_Mult_qq_Proc
@ p_Minus_mm_Mult_qq_Proc
Definition p_Procs_Impl.h:189
pp_Mult_mm_Noether_Proc
@ pp_Mult_mm_Noether_Proc
Definition p_Procs_Impl.h:186
p_Unknown_Proc
@ p_Unknown_Proc
Definition p_Procs_Impl.h:195
dReportBug
#define dReportBug(s)
Definition reporter.h:113

## GetGeneralProcName()

const char * GetGeneralProcName | ( | p_Proc | proc | ) |

static

Definition at line 147 of file p_Procs_Dynamic.cc.

{
switch(proc)
{
case p_Copy_Proc:
return "p_Copy__FieldGeneral_LengthGeneral_OrdGeneral";
case p_Delete_Proc:
return "p_Delete__FieldGeneral_LengthGeneral_OrdGeneral";
case p_ShallowCopyDelete_Proc:
return "p_ShallowCopyDelete__FieldGeneral_LengthGeneral_OrdGeneral";
case p_Add_q_Proc:
return "p_Add_q__FieldGeneral_LengthGeneral_OrdGeneral";
case p_Neg_Proc:
return "p_Neg__FieldGeneral_LengthGeneral_OrdGeneral";
case p_Merge_q_Proc:
return "p_Merge_q__FieldGeneral_LengthGeneral_OrdGeneral";
case p_kBucketSetLm_Proc:
return "p_kBucketSetLm__FieldGeneral_LengthGeneral_OrdGeneral";
case p_Unknown_Proc:
break;
#ifdef HAVE_RINGS
case p_Mult_nn_Proc:
return "p_Mult_nn__RingGeneral_LengthGeneral_OrdGeneral";
case pp_Mult_nn_Proc:
return "pp_Mult_nn__RingGeneral_LengthGeneral_OrdGeneral";
case pp_Mult_mm_Proc:
return "pp_Mult_mm__RingGeneral_LengthGeneral_OrdGeneral";
case pp_Mult_mm_Noether_Proc:
return "pp_Mult_mm_Noether__RingGeneral_LengthGeneral_OrdGeneral";
case p_Mult_mm_Proc:
return "p_Mult_mm__RingGeneral_LengthGeneral_OrdGeneral";
case p_Minus_mm_Mult_qq_Proc:
return "p_Minus_mm_Mult_qq__RingGeneral_LengthGeneral_OrdGeneral";
case pp_Mult_Coeff_mm_DivSelect_Proc:
return "pp_Mult_Coeff_mm_DivSelect__RingGeneral_LengthGeneral_OrdGeneral";
case pp_Mult_Coeff_mm_DivSelectMult_Proc:
return "pp_Mult_Coeff_mm_DivSelectMult__RingGeneral_LengthGeneral_OrdGeneral";
#else
case p_Mult_nn_Proc:
return "p_Mult_nn__FieldGeneral_LengthGeneral_OrdGeneral";
case pp_Mult_nn_Proc:
return "pp_Mult_nn__FieldGeneral_LengthGeneral_OrdGeneral";
case pp_Mult_mm_Proc:
return "pp_Mult_mm__FieldGeneral_LengthGeneral_OrdGeneral";
case pp_Mult_mm_Noether_Proc:
return "pp_Mult_mm_Noether__FieldGeneral_LengthGeneral_OrdGeneral";
case p_Mult_mm_Proc:
return "p_Mult_mm__FieldGeneral_LengthGeneral_OrdGeneral";
case p_Minus_mm_Mult_qq_Proc:
return "p_Minus_mm_Mult_qq__FieldGeneral_LengthGeneral_OrdGeneral";
case pp_Mult_Coeff_mm_DivSelect_Proc:
return "pp_Mult_Coeff_mm_DivSelect__FieldGeneral_LengthGeneral_OrdGeneral";
case pp_Mult_Coeff_mm_DivSelectMult_Proc:
return "pp_Mult_Coeff_mm_DivSelectMult__FieldGeneral_LengthGeneral_OrdGeneral";
#endif
}
return "p_Unknown_Proc";
}

## p_ProcGetHandle()

void * p_ProcGetHandle | ( | p_Proc | proc,
|  | p_Field | field )

inline static

Definition at line 66 of file p_Procs_Dynamic.cc.

{
const char* module = p_ProcField_2_Module(proc, field);
if (strcmp(module, "FieldIndep") == 0)
return p_ProcInitHandle(&p_procs_handle_FieldIndep, module);
else if (strcmp(module, "FieldZp") == 0)
return p_ProcInitHandle(&p_procs_handle_FieldZp, module);
else if (strcmp(module, "FieldQ") == 0)
return p_ProcInitHandle(&p_procs_handle_FieldQ, module);
else if (strcmp(module, "FieldGeneral") == 0)
return p_ProcInitHandle(&p_procs_handle_FieldGeneral, module);
else
{
assume(0);
return NULL;
}
}
assume
#define assume(x)
Definition mod2.h:389
p_procs_handle_FieldZp
void * p_procs_handle_FieldZp
Definition p_Procs_Dynamic.cc:51
p_procs_handle_FieldQ
void * p_procs_handle_FieldQ
Definition p_Procs_Dynamic.cc:52
p_ProcInitHandle
static void * p_ProcInitHandle(void **handle, const char *module)
Definition p_Procs_Dynamic.cc:55
p_procs_handle_FieldGeneral
void * p_procs_handle_FieldGeneral
Definition p_Procs_Dynamic.cc:53
p_procs_handle_FieldIndep
void * p_procs_handle_FieldIndep
Definition p_Procs_Dynamic.cc:50
p_ProcField_2_Module
static const char * p_ProcField_2_Module(p_Proc proc, p_Field field)
Definition p_Procs_Impl.h:331

## p_ProcInitHandle()

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

static

Definition at line 55 of file p_Procs_Dynamic.cc.

{
if (*handle == NULL)
{
char name[25];
snprintf(name,25, "p_Procs_%s", module);
*handle = dynl_open_binary_warn(name, WARN_MSG);
}
return *handle;
}
dynl_open_binary_warn
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.