Untitled diff

Creato Il diff non scade mai
2 rimozioni
759 linee
5 aggiunte
760 linee
VERSION 1.0 CLASS
VERSION 1.0 CLASS
BEGIN
BEGIN
MultiUse = -1 'True
MultiUse = -1 'True
Persistable = 0 'NotPersistable
Persistable = 0 'NotPersistable
DataBindingBehavior = 0 'vbNone
DataBindingBehavior = 0 'vbNone
DataSourceBehavior = 0 'vbNone
DataSourceBehavior = 0 'vbNone
MTSTransactionMode = 0 'NotAnMTSObject
MTSTransactionMode = 0 'NotAnMTSObject
END
END
Attribute VB_Name = "clsTrickHashTable"
Attribute VB_Name = "clsTrickHashTable"
Attribute VB_GlobalNameSpace = False
Attribute VB_GlobalNameSpace = False
Attribute VB_Creatable = True
Attribute VB_Creatable = True
Attribute VB_PredeclaredId = False
Attribute VB_PredeclaredId = False
Attribute VB_Exposed = False
Attribute VB_Exposed = False
' clsTrickHashTable.cls - класс Ń…ŠµŃˆ-таблицы
' clsTrickHashTable.cls - класс Ń…ŠµŃˆ-таблицы
' Ā© ŠšŃ€ŠøŠ²Š¾ŃƒŃ Анатолий ŠŠ½Š°Ń‚Š¾Š»ŃŒŠµŠ²ŠøŃ‡ (The trick), 2014
' Ā© ŠšŃ€ŠøŠ²Š¾ŃƒŃ Анатолий ŠŠ½Š°Ń‚Š¾Š»ŃŒŠµŠ²ŠøŃ‡ (The trick), 2014


Option Explicit
Option Explicit


Public Enum CompareMethod ' ŠœŠµŃ‚Š¾Š“ ŃŃ€Š°Š²Š½ŠµŠ½ŠøŃ
Public Enum CompareMethod ' ŠœŠµŃ‚Š¾Š“ ŃŃ€Š°Š²Š½ŠµŠ½ŠøŃ
BinaryCompare
BinaryCompare
TextCompare
TextCompare
End Enum
End Enum


Public Enum EnumMethod ' ŠœŠµŃ‚Š¾Š“ ŠæŠµŃ€ŠµŃ‡ŠøŃŠ»ŠµŠ½ŠøŃ Š“Š»Ń For each
Public Enum EnumMethod ' ŠœŠµŃ‚Š¾Š“ ŠæŠµŃ€ŠµŃ‡ŠøŃŠ»ŠµŠ½ŠøŃ Š“Š»Ń For each
ENUM_BY_KEY
ENUM_BY_KEY
ENUM_BY_VALUE
ENUM_BY_VALUE
End Enum
End Enum


