I really mean no disrespect to PowerBASIC by this post. I am only trying to show that c++ is not the bloated beast many would have you believe, and it can also perform quite admirably.
This is a 64bit unicode application.
Appsize: 11,776 bytes
Timing: .15625
James
'=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*
'I was surprised that IDictionary was slower than Borje's implementation over
'on the PowerBASIC forum. I decided to try a bc9Basic/TCLib version using an
'IDictionary class wrapper I wrote. This is smaller than any of the PB implementations
'and only slower than Hutch's pure asm app.
'------------------------------------------------------------------------------
'Note: this is a 64bit unicde application
'=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*
$CPP
$NOMAIN
$ONEXIT "ULEX.EXE $FILE$.CPP TCHARXLATER_VC.TXT"
$ONEXIT "TCLIB.BAT $FILE$"
$HEADER
#pragma comment(lib,"ole32.lib")
#pragma comment(lib,"OleAut32.lib")
$HEADER
'==============================================================================
$USE USE_BcxDict
$Include <bc9Lib.bi>
'==============================================================================
Function IsReservedWord(oDic As cBcxDic Ref, sWord As const char Ptr) As Integer
Static Loaded As Integer
Dim As Integer i
If Loaded = 0 Then
While DATA$[i] <> "EOD"
oDic.Add((char*)DATA$[i],"")
Incr i
Wend
Loaded = 1
End If
If oDic.Exists(UCase$(sWord)) Then
Function = 1
EndIf
Function = 0
DATA "IF","THEN","ELSE","TRY","CATCH","END","SELECT","CASE","FUNCTION","SUB","ITERATE","FOR","NEXT","WHILE","UNTIL","DO","LOOP","WEND","STEP"
DATA "EXIT","REGISTER","LOCAL","GLOBAL","STATIC","INCR","DECR","BY","DATA","OPT","OPTIONAL","CONST","SLEEP","RESOURCE","OBJECT","IMAGE","SWAP"
DATA "AS","TO","GOTO","STDOUT","PRINT","PRINTR","PRINTBR","ECHO","DIM","REDIM","BYVAL","BYREF","BYCOPY","TYPE","TABLE","ENTRY","LANGUAGE","NAME"
DATA "MACRO","EXPORT","REPLACE","WITH","IN","GOSUB","RETURN","ENDIF","MACROTEMP","ELSEIF","YES","NO","ON","OFF","REGISTER","SYSTEM","ARR","INFINITE"
DATA "ASCEND","DESCEND","TAGARRAY","COLLATE","FROM","SCAN","INSERT","DELETE","VARIANT","TCP","PORT","AT","SEND","RECV","TIMEOUT","ALIAS","LIB"
DATA "DECLARE","DEF","ERRORS","PLURIBASIC","WARNINGS","NOTICES","DEPRECATED","PARSES","ALL","NONE","ANY","EXACT","ITERATE","PHP","HTML","START"
DATA "MYSQL","LOAD","SAVE","DELETE","WHERE","LIMITUDT","PBCC","PBWIN","USEUNICODE","CRACKERS","SESSTART","EXCLUSIVE","AUTO","OPEN","CLOSE","CLOSED"
DATA "APPEND","INPUT","OUTPUT","SETEOF","SEEK","GET","PUT","PRINT","FOREACH","ACCESS","READ","WRITE","SHARED","LOCK","SEEK","LINE","CALL","BITWISE"
DATA "LOGICAL","UDT","QUIT","ABORT","TERMINATE","DECLARE","CLASS","METHOD","PROPERTY","CREATE","DESTROY","INSTANCE","GET","SET","INTERFACE","LET"
DATA "CREATE","DESTROY","WAITKEY$","RESET","RESERVE","DEFBYT","DEFDWD","DEFINT","DEFLNG","DEFSNG","DEFSTR","DEFWRD","DEFASC","BINARY"
DATA "ISCOND","NOTNULL","AUTOINC","PRIMARY","ON","OFF","YES","NO","EXE","PHP","DLL","SLL","CONSOLE","EXCLUDE","INCLUDE","RAW"
' SPECIAL CASES
DATA "VARPTR","LBOUND","UBOUND", "SYS_ARR","SYS_IMG"
DATA "IIF","CHOOSE","CHOOSES","CHOOSEI","CHOOSED","CHOOSEF","CHOOSEB", "USING","EOD"
End Function
'==============================================================================
Function main() As Integer
Raw As cBcxDic Ptr oDic
Dim As int RetVal ,i
Dim As DOUBLE t
OleInitialize(NULL)
oDic = new cBcxDic
If Not oDic Then
? "No oDic allocation"
Pause
Function = EXIT_FAILURE
End if
t = TIMER
For i = 1 To 1000000
RetVal = IsReservedWord(*oDic,"waitkey$")
Next
t = TIMER - t
delete oDic
OleUninitialize()
print "t = " ;t
print "RetVal = ";RetVal
Pause
Function = RetVal
End Function