Re: FindData module
Posted: Wed Jul 25, 2018 11:35 pm
Would someone provide example use cases for this? Thank you. 

http://www.purebasic.com
https://www.purebasic.fr/english/
Code: Select all
Procedure PreProcessInit(*pre.PreProcessor)
UseModule CPUInfo
If IsCPU(#PB_CPU_SSE2)
*pre\find = finddata::@SSE2_Find()
Else
*pre\find = FindData::@BM()
EndIf
UnuseModule CPUInfo
EndProcedure
....
While (pos > -1 And pos < len)
pos = *pre\find(*input,len,*pre\tag,*pre\taglen,pos) ;<--- hunt through *input for UTF8("<?PB")
If pos <> -1
osz = outp+(pos-p_end)
If osz > outlen
*pre\output = ReAllocateMemory(*pre\output,osz,#PB_Memory_NoClear)
outlen = osz
EndIf
...
Code: Select all
Structure forsortarray
type$
value.l
EndStructure
Global Dim SortArrayValues.forsortarray(4)
; arrays of addresses
Dim inst.l(3)
Dim envel.l(3)
Dim seq.l(3)
Dim samples.l(3)
;{ fill addresses
inst(1) = $00000688
inst(2) = $0000D688
inst(3) = $001FF836
envel(1) = $0000A682
envel(2) = $0000D682
envel(3) = $0011D682
seq(1) = $0000D00C
seq(2) = $0000D67C
seq(3) = $0001D67C
samples(1) = $0000D600
samples(2) = $0000D676
samples(3) = $0010D676
;}
sizeins = ArraySize(inst())
sizeenv = ArraySize(envel())
sizeseq = ArraySize(seq())
sizesmp = ArraySize(samples())
; detect which arrays is empty
If sizeins And sizeenv And sizeseq And sizesmp
; all banks is here
For ins = 1 To sizeins
For env = 1 To sizeenv
For seq = 1 To sizeseq
For smp = 1 To sizesmp
; inst env seq smp
; fill all data in temp array
SortArrayValues(1)\type$ = "ins"
SortArrayValues(1)\value = inst(ins)
SortArrayValues(2)\type$ = "env"
SortArrayValues(2)\value = envel(env)
SortArrayValues(3)\type$ = "seq"
SortArrayValues(3)\value = seq(seq)
SortArrayValues(4)\type$ = "smp"
SortArrayValues(4)\value = samples(smp)
; sort array for #PB_Sort_Ascending
SortStructuredArray(SortArrayValues(), #PB_Sort_Ascending, OffsetOf(forsortarray\value), TypeOf(forsortarray\value))
tmp1 = SortArrayValues(4)\value - SortArrayValues(3)\value
Select tmp1
Case 4 To 20
tmp2 = SortArrayValues(3)\value - SortArrayValues(2)\value
Select tmp2
Case 4 To 20
tmp3 = SortArrayValues(2)\value - SortArrayValues(1)\value
Select tmp3
Case 4 To 20
Debug "was found at " + Str(ins) + Str(env) + Str(seq) + Str(smp)
Break 4
EndSelect
EndSelect
EndSelect
Next
Next
Next
Next
ElseIf sizeins And sizeseq And sizesmp
; no envelopes
ElseIf sizeins And sizeenv And sizeseq
; no samples
ElseIf sizeins And sizeseq
; no samples and envelopes
EndIf