Private Declare Function SetEnvironmentVariable Lib "kernel32" Alias "SetEnvironmentVariableW" (ByVal lpName As Long, ByVal lpValue As Long) As Long
Private Declare Function SetEnvironmentVariable Lib "kernel32" Alias "SetEnvironmentVariableW" (ByVal lpName As Long, ByVal lpValue As Long) As Long
Private Declare Function GetEnvironmentVariable Lib "kernel32" Alias "GetEnvironmentVariableW" (ByVal lpName As Long, ByVal lpBuffer As Long, ByVal nSize As Long) As Long
Private Declare Function GetEnvironmentVariable Lib "kernel32" Alias "GetEnvironmentVariableW" (ByVal lpName As Long, ByVal lpBuffer As Long, ByVal nSize As Long) As Long
Private Declare Function VirtualAlloc Lib "kernel32" (lpAddress As Any, ByVal dwSize As Long, ByVal flAllocationType As Long, ByVal flProtect As Long) As Long
Private Declare Function VirtualAlloc Lib "kernel32" (lpAddress As Any, ByVal dwSize As Long, ByVal flAllocationType As Long, ByVal flProtect As Long) As Long
Private Declare Function VirtualFree Lib "kernel32" (lpAddress As Any, ByVal dwSize As Long, ByVal dwFreeType As Long) As Long
Private Declare Function VirtualFree Lib "kernel32" (lpAddress As Any, ByVal dwSize As Long, ByVal dwFreeType As Long) As Long
Private Declare Function HeapAlloc Lib "kernel32" (ByVal hHeap As Long, ByVal dwFlags As Long, ByVal dwBytes As Long) As Long
Private Declare Function HeapAlloc Lib "kernel32" (ByVal hHeap As Long, ByVal dwFlags As Long, ByVal dwBytes As Long) As Long
Private Declare Function GetProcessHeap Lib "kernel32" () As Long
Private Declare Function GetProcessHeap Lib "kernel32" () As Long
Private Declare Function GetMem8 Lib "msvbvm60" (Src As Any, Dst As Any) As Long
Private Declare Function GetMem8 Lib "msvbvm60" (Src As Any, Dst As Any) As Long
Private Declare Function GetMem4 Lib "msvbvm60" (Src As Any, Dst As Any) As Long
Private Declare Function GetMem4 Lib "msvbvm60" (Src As Any, Dst As Any) As Long
Private Declare Function GetMem2 Lib "msvbvm60" (Src As Any, Dst As Any) As Long
Private Declare Function GetMem2 Lib "msvbvm60" (Src As Any, Dst As Any) As Long
Private Declare Function GetMem1 Lib "msvbvm60" (Src As Any, Dst As Any) As Long
Private Declare Function GetMem1 Lib "msvbvm60" (Src As Any, Dst As Any) As Long
Private Declare Function GetModuleHandle Lib "kernel32" Alias "GetModuleHandleW" (ByVal lpModuleName As Long) As Long
Private Declare Function GetModuleHandle Lib "kernel32" Alias "GetModuleHandleW" (ByVal lpModuleName As Long) As Long
Private Declare Function GetProcAddress Lib "kernel32" (ByVal hModule As Long, ByVal lpProcName As String) As Long
Private Declare Function GetProcAddress Lib "kernel32" (ByVal hModule As Long, ByVal lpProcName As String) As Long
Private Declare Function memcpy Lib "kernel32" Alias "RtlMoveMemory" (Destination As Any, Source As Any, ByVal length As Long) As Long
Private Declare Function memcpy Lib "kernel32" Alias "RtlMoveMemory" (Destination As Any, Source As Any, ByVal length As Long) As Long
Private Declare Function VarCmp Lib "oleaut32" (pvarLeft As Any, pvarRight As Any, ByVal lcid As Long, ByVal dwFlags As Long) As Long
Private Declare Function VarCmp Lib "oleaut32" (pvarLeft As Any, pvarRight As Any, ByVal lcid As Long, ByVal dwFlags As Long) As Long
Private Declare Function VariantCopy Lib "oleaut32" (pvargDest As Any, pvargSrc As Any) As Long
Private Declare Function VariantCopy Lib "oleaut32" (pvargDest As Any, pvargSrc As Any) As Long
Private Declare Function VariantCopyInd Lib "oleaut32" (pvarDest As Any, pvargSrc As Any) As Long
Private Declare Function VariantCopyInd Lib "oleaut32" (pvarDest As Any, pvargSrc As Any) As Long
Private Declare Function LCMapString Lib "kernel32" Alias "LCMapStringW" (ByVal Locale As Long, ByVal dwMapFlags As Long, lpSrcStr As Any, ByVal cchSrc As Long, lpDestStr As Any, ByVal cchDest As Long) As Long
Private Declare Function LCMapString Lib "kernel32" Alias "LCMapStringW" (ByVal Locale As Long, ByVal dwMapFlags As Long, lpSrcStr As Any, ByVal cchSrc As Long, lpDestStr As Any, ByVal cchDest As Long) As Long
Private Declare Function GetUserDefaultLCID Lib "kernel32" () As Long
Private Declare Function GetUserDefaultLCID Lib "kernel32" () As Long
Private Declare Function VarR4FromUI1 Lib "oleaut32" (value As Any, R4 As Any) As Long
Private Declare Function VarR4FromUI1 Lib "oleaut32" (value As Any, R4 As Any) As Long
Private Declare Function VarR4FromI2 Lib "oleaut32" (value As Any, R4 As Any) As Long
Private Declare Function VarR4FromI2 Lib "oleaut32" (value As Any, R4 As Any) As Long
Private Declare Function VarR4FromI4 Lib "oleaut32" (value As Any, R4 As Any) As Long
Private Declare Function VarR4FromI4 Lib "oleaut32" (value As Any, R4 As Any) As Long


