00001 
#ifndef _PROCSCRIPT_PARSER_FUNCTABLE_H_
00002 
#define _PROCSCRIPT_PARSER_FUNCTABLE_H_
00003 
00004 
union FunctionPointer
00005 {
00006         
Segment (*a_fnctptr_a_m_s_d_s) ( 
Segment , 
Map2D , 
char* , 
double , 
char* );
00007 
00008         double (*d_fnctptr_a) ( 
Segment );
00009 
00010         double (*d_fnctptr_a_s) ( 
Segment , 
char* );
00011 
00012         double (*d_fnctptr_d) ( 
double );
00013 
00014         double (*d_fnctptr_d_d) ( 
double , 
double );
00015 
00016         double (*d_fnctptr_d_d_d_d) ( 
double , 
double , 
double , 
double );
00017 
00018         double (*d_fnctptr_d_s) ( 
double , 
char* );
00019 
00020         double (*d_fnctptr_g) ( 
PeakGroup );
00021 
00022         double (*d_fnctptr_g_s_d) ( 
PeakGroup , 
char* , 
double );
00023 
00024         double (*d_fnctptr_m) ( 
Map2D );
00025 
00026         double (*d_fnctptr_m_d) ( 
Map2D , 
double );
00027 
00028         double (*d_fnctptr_m_d_d) ( 
Map2D , 
double , 
double );
00029 
00030         double (*d_fnctptr_m_d_d_d_d_s) ( 
Map2D , 
double , 
double , 
double , 
double , 
char* );
00031 
00032         double (*d_fnctptr_m_s) ( 
Map2D , 
char* );
00033 
00034         double (*d_fnctptr_r) ( VariantArray );
00035 
00036         double (*d_fnctptr_r_d) ( VariantArray , 
double );
00037 
00038         double (*d_fnctptr_r_d_d) ( VariantArray , 
double , 
double );
00039 
00040         double (*d_fnctptr_r_m_s) ( VariantArray , 
Map2D , 
char* );
00041 
00042         double (*d_fnctptr_r_s) ( VariantArray , 
char* );
00043 
00044         double (*d_fnctptr_s) ( 
char* );
00045 
00046         double (*d_fnctptr_s_m_s_d) ( 
char* , 
Map2D , 
char* , 
double );
00047 
00048         double (*d_fnctptr_s_s) ( 
char* , 
char* );
00049 
00050         double (*d_fnctptr_s_s_d_d_d_d) ( 
char* , 
char* , 
double , 
double , 
double , 
double );
00051 
00052         double (*d_fnctptr_s_s_s_d_d) ( 
char* , 
char* , 
char* , 
double , 
double );
00053 
00054         double (*d_fnctptr_s_s_s_s) ( 
char* , 
char* , 
char* , 
char* );
00055 
00056         double (*d_fnctptr_v) ( 
void );
00057 
00058         
PeakGroup (*g_fnctptr_g) ( 
PeakGroup );
00059 
00060         
PeakGroup (*g_fnctptr_g_m_r_s) ( 
PeakGroup , 
Map2D , VariantArray , 
char* );
00061 
00062         
PeakGroup (*g_fnctptr_g_m_r_s_d_s_d_d) ( 
PeakGroup , 
Map2D , VariantArray , 
char* , 
double , 
char* , 
double , 
double );
00063 
00064         
PeakGroup (*g_fnctptr_r) ( VariantArray );
00065 
00066         SegmentHandler (*h_fnctptr_h_g) ( SegmentHandler , 
PeakGroup );
00067 
00068         SegmentHandler (*h_fnctptr_s) ( 
char* );
00069 
00070         
Map2D (*m_fnctptr_a_m_m) ( 
Segment , 
Map2D , 
Map2D );
00071 
00072         
Map2D (*m_fnctptr_g_m_m) ( 
PeakGroup , 
Map2D , 
Map2D );
00073 
00074         
Map2D (*m_fnctptr_h_g) ( SegmentHandler , 
PeakGroup );
00075 
00076         
Map2D (*m_fnctptr_m) ( 
Map2D );
00077 
00078         
Map2D (*m_fnctptr_m_d) ( 
Map2D , 
double );
00079 
00080         
Map2D (*m_fnctptr_m_m_a) ( 
Map2D , 
Map2D , 
Segment );
00081 
00082         
Map2D (*m_fnctptr_m_m_m_m) ( 
Map2D , 
Map2D , 
Map2D , 
Map2D );
00083 
00084         
Map2D (*m_fnctptr_m_s) ( 
Map2D , 
char* );
00085 
00086         
Map2D (*m_fnctptr_m_s_d) ( 
Map2D , 
char* , 
double );
00087 
00088         
Map2D (*m_fnctptr_r_m) ( VariantArray , 
Map2D );
00089 
00090         
Map2D (*m_fnctptr_s) ( 
char* );
00091 
00092         VariantArray (*r_fnctptr_a) ( 
Segment );
00093 
00094         VariantArray (*r_fnctptr_d_d) ( 
double , 
double );
00095 
00096         VariantArray (*r_fnctptr_d_d_d_d) ( 
double , 
double , 
double , 
double );
00097 
00098         VariantArray (*r_fnctptr_g) ( 
PeakGroup );
00099 
00100         VariantArray (*r_fnctptr_g_s) ( 
PeakGroup , 
char* );
00101 
00102         VariantArray (*r_fnctptr_h_g) ( SegmentHandler , 
PeakGroup );
00103 
00104         VariantArray (*r_fnctptr_m) ( 
Map2D );
00105 
00106         VariantArray (*r_fnctptr_m_r_d_d) ( 
Map2D , VariantArray , 
double , 
double );
00107 
00108         VariantArray (*r_fnctptr_m_s_d) ( 
Map2D , 
char* , 
double );
00109 
00110         VariantArray (*r_fnctptr_r) ( VariantArray );
00111 
00112         VariantArray (*r_fnctptr_r_g) ( VariantArray , 
PeakGroup );
00113 
00114         VariantArray (*r_fnctptr_s) ( 
char* );
00115 
00116         VariantArray (*r_fnctptr_s_s_s) ( 
char* , 
char* , 
char* );
00117 
00118         
char* (*s_fnctptr_d_d) ( 
double , 
double );
00119 
00120         
char* (*s_fnctptr_s) ( 
char* );
00121 
00122 };
00123 
00124 
typedef union FunctionPointer FunctionPointer;
00125 
00126 
struct MQFunction
00127 {
00128         PrimExp                 args[10];
00129         PrimExp                 rval;
00130         
int                             nargs;
00131         
union FunctionPointer   pfunc;
00132         
char*                   ftype;
00133 };
00134 
00135 
typedef struct MQFunction MQFunction;
00136 
00137 
struct FunctionTable
00138 {
00139   
char                   *fname;
00140   
union FunctionPointer pfunc;
00141   
char                   *ftype;
00142 };
00143 
00144 
typedef struct FunctionTable FunctionTable;
00145 
00146 FunctionTable*  FunctionTable_createArray(
int size);
00147 
void                    FunctionTable_init();
00148 
00149 Variant                 CallFunction(MQFunction F, MQFunction P);
00150 
00151 
extern MQFunction*              paramstack;
00152 
extern FunctionTable    arith_fncts[];
00153 
00154 
#endif
00155