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