Private Const LCMAP_LOWERCASE As Long = &H100
Private Const LCMAP_LOWERCASE As Long = &H100
Private Const PAGE_EXECUTE_READWRITE As Long = &H40&
Private Const PAGE_EXECUTE_READWRITE As Long = &H40&
Private Const MEM_COMMIT As Long = &H1000&
Private Const MEM_COMMIT As Long = &H1000&
Private Const MEM_RESERVE As Long = &H2000&
Private Const MEM_RESERVE As Long = &H2000&
Private Const MEM_RELEASE As Long = &H8000&
Private Const MEM_RELEASE As Long = &H8000&
Private Const HEAP_NO_SERIALIZE As Long = &H1
Private Const HEAP_NO_SERIALIZE As Long = &H1
Private Const GRANULARITY As Long = &H20
Private Const GRANULARITY As Long = &H20
Private Const HASH_SIZE As Long = 2999
Private Const HASH_SIZE As Long = 2999


Private Type tPointer ' ИнГекс в таблице Š¾Š±ŃŠŠµŠŗŃ‚ов
Private Type tPointer ' ИнГекс в таблице Š¾Š±ŃŠŠµŠŗŃ‚ов
hash As Integer ' Š„ŃŃˆ
hash As Integer ' Š„ŃŃˆ
Index As Integer ' ИнГекс
Index As Integer ' ИнГекс
End Type
End Type
Private Type tElement ' Колонка хэш таблицы
Private Type tElement ' Колонка хэш таблицы
Key As Variant ' ŠšŠ»ŃŽŃ‡
Key As Variant ' ŠšŠ»ŃŽŃ‡
value As Variant ' Значение
value As Variant ' Значение
Next As tPointer ' ИнГекс ŃŠ»ŠµŠ“ŃƒŃŽŃ‰ŠµŠ³Š¾ ŃŠ»ŠµŠ¼ŠµŠ½Ń‚Š°
Next As tPointer ' ИнГекс ŃŠ»ŠµŠ“ŃƒŃŽŃ‰ŠµŠ³Š¾ ŃŠ»ŠµŠ¼ŠµŠ½Ń‚Š°
Prev As tPointer ' ИнГекс ŠæŃ€ŠµŠ“Ń‹Š“ŃƒŃ‰ŠµŠ³Š¾ ŃŠ»ŠµŠ¼ŠµŠ½Ń‚Š°
Prev As tPointer ' ИнГекс ŠæŃ€ŠµŠ“Ń‹Š“ŃƒŃ‰ŠµŠ³Š¾ ŃŠ»ŠµŠ¼ŠµŠ½Ń‚Š°
End Type
End Type
Private Type tItem ' Дтрока хэш таблицы
Private Type tItem ' Дтрока хэш таблицы
ElementsCount As Long ' ŠšŠ¾Š»ŠøŃ‡ŠµŃŃ‚Š²Š¾ коллизий+1
ElementsCount As Long ' ŠšŠ¾Š»ŠøŃ‡ŠµŃŃ‚Š²Š¾ коллизий+1
Elements() As tElement ' Элементы
Elements() As tElement ' Элементы
End Type
End Type
Private Type enumObject ' ŠžŠ±ŃŠŠµŠŗŃ‚-ŠæŠµŃ€ŠµŃ‡ŠøŃŠ»ŠøŃ‚ŠµŠ»ŃŒ
Private Type enumObject ' ŠžŠ±ŃŠŠµŠŗŃ‚-ŠæŠµŃ€ŠµŃ‡ŠøŃŠ»ŠøŃ‚ŠµŠ»ŃŒ
vTablePtr As Long ' Š£ŠŗŠ°Š·Š°Ń‚ŠµŠ»ŃŒ на интерфейс IEnumVariant
vTablePtr As Long ' Š£ŠŗŠ°Š·Š°Ń‚ŠµŠ»ŃŒ на интерфейс IEnumVariant
Counter As Long ' Дчетчик ссылок
Counter As Long ' Дчетчик ссылок
Pointer As tPointer ' ИнГекс на Ń‚ŠµŠŗŃƒŃ‰ŠøŠ¹ ŃŠ»ŠµŠ¼ŠµŠ½Ń‚
Pointer As tPointer ' ИнГекс на Ń‚ŠµŠŗŃƒŃ‰ŠøŠ¹ ŃŠ»ŠµŠ¼ŠµŠ½Ń‚
DataPtr As Long ' Š£ŠŗŠ°Š·Š°Ń‚ŠµŠ»ŃŒ на List
DataPtr As Long ' Š£ŠŗŠ°Š·Š°Ń‚ŠµŠ»ŃŒ на List
First As tPointer ' ИнГекс на первый ŃŠ»ŠµŠ¼ŠµŠ½Ń‚
First As tPointer ' ИнГекс на первый ŃŠ»ŠµŠ¼ŠµŠ½Ń‚
OffsetVariant As Long ' Дмещение ŠæŠµŃ€ŠµŃ‡ŠøŃŠ»ŃŠµŠ¼Š¾Š¹ переменной (key/value)
OffsetVariant As Long ' Дмещение ŠæŠµŃ€ŠµŃ‡ŠøŃŠ»ŃŠµŠ¼Š¾Š¹ переменной (key/value)
End Type
End Type


