' Offsets into func table array
Private Const FUNC_TABLE_FUNCNAME = 0 As Int 'ignore
Private Const FUNC_TABLE_PCODE = 1 As Int 'ignore
Private Const FUNC_TABLE_ARGCOUNT = 2 As Int 'ignore
'*--------------------------------------------------------- LoadFuncTable
'*
Private Sub LoadFuncTable
Private nTableIndex As Int
' Table entry format
' ------------------
' Array( "func", pcode, argcount )
' Internal func table
aFuncTable = Array( "abs", PCODE.FUNC_ABS, 1, _
"iif", PCODE.FUNC_IIF, 3, _
"if", PCODE.FUNC_IIF, 3, _
"max", PCODE.FUNC_MAX, 2, _
"min", PCODE.FUNC_MIN, 2, _
"sqrt", PCODE.FUNC_SQRT, 1, _
"power", PCODE.FUNC_POWER, 2, _
"round", PCODE.FUNC_ROUND, 1, _
"floor", PCODE.FUNC_FLOOR, 1, _
"ceil", PCODE.FUNC_CEIL, 1, _
"cos", PCODE.FUNC_COS, 1, _
"cosd", PCODE.FUNC_COSD, 1, _
"sin", PCODE.FUNC_SIN, 1, _
"sind", PCODE.FUNC_SIND, 1, _
"tan", PCODE.FUNC_TAN, 1, _
"tand", PCODE.FUNC_TAND, 1, _
"acos", PCODE.FUNC_ACOS, 1, _
"acosd", PCODE.FUNC_ACOSD, 1, _
"asin", PCODE.FUNC_ASIN, 1, _
"asind", PCODE.FUNC_ASIND, 1, _
"atan", PCODE.FUNC_ATAN, 1, _
"atand", PCODE.FUNC_ATAND, 1, _
"mysub", PCODE.FUNC_MYSUB, 1 )
' Create map for fast lookup
mapFuncTable.Initialize
For nTableIndex = 0 To aFuncTable.Length-3 Step 3
mapFuncTable.Put( aFuncTable( nTableIndex + FUNC_TABLE_FUNCNAME ), nTableIndex )
Next
bFuncTableLoaded = True
End Sub
'*--------------------------------------------------------- FindInternalFunc
'*
Private Sub FindInternalFunc( sName As String ) As MTE_FUNC_INFO
Private tFuncInfo As MTE_FUNC_INFO
Private nTableIndex As Object
' Load lookup table
If ( bFuncTableLoaded = False ) Then
LoadFuncTable
End If
' Search table for function
nTableIndex = mapFuncTable.Get(sName)
If ( nTableIndex <> Null ) Then
tFuncInfo.nPcode = aFuncTable( nTableIndex + FUNC_TABLE_PCODE )
tFuncInfo.nArgCount = aFuncTable( nTableIndex + FUNC_TABLE_ARGCOUNT )
Else
tFuncInfo.nPcode = -1
tFuncInfo.nArgCount = 0
End If
Return ( tFuncInfo )
End Sub