LinkedLists, Balanced Trees, Hashmaps, SkipList or Associative Arrays.
I made a simple example program to demonstrate that. In the ListBoxList
10.000 records are inserted consisting of a 4 character key (only lower
case alfabeticals from a till z) and of record data (the order of creation of the record). Key and recorddata are seperated by the Horizontal Tab.
Code: Select all
;/ Created with PureVisionXP v2.03
;/ Wed, 02 Feb 2005 12:53:25
;/ by Mijnders Automation
XIncludeFile "LBDemo_Constants.pb"
XIncludeFile "LBDemo_Windows.pb"
#ListBoxList1 = 25
Procedure.l SetFirst(LBL_Id.l)
If CountGadgetItems(LBL_Id)=0
ProcedureReturn -1
EndIf
SetGadgetState(LBL_Id,0)
ProcedureReturn 0
EndProcedure
Procedure.l SetLast(LBL_Id.l)
Nr=CountGadgetItems(LBL_Id)
If Nr=0
ProcedureReturn -1
EndIf
SetGadgetState(LBL_Id,Nr-1)
ProcedureReturn 0
EndProcedure
Procedure.l SetNext(LBL_Id.l)
Nr=CountGadgetItems(LBL_Id)
If Nr=0
ProcedureReturn -1
EndIf
S=GetGadgetState(LBL_Id)+1
If S>Nr-1 Or S<0
ProcedureReturn -2
EndIf
SetGadgetState(LBL_Id,S)
ProcedureReturn 0
EndProcedure
Procedure.l SetPrevious(LBL_Id.l)
Nr=CountGadgetItems(LBL_Id)
If Nr=0
ProcedureReturn -1
EndIf
S=GetGadgetState(LBL_Id)-1
If S>Nr-1 Or S<0
ProcedureReturn -2
EndIf
SetGadgetState(LBL_Id,S)
ProcedureReturn 0
EndProcedure
Procedure.l Find(LBL_Id.l,S$)
S=SendMessage_( GadgetID(LBL_Id), #LB_FINDSTRING, 0, S$)
If S>=0
SetGadgetState(LBL_Id,S)
ProcedureReturn 0
EndIf
ProcedureReturn -1
EndProcedure
Procedure Display(LBL_Id)
S$=GetGadgetText(LBL_Id)
SetGadgetText(#Gadget_LBList_stKey,StringField(S$,1,Chr(9)))
SetGadgetText(#Gadget_LBList_stRecord,StringField(S$,2,Chr(9)))
EndProcedure
;-Main Loop
If Window_LBList()
ListViewGadget(#ListBoxList1,150,285,100,100,#LBS_SORT | #PB_Window_Invisible)
For i=0 To 10000
S$=""
For j=0 To 3
S$+Chr('a'+Random(25))
Next
S$+Chr(9)+"Original Recordnumber : "+Str(i)
SendMessage_( GadgetID(#ListBoxList1), #LB_ADDSTRING, 0, S$)
Next
quitLBList=0
Repeat
EventID=WaitWindowEvent()
Select EventID
Case #PB_Event_CloseWindow
If EventWindowID()=#Window_LBList
quitLBList=1
EndIf
Case #PB_Event_Gadget
Select EventGadgetID()
Case #Gadget_LBList_stKey
Case #Gadget_LBList_stRecord
Case #Gadget_LBList_stSearch
Case #Gadget_LBList_btSearch
S$=GetGadgetText(#Gadget_LBList_stSearch)
If GetGadgetState(#Gadget_LBList_cbExact)=1
S$+Chr(9)
EndIf
If Find(#ListBoxList1,S$)=0
Display(#ListBoxList1)
Else
MessageRequester("Info", "Not found in ListBox List",0)
EndIf
Case #Gadget_LBList_btFirst
If SetFirst(#ListBoxList1)=0
Display(#ListBoxList1)
Else
MessageRequester("Info", "ListBox List empty",0)
EndIf
Case #Gadget_LBList_cbExact
Case #Gadget_LBList_btNext
If SetNext(#ListBoxList1)=0
Display(#ListBoxList1)
Else
MessageRequester("Info", "No Next in ListBox List",0)
EndIf
Case #Gadget_LBList_btPrevious
If SetPrevious(#ListBoxList1)=0
Display(#ListBoxList1)
Else
MessageRequester("Info", "No Previous in ListBox List",0)
EndIf
Case #Gadget_LBList_btLast
If SetLast(#ListBoxList1)=0
Display(#ListBoxList1)
Else
MessageRequester("Info", "ListBox List empty",0)
EndIf
EndSelect
EndSelect
Until quitLBList
CloseWindow(#Window_LBList)
EndIf
End
Code: Select all
;/ Created with PureVisionXP v2.03
;/ Wed, 02 Feb 2005 12:53:25
;/ by Mijnders Automation
XIncludeFile "LBDemo_Constants.pb"
Procedure.l Window_LBList()
If OpenWindow(#Window_LBList,82,79,376,258,#PB_Window_SystemMenu|#PB_Window_ScreenCentered|#PB_Window_Invisible,"ListBox List Demo")
If CreateGadgetList(WindowID(#Window_LBList))
Frame3DGadget(#Gadget_LBList_Frame3D2,10,10,355,80,"Search Result")
TextGadget(#Gadget_LBList_Text3,30,35,60,15,"Key",#PB_Text_Right)
StringGadget(#Gadget_LBList_stKey,100,30,80,20,"")
TextGadget(#Gadget_LBList_Text5,30,60,60,15,"Record",#PB_Text_Right)
StringGadget(#Gadget_LBList_stRecord,100,55,250,20,"")
StringGadget(#Gadget_LBList_stSearch,100,110,80,20,"")
ButtonGadget(#Gadget_LBList_btSearch,10,110,60,20,"Search")
ButtonGadget(#Gadget_LBList_btFirst,10,140,60,20,"First")
CheckBoxGadget(#Gadget_LBList_cbExact,195,115,80,15,"Exact")
ButtonGadget(#Gadget_LBList_btNext,10,170,60,20,"Next")
ButtonGadget(#Gadget_LBList_btPrevious,10,200,60,20,"Previous")
ButtonGadget(#Gadget_LBList_btLast,10,230,60,20,"Last")
TextGadget(#Gadget_LBList_Text14,195,35,140,15,"10.000 records, key : 4*[a-z] ")
HideWindow(#Window_LBList,0)
ProcedureReturn WindowID()
EndIf
EndIf
EndProcedure
Code: Select all
;/ Created with PureVisionXP v2.03
;/ Wed, 02 Feb 2005 12:53:25
;/ by Mijnders Automation
;-Global Variables and Constants
Global BubbleTipStyle.l:BubbleTipStyle=0
#PB_Image_BorderRaised =$1
;-Window Constants
Enumeration 1
#Window_LBList
EndEnumeration
#WindowIndex=#PB_Compiler_EnumerationValue
;-Gadget Constants
Enumeration 1
;Window_LBList
#Gadget_LBList_Frame3D2
#Gadget_LBList_Text3
#Gadget_LBList_stKey
#Gadget_LBList_Text5
#Gadget_LBList_stRecord
#Gadget_LBList_stSearch
#Gadget_LBList_btSearch
#Gadget_LBList_btFirst
#Gadget_LBList_cbExact
#Gadget_LBList_btNext
#Gadget_LBList_btPrevious
#Gadget_LBList_btLast
#Gadget_LBList_Text14
EndEnumeration
#GadgetIndex=#PB_Compiler_EnumerationValue