Private List() As tItem ' Таблица
Private List() As tItem ' Таблица
Private mEnumMode As EnumMethod ' Š¢ŠµŠŗŃƒŃ‰ŠøŠ¹ режим ŠæŠµŃ€ŠµŃ‡ŠøŃŠ»ŠµŠ½ŠøŃ
Private mEnumMode As EnumMethod ' Š¢ŠµŠŗŃƒŃ‰ŠøŠ¹ режим ŠæŠµŃ€ŠµŃ‡ŠøŃŠ»ŠµŠ½ŠøŃ
Private mCount As Long ' Кол-во ŃŠ»ŠµŠ¼ŠµŠ½Ń‚Š¾Š²
Private mCount As Long ' Кол-во ŃŠ»ŠµŠ¼ŠµŠ½Ń‚Š¾Š²
Private mCompareMode As VbCompareMethod ' Режим ŃŃ€Š°Š²Š½ŠµŠ½ŠøŃ ŠŗŠ»ŃŽŃ‡ŠµŠ¹
Private mCompareMode As VbCompareMethod ' Режим ŃŃ€Š°Š²Š½ŠµŠ½ŠøŃ ŠŗŠ»ŃŽŃ‡ŠµŠ¹
Private First As tPointer ' ИнГекс первого ŃŠ»ŠµŠ¼ŠµŠ½Ń‚Š°
Private First As tPointer ' ИнГекс первого ŃŠ»ŠµŠ¼ŠµŠ½Ń‚Š°
Private Last As tPointer ' ИнГекс послеГнего ŃŠ»ŠµŠ¼ŠµŠ½Ń‚Š°
Private Last As tPointer ' ИнГекс послеГнего ŃŠ»ŠµŠ¼ŠµŠ½Ń‚Š°
Private locbuf() As Integer ' Š‘ŃƒŃ„ŠµŃ€ текстовой строки
Private locbuf() As Integer ' Š‘ŃƒŃ„ŠµŃ€ текстовой строки
Private lpAsm As Long
Private lpAsm As Long
Private lcid As Long
Private lcid As Long
Private decMin As Variant
Private decMin As Variant
Private decMax As Variant
Private decMax As Variant


' // ŠŸŠ¾Š»ŃƒŃ‡ŠøŃ‚ŃŒ ŠæŠµŃ€ŠµŃ‡ŠøŃŠ»ŠøŃ‚ŠµŠ»ŃŒ
' // ŠŸŠ¾Š»ŃƒŃ‡ŠøŃ‚ŃŒ ŠæŠµŃ€ŠµŃ‡ŠøŃŠ»ŠøŃ‚ŠµŠ»ŃŒ


Public Property Get NewEnum() As IUnknown
Public Property Get NewEnum() As IUnknown
Attribute NewEnum.VB_UserMemId = -4
Attribute NewEnum.VB_UserMemId = -4
Attribute NewEnum.VB_MemberFlags = "40"
Attribute NewEnum.VB_MemberFlags = "40"
Dim enumObject As Long
Dim enumObject As Long