Dear VANYA;
Thanks for your quick reply.
As you say, surely I forgot to replace the libwindow9.a file.
I was wondering whether to use the Ascii or Unicode version of the libwindow9.a file, but now I'm using Ascii version.
My hash table test program worked fast.
Code: Select all
'HashTableTest1Window9
'Check for interference in hash generation
'キーに対する Hash 生成での干渉の有無チェック
'Hash によるデータの照合チェック
'Data collation check by Hash
' 辞書項目を登録
'Sub SetValueStrHashTable(p As Any Ptr , sKey As String , anyValue As USTRING)
' 設定済の索引のデータ取得。未登録のキーを検索すると空白を返します
'Function GetValueStrHashTable(p As Any Ptr , sKey As String) As USTRING
' 項目を個別に消去
'Sub FreeKeyHashTable(p As Any Ptr , sKey As String , bFlagFreeMemoryStrings As Long = 0)
' 辞書データをまとめて消去
'Sub FreeHashTable(p As Any Ptr , bFlagFreeMemoryStrings As Long = 0)
' ハッシュテーブルを削除【必須】
'Sub DeleteHashTable(p As Any Ptr , bFlagFreeMemoryStrings As Long = 0)
#Include "window9.bi"
Dim p As Any Ptr = CreateHashTable()
Dim KeyString As String
Dim DataString As String
Dim As Integer Counter, i, j, k, l, m
Dim BoolVar As String
Dim As Single t1,t2,t3
'****************************************************************
'Hash generation for the key and checking for interference of the generated Hash
'キーに対する Hash 生成と、生成した Hash の干渉有無チェック
'****************************************************************
t1=Timer
Counter = 0
For i = Asc("A") To Asc("Z")
Print Chr(i)+Space(1);
For j = Asc("A") To Asc("Z")
For k = Asc("A") To Asc("Z")
For l = Asc("A") To Asc("Z")
For m = Asc("A") To Asc("Z")
KeyString = Chr(i) + Chr(j) + Chr(k) + Chr(l) + Chr(m)
DataString = Chr(i) + Chr(j) + Chr(k) + Chr(l) + Chr(m)
BoolVar = GetValueStrHashTable(p , KeyString) ' KeyStringの存在を確認
If BoolVar = "" Then '***********
Counter += 1
SetValueStrHashTable(p , KeyString, DataString) '★★ データ追加★★★★★★★★★★
Else
'キーの重複が発生したら表示する
Print
Print "Key Duplicate", Counter, KeyString
Sleep
End If
Next m
Next l
Next k
Next j
Next i
Print
Print
Print "Data registration has been completed. KeyString = "; KeyString
Print "データ登録を終了しました。 KeyString = "; KeyString
Print " Counter = 26^5(11,881,376) = "; Counter
t2=Timer
Print "Seconds for registration = ";t2 - t1
Print "登録所要秒数 = ";t2 - t1
Print
Print "*******************************************************"
'****************************************************************
'Delete and re-register data items
'データ項目を削除して再登録する
'****************************************************************
Print "Delete 26 keys."
Print "26 個のキーを削除します。"
Print
For i = Asc("A") To Asc("Z")
KeyString = Chr(i) + "AAAA"
FreeKeyHashTable(p , KeyString , 1) 'キーを指定して、データ項目を個別に消去
Print KeyString,
Next i
Print
Print "Count ="; GetSizeHashTable(p)
Print
Print "Add 26 keys."
Print "26 個のキーを追加します。"
Print
For i = Asc("A") To Asc("Z")
KeyString = Chr(i) + "AAAA"
DataString = Chr(i) + "AAAA"
BoolVar = GetValueStrHashTable(p ,KeyString) ' KeyStringの存在を確認
If BoolVar = "" Then '***********
Counter += 1
SetValueStrHashTable(p, KeyString, DataString) '★★ データ追加★★★★★★★★★★
Print KeyString,
Else
'キーの重複が発生したら表示する
Print
Print "Key Duplicate", Counter, KeyString
Sleep
End If
Next i
Print
Print "Count ="; GetSizeHashTable(p)
Print
Print "*******************************************************"
'****************************************************************
'Hash data collation check
'Hash によるデータの照合チェック
'****************************************************************
For i = Asc("A") To Asc("Z")
Print Chr(i)+Space(1);
For j = Asc("A") To Asc("Z")
For k = Asc("A") To Asc("Z")
For l = Asc("A") To Asc("Z")
For m = Asc("A") To Asc("Z")
KeyString = Chr(i) + Chr(j) + Chr(k) + Chr(l) + Chr(m)
DataString = Chr(i) + Chr(j) + Chr(k) + Chr(l) + Chr(m)
If DataString <> GetValueStrHashTable(p, KeyString) Then ' Hash を使ってデータを照合
'データの不整合が発生したら表示する
Print
Print "Inconsistent data", KeyString, GetValueStrHashTable(p, KeyString)
Sleep
End If
Next m
Next l
Next k
Next j
Next i
Print
t3=Timer
Print "Seconds for matching = ";t3 - t2
Print "照合所要秒数 = ";t3 - t2
Print
Print "Total seconds required = ";t3 - t1
Print "合計所要秒数 = ";t3 - t1
DeleteHashTable(p , 1)
Print "*******************************************************"
Print "Please enter any key to exit."
Print "何かキー入力すると終了します。"
Sleep