• 🏆 Texturing Contest #33 is OPEN! Contestants must re-texture a SD unit model found in-game (Warcraft 3 Classic), recreating the unit into a peaceful NPC version. 🔗Click here to enter!
  • It's time for the first HD Modeling Contest of 2024. Join the theme discussion for Hive's HD Modeling Contest #6! Click here to post your idea!

biggish-array

Status
Not open for further replies.
Level 13
Joined
Nov 7, 2014
Messages
571
I think this is a cute alternative to the "binary-searchy-if-statements" technique of implementing arrays bigger than 8191 in Jass.
Obviously its not great because of having to call the ForceForce native for every read/write, which is slower than calling a jass function, but perhaps at some point the if statement branches become slower? I don't know.
And of course, maybe the hashtable natives blow both techniques out of the water, or maybe it becomes much slower for 100_000s of entries duo to many many collisions. Who knows.


"biggish-array":
JASS:
library biggisharray initializer init /*
*/ uses /*
*/    Typecast // C2I, I2C

globals
    private force exec = null
    private integer idx = 0
    private integer val = 0

    private integer read1_addr
    private integer write1_addr

    private integer array a001
    private integer array a002
    private integer array a003
    private integer array a004
    private integer array a005
    private integer array a006
    private integer array a007
    private integer array a008
    private integer array a009
    private integer array a010
    private integer array a011
    private integer array a012
    private integer array a013
    private integer array a014
    private integer array a015
    private integer array a016
    private integer array a017
    private integer array a018
    private integer array a019
    private integer array a020
    private integer array a021
    private integer array a022
    private integer array a023
    private integer array a024
    private integer array a025
    private integer array a026
    private integer array a027
    private integer array a028
    private integer array a029
    private integer array a030
    private integer array a031
    private integer array a032
    private integer array a033
    private integer array a034
    private integer array a035
    private integer array a036
    private integer array a037
    private integer array a038
    private integer array a039
    private integer array a040
    private integer array a041
    private integer array a042
    private integer array a043
    private integer array a044
    private integer array a045
    private integer array a046
    private integer array a047
    private integer array a048
    private integer array a049
    private integer array a050
    private integer array a051
    private integer array a052
    private integer array a053
    private integer array a054
    private integer array a055
    private integer array a056
    private integer array a057
    private integer array a058
    private integer array a059
    private integer array a060
    private integer array a061
    private integer array a062
    private integer array a063
    private integer array a064
    private integer array a065
    private integer array a066
    private integer array a067
    private integer array a068
    private integer array a069
    private integer array a070
    private integer array a071
    private integer array a072
    private integer array a073
    private integer array a074
    private integer array a075
    private integer array a076
    private integer array a077
    private integer array a078
    private integer array a079
    private integer array a080
    private integer array a081
    private integer array a082
    private integer array a083
    private integer array a084
    private integer array a085
    private integer array a086
    private integer array a087
    private integer array a088
    private integer array a089
    private integer array a090
    private integer array a091
    private integer array a092
    private integer array a093
    private integer array a094
    private integer array a095
    private integer array a096
    private integer array a097
    private integer array a098
    private integer array a099
    private integer array a100
    private integer array a101
    private integer array a102
    private integer array a103
    private integer array a104
    private integer array a105
    private integer array a106
    private integer array a107
    private integer array a108
    private integer array a109
    private integer array a110
    private integer array a111
    private integer array a112
    private integer array a113
    private integer array a114
    private integer array a115
    private integer array a116
    private integer array a117
    private integer array a118
    private integer array a119
    private integer array a120
    private integer array a121
    private integer array a122
    private integer array a123
    private integer array a124
    private integer array a125
    private integer array a126
    private integer array a127
    private integer array a128
endglobals

private function read1 takes nothing returns nothing
    set val = a001[idx - 0]
    return
    set val = a002[idx - 8191]
    return
    set val = a003[idx - 16382]
    return
    set val = a004[idx - 24573]
    return
    set val = a005[idx - 32764]
    return
    set val = a006[idx - 40955]
    return
    set val = a007[idx - 49146]
    return
    set val = a008[idx - 57337]
    return
    set val = a009[idx - 65528]
    return
    set val = a010[idx - 73719]
    return
    set val = a011[idx - 81910]
    return
    set val = a012[idx - 90101]
    return
    set val = a013[idx - 98292]
    return
    set val = a014[idx - 106483]
    return
    set val = a015[idx - 114674]
    return
    set val = a016[idx - 122865]
    return
    set val = a017[idx - 131056]
    return
    set val = a018[idx - 139247]
    return
    set val = a019[idx - 147438]
    return
    set val = a020[idx - 155629]
    return
    set val = a021[idx - 163820]
    return
    set val = a022[idx - 172011]
    return
    set val = a023[idx - 180202]
    return
    set val = a024[idx - 188393]
    return
    set val = a025[idx - 196584]
    return
    set val = a026[idx - 204775]
    return
    set val = a027[idx - 212966]
    return
    set val = a028[idx - 221157]
    return
    set val = a029[idx - 229348]
    return
    set val = a030[idx - 237539]
    return
    set val = a031[idx - 245730]
    return
    set val = a032[idx - 253921]
    return
    set val = a033[idx - 262112]
    return
    set val = a034[idx - 270303]
    return
    set val = a035[idx - 278494]
    return
    set val = a036[idx - 286685]
    return
    set val = a037[idx - 294876]
    return
    set val = a038[idx - 303067]
    return
    set val = a039[idx - 311258]
    return
    set val = a040[idx - 319449]
    return
    set val = a041[idx - 327640]
    return
    set val = a042[idx - 335831]
    return
    set val = a043[idx - 344022]
    return
    set val = a044[idx - 352213]
    return
    set val = a045[idx - 360404]
    return
    set val = a046[idx - 368595]
    return
    set val = a047[idx - 376786]
    return
    set val = a048[idx - 384977]
    return
    set val = a049[idx - 393168]
    return
    set val = a050[idx - 401359]
    return
    set val = a051[idx - 409550]
    return
    set val = a052[idx - 417741]
    return
    set val = a053[idx - 425932]
    return
    set val = a054[idx - 434123]
    return
    set val = a055[idx - 442314]
    return
    set val = a056[idx - 450505]
    return
    set val = a057[idx - 458696]
    return
    set val = a058[idx - 466887]
    return
    set val = a059[idx - 475078]
    return
    set val = a060[idx - 483269]
    return
    set val = a061[idx - 491460]
    return
    set val = a062[idx - 499651]
    return
    set val = a063[idx - 507842]
    return
    set val = a064[idx - 516033]
    return
    set val = a065[idx - 524224]
    return
    set val = a066[idx - 532415]
    return
    set val = a067[idx - 540606]
    return
    set val = a068[idx - 548797]
    return
    set val = a069[idx - 556988]
    return
    set val = a070[idx - 565179]
    return
    set val = a071[idx - 573370]
    return
    set val = a072[idx - 581561]
    return
    set val = a073[idx - 589752]
    return
    set val = a074[idx - 597943]
    return
    set val = a075[idx - 606134]
    return
    set val = a076[idx - 614325]
    return
    set val = a077[idx - 622516]
    return
    set val = a078[idx - 630707]
    return
    set val = a079[idx - 638898]
    return
    set val = a080[idx - 647089]
    return
    set val = a081[idx - 655280]
    return
    set val = a082[idx - 663471]
    return
    set val = a083[idx - 671662]
    return
    set val = a084[idx - 679853]
    return
    set val = a085[idx - 688044]
    return
    set val = a086[idx - 696235]
    return
    set val = a087[idx - 704426]
    return
    set val = a088[idx - 712617]
    return
    set val = a089[idx - 720808]
    return
    set val = a090[idx - 728999]
    return
    set val = a091[idx - 737190]
    return
    set val = a092[idx - 745381]
    return
    set val = a093[idx - 753572]
    return
    set val = a094[idx - 761763]
    return
    set val = a095[idx - 769954]
    return
    set val = a096[idx - 778145]
    return
    set val = a097[idx - 786336]
    return
    set val = a098[idx - 794527]
    return
    set val = a099[idx - 802718]
    return
    set val = a100[idx - 810909]
    return
    set val = a101[idx - 819100]
    return
    set val = a102[idx - 827291]
    return
    set val = a103[idx - 835482]
    return
    set val = a104[idx - 843673]
    return
    set val = a105[idx - 851864]
    return
    set val = a106[idx - 860055]
    return
    set val = a107[idx - 868246]
    return
    set val = a108[idx - 876437]
    return
    set val = a109[idx - 884628]
    return
    set val = a110[idx - 892819]
    return
    set val = a111[idx - 901010]
    return
    set val = a112[idx - 909201]
    return
    set val = a113[idx - 917392]
    return
    set val = a114[idx - 925583]
    return
    set val = a115[idx - 933774]
    return
    set val = a116[idx - 941965]
    return
    set val = a117[idx - 950156]
    return
    set val = a118[idx - 958347]
    return
    set val = a119[idx - 966538]
    return
    set val = a120[idx - 974729]
    return
    set val = a121[idx - 982920]
    return
    set val = a122[idx - 991111]
    return
    set val = a123[idx - 999302]
    return
    set val = a124[idx - 1007493]
    return
    set val = a125[idx - 1015684]
    return
    set val = a126[idx - 1023875]
    return
    set val = a127[idx - 1032066]
    return
    set val = a128[idx - 1040257]
    return
endfunction

public function read takes integer i returns integer
    set idx = i
   call ForForce(exec, I2C(read1_addr + (64 * (i / 8191))))
    return val
endfunction

private function write1 takes nothing returns nothing
    set a001[idx - 0] = val
    return
    set a002[idx - 8191] = val
    return
    set a003[idx - 16382] = val
    return
    set a004[idx - 24573] = val
    return
    set a005[idx - 32764] = val
    return
    set a006[idx - 40955] = val
    return
    set a007[idx - 49146] = val
    return
    set a008[idx - 57337] = val
    return
    set a009[idx - 65528] = val
    return
    set a010[idx - 73719] = val
    return
    set a011[idx - 81910] = val
    return
    set a012[idx - 90101] = val
    return
    set a013[idx - 98292] = val
    return
    set a014[idx - 106483] = val
    return
    set a015[idx - 114674] = val
    return
    set a016[idx - 122865] = val
    return
    set a017[idx - 131056] = val
    return
    set a018[idx - 139247] = val
    return
    set a019[idx - 147438] = val
    return
    set a020[idx - 155629] = val
    return
    set a021[idx - 163820] = val
    return
    set a022[idx - 172011] = val
    return
    set a023[idx - 180202] = val
    return
    set a024[idx - 188393] = val
    return
    set a025[idx - 196584] = val
    return
    set a026[idx - 204775] = val
    return
    set a027[idx - 212966] = val
    return
    set a028[idx - 221157] = val
    return
    set a029[idx - 229348] = val
    return
    set a030[idx - 237539] = val
    return
    set a031[idx - 245730] = val
    return
    set a032[idx - 253921] = val
    return
    set a033[idx - 262112] = val
    return
    set a034[idx - 270303] = val
    return
    set a035[idx - 278494] = val
    return
    set a036[idx - 286685] = val
    return
    set a037[idx - 294876] = val
    return
    set a038[idx - 303067] = val
    return
    set a039[idx - 311258] = val
    return
    set a040[idx - 319449] = val
    return
    set a041[idx - 327640] = val
    return
    set a042[idx - 335831] = val
    return
    set a043[idx - 344022] = val
    return
    set a044[idx - 352213] = val
    return
    set a045[idx - 360404] = val
    return
    set a046[idx - 368595] = val
    return
    set a047[idx - 376786] = val
    return
    set a048[idx - 384977] = val
    return
    set a049[idx - 393168] = val
    return
    set a050[idx - 401359] = val
    return
    set a051[idx - 409550] = val
    return
    set a052[idx - 417741] = val
    return
    set a053[idx - 425932] = val
    return
    set a054[idx - 434123] = val
    return
    set a055[idx - 442314] = val
    return
    set a056[idx - 450505] = val
    return
    set a057[idx - 458696] = val
    return
    set a058[idx - 466887] = val
    return
    set a059[idx - 475078] = val
    return
    set a060[idx - 483269] = val
    return
    set a061[idx - 491460] = val
    return
    set a062[idx - 499651] = val
    return
    set a063[idx - 507842] = val
    return
    set a064[idx - 516033] = val
    return
    set a065[idx - 524224] = val
    return
    set a066[idx - 532415] = val
    return
    set a067[idx - 540606] = val
    return
    set a068[idx - 548797] = val
    return
    set a069[idx - 556988] = val
    return
    set a070[idx - 565179] = val
    return
    set a071[idx - 573370] = val
    return
    set a072[idx - 581561] = val
    return
    set a073[idx - 589752] = val
    return
    set a074[idx - 597943] = val
    return
    set a075[idx - 606134] = val
    return
    set a076[idx - 614325] = val
    return
    set a077[idx - 622516] = val
    return
    set a078[idx - 630707] = val
    return
    set a079[idx - 638898] = val
    return
    set a080[idx - 647089] = val
    return
    set a081[idx - 655280] = val
    return
    set a082[idx - 663471] = val
    return
    set a083[idx - 671662] = val
    return
    set a084[idx - 679853] = val
    return
    set a085[idx - 688044] = val
    return
    set a086[idx - 696235] = val
    return
    set a087[idx - 704426] = val
    return
    set a088[idx - 712617] = val
    return
    set a089[idx - 720808] = val
    return
    set a090[idx - 728999] = val
    return
    set a091[idx - 737190] = val
    return
    set a092[idx - 745381] = val
    return
    set a093[idx - 753572] = val
    return
    set a094[idx - 761763] = val
    return
    set a095[idx - 769954] = val
    return
    set a096[idx - 778145] = val
    return
    set a097[idx - 786336] = val
    return
    set a098[idx - 794527] = val
    return
    set a099[idx - 802718] = val
    return
    set a100[idx - 810909] = val
    return
    set a101[idx - 819100] = val
    return
    set a102[idx - 827291] = val
    return
    set a103[idx - 835482] = val
    return
    set a104[idx - 843673] = val
    return
    set a105[idx - 851864] = val
    return
    set a106[idx - 860055] = val
    return
    set a107[idx - 868246] = val
    return
    set a108[idx - 876437] = val
    return
    set a109[idx - 884628] = val
    return
    set a110[idx - 892819] = val
    return
    set a111[idx - 901010] = val
    return
    set a112[idx - 909201] = val
    return
    set a113[idx - 917392] = val
    return
    set a114[idx - 925583] = val
    return
    set a115[idx - 933774] = val
    return
    set a116[idx - 941965] = val
    return
    set a117[idx - 950156] = val
    return
    set a118[idx - 958347] = val
    return
    set a119[idx - 966538] = val
    return
    set a120[idx - 974729] = val
    return
    set a121[idx - 982920] = val
    return
    set a122[idx - 991111] = val
    return
    set a123[idx - 999302] = val
    return
    set a124[idx - 1007493] = val
    return
    set a125[idx - 1015684] = val
    return
    set a126[idx - 1023875] = val
    return
    set a127[idx - 1032066] = val
    return
    set a128[idx - 1040257] = val
    return
endfunction

public function write takes integer i, integer v returns nothing
    set idx = i
    set val = v
    call ForForce(exec, I2C(write1_addr + (80 * (i / 8191))))
endfunction

private function allocate_arrays takes nothing returns nothing
    set a001[8190] = 0
    set a002[8190] = 0
    set a003[8190] = 0
    set a004[8190] = 0
    set a005[8190] = 0
    set a006[8190] = 0
    set a007[8190] = 0
    set a008[8190] = 0
    set a009[8190] = 0
    set a010[8190] = 0
    set a011[8190] = 0
    set a012[8190] = 0
    set a013[8190] = 0
    set a014[8190] = 0
    set a015[8190] = 0
    set a016[8190] = 0
    set a017[8190] = 0
    set a018[8190] = 0
    set a019[8190] = 0
    set a020[8190] = 0
    set a021[8190] = 0
    set a022[8190] = 0
    set a023[8190] = 0
    set a024[8190] = 0
    set a025[8190] = 0
    set a026[8190] = 0
    set a027[8190] = 0
    set a028[8190] = 0
    set a029[8190] = 0
    set a030[8190] = 0
    set a031[8190] = 0
    set a032[8190] = 0
    set a033[8190] = 0
    set a034[8190] = 0
    set a035[8190] = 0
    set a036[8190] = 0
    set a037[8190] = 0
    set a038[8190] = 0
    set a039[8190] = 0
    set a040[8190] = 0
    set a041[8190] = 0
    set a042[8190] = 0
    set a043[8190] = 0
    set a044[8190] = 0
    set a045[8190] = 0
    set a046[8190] = 0
    set a047[8190] = 0
    set a048[8190] = 0
    set a049[8190] = 0
    set a050[8190] = 0
    set a051[8190] = 0
    set a052[8190] = 0
    set a053[8190] = 0
    set a054[8190] = 0
    set a055[8190] = 0
    set a056[8190] = 0
    set a057[8190] = 0
    set a058[8190] = 0
    set a059[8190] = 0
    set a060[8190] = 0
    set a061[8190] = 0
    set a062[8190] = 0
    set a063[8190] = 0
    set a064[8190] = 0
    set a065[8190] = 0
    set a066[8190] = 0
    set a067[8190] = 0
    set a068[8190] = 0
    set a069[8190] = 0
    set a070[8190] = 0
    set a071[8190] = 0
    set a072[8190] = 0
    set a073[8190] = 0
    set a074[8190] = 0
    set a075[8190] = 0
    set a076[8190] = 0
    set a077[8190] = 0
    set a078[8190] = 0
    set a079[8190] = 0
    set a080[8190] = 0
    set a081[8190] = 0
    set a082[8190] = 0
    set a083[8190] = 0
    set a084[8190] = 0
    set a085[8190] = 0
    set a086[8190] = 0
    set a087[8190] = 0
    set a088[8190] = 0
    set a089[8190] = 0
    set a090[8190] = 0
    set a091[8190] = 0
    set a092[8190] = 0
    set a093[8190] = 0
    set a094[8190] = 0
    set a095[8190] = 0
    set a096[8190] = 0
    set a097[8190] = 0
    set a098[8190] = 0
    set a099[8190] = 0
    set a100[8190] = 0
    set a101[8190] = 0
    set a102[8190] = 0
    set a103[8190] = 0
    set a104[8190] = 0
    set a105[8190] = 0
    set a106[8190] = 0
    set a107[8190] = 0
    set a108[8190] = 0
    set a109[8190] = 0
    set a110[8190] = 0
    set a111[8190] = 0
    set a112[8190] = 0
    set a113[8190] = 0
    set a114[8190] = 0
    set a115[8190] = 0
    set a116[8190] = 0
    set a117[8190] = 0
    set a118[8190] = 0
    set a119[8190] = 0
    set a120[8190] = 0
    set a121[8190] = 0
    set a122[8190] = 0
    set a123[8190] = 0
    set a124[8190] = 0
    set a125[8190] = 0
    set a126[8190] = 0
    set a127[8190] = 0
    set a128[8190] = 0
endfunction

private function init takes nothing returns nothing
    set exec = CreateForce()
    call ForceAddPlayer(exec, Player(15))

    call allocate_arrays()

    set read1_addr = C2I(function read1)
    set write1_addr = C2I(function write1)
endfunction

endlibrary

"binary-searchy-if-statements" technique:
JASS:
if i < 524224 then
    if i < 262112 then
        if i < 131056 then
            if i < 65528 then
                if i < 32764 then
                    if i < 16382 then
                        if i < 8191 then
                            return array1[i]
                        else
                            return array2[i - 8191]
                        endif
                    else // if i >= 16382 then
                        if i < 24573 then
                            return array3[i - 16382]
                        else
                            return array4[i - 24573]
                        endif
                    endif
                else // if i >= 32764 then
                    if i < 49146 then
                        if i < 40955 then
                            return array5[i - 32764]
                        else
                            return array6[i - 40955]
                        endif
                    else // if i >= 49146 then
                        if i < 57337 then
                            return array7[i - 49146]
                        else
                            return array8[i - 57337]
                        endif
                    endif
                endif
            else // if i >= 65528 then
                if i < 98292 then
                    if i < 81910 then
                        if i < 73719 then
                            return array9[i - 65528]
                        else
                            return array10[i - 73719]
                        endif
                    else // if i >= 81910 then
                        if i < 90101 then
                            return array11[i - 81910]
                        else
                            return array12[i - 90101]
                        endif
                    endif
                else // if i >= 98292 then
                    if i < 114674 then
                        if i < 106483 then
                            return array13[i - 98292]
                        else
                            return array14[i - 106483]
                        endif
                    else // if i >= 114674 then
                        if i < 122865 then
                            return array15[i - 114674]
                        else
                            return array16[i - 122865]
                        endif
                    endif
                endif
            endif
        else // if i >= 131056 then
            if i < 196584 then
                if i < 163820 then
                    if i < 147438 then
                        if i < 139247 then
                            return array17[i - 131056]
                        else
                            return array18[i - 139247]
                        endif
                    else // if i >= 147438 then
                        if i < 155629 then
                            return array19[i - 147438]
                        else
                            return array20[i - 155629]
                        endif
                    endif
                else // if i >= 163820 then
                    if i < 180202 then
                        if i < 172011 then
                            return array21[i - 163820]
                        else
                            return array22[i - 172011]
                        endif
                    else // if i >= 180202 then
                        if i < 188393 then
                            return array23[i - 180202]
                        else
                            return array24[i - 188393]
                        endif
                    endif
                endif
            else // if i >= 196584 then
                if i < 229348 then
                    if i < 212966 then
                        if i < 204775 then
                            return array25[i - 196584]
                        else
                            return array26[i - 204775]
                        endif
                    else // if i >= 212966 then
                        if i < 221157 then
                            return array27[i - 212966]
                        else
                            return array28[i - 221157]
                        endif
                    endif
                else // if i >= 229348 then
                    if i < 245730 then
                        if i < 237539 then
                            return array29[i - 229348]
                        else
                            return array30[i - 237539]
                        endif
                    else // if i >= 245730 then
                        if i < 253921 then
                            return array31[i - 245730]
                        else
                            return array32[i - 253921]
                        endif
                    endif
                endif
            endif
        endif
    else // if i >= 262112 then
        if i < 393168 then
            if i < 327640 then
                if i < 294876 then
                    if i < 278494 then
                        if i < 270303 then
                            return array33[i - 262112]
                        else
                            return array34[i - 270303]
                        endif
                    else // if i >= 278494 then
                        if i < 286685 then
                            return array35[i - 278494]
                        else
                            return array36[i - 286685]
                        endif
                    endif
                else // if i >= 294876 then
                    if i < 311258 then
                        if i < 303067 then
                            return array37[i - 294876]
                        else
                            return array38[i - 303067]
                        endif
                    else // if i >= 311258 then
                        if i < 319449 then
                            return array39[i - 311258]
                        else
                            return array40[i - 319449]
                        endif
                    endif
                endif
            else // if i >= 327640 then
                if i < 360404 then
                    if i < 344022 then
                        if i < 335831 then
                            return array41[i - 327640]
                        else
                            return array42[i - 335831]
                        endif
                    else // if i >= 344022 then
                        if i < 352213 then
                            return array43[i - 344022]
                        else
                            return array44[i - 352213]
                        endif
                    endif
                else // if i >= 360404 then
                    if i < 376786 then
                        if i < 368595 then
                            return array45[i - 360404]
                        else
                            return array46[i - 368595]
                        endif
                    else // if i >= 376786 then
                        if i < 384977 then
                            return array47[i - 376786]
                        else
                            return array48[i - 384977]
                        endif
                    endif
                endif
            endif
        else // if i >= 393168 then
            if i < 458696 then
                if i < 425932 then
                    if i < 409550 then
                        if i < 401359 then
                            return array49[i - 393168]
                        else
                            return array50[i - 401359]
                        endif
                    else // if i >= 409550 then
                        if i < 417741 then
                            return array51[i - 409550]
                        else
                            return array52[i - 417741]
                        endif
                    endif
                else // if i >= 425932 then
                    if i < 442314 then
                        if i < 434123 then
                            return array53[i - 425932]
                        else
                            return array54[i - 434123]
                        endif
                    else // if i >= 442314 then
                        if i < 450505 then
                            return array55[i - 442314]
                        else
                            return array56[i - 450505]
                        endif
                    endif
                endif
            else // if i >= 458696 then
                if i < 491460 then
                    if i < 475078 then
                        if i < 466887 then
                            return array57[i - 458696]
                        else
                            return array58[i - 466887]
                        endif
                    else // if i >= 475078 then
                        if i < 483269 then
                            return array59[i - 475078]
                        else
                            return array60[i - 483269]
                        endif
                    endif
                else // if i >= 491460 then
                    if i < 507842 then
                        if i < 499651 then
                            return array61[i - 491460]
                        else
                            return array62[i - 499651]
                        endif
                    else // if i >= 507842 then
                        if i < 516033 then
                            return array63[i - 507842]
                        else
                            return array64[i - 516033]
                        endif
                    endif
                endif
            endif
        endif
    endif
else // if i >= 524224 then
    if i < 786336 then
        if i < 655280 then
            if i < 589752 then
                if i < 556988 then
                    if i < 540606 then
                        if i < 532415 then
                            return array65[i - 524224]
                        else
                            return array66[i - 532415]
                        endif
                    else // if i >= 540606 then
                        if i < 548797 then
                            return array67[i - 540606]
                        else
                            return array68[i - 548797]
                        endif
                    endif
                else // if i >= 556988 then
                    if i < 573370 then
                        if i < 565179 then
                            return array69[i - 556988]
                        else
                            return array70[i - 565179]
                        endif
                    else // if i >= 573370 then
                        if i < 581561 then
                            return array71[i - 573370]
                        else
                            return array72[i - 581561]
                        endif
                    endif
                endif
            else // if i >= 589752 then
                if i < 622516 then
                    if i < 606134 then
                        if i < 597943 then
                            return array73[i - 589752]
                        else
                            return array74[i - 597943]
                        endif
                    else // if i >= 606134 then
                        if i < 614325 then
                            return array75[i - 606134]
                        else
                            return array76[i - 614325]
                        endif
                    endif
                else // if i >= 622516 then
                    if i < 638898 then
                        if i < 630707 then
                            return array77[i - 622516]
                        else
                            return array78[i - 630707]
                        endif
                    else // if i >= 638898 then
                        if i < 647089 then
                            return array79[i - 638898]
                        else
                            return array80[i - 647089]
                        endif
                    endif
                endif
            endif
        else // if i >= 655280 then
            if i < 720808 then
                if i < 688044 then
                    if i < 671662 then
                        if i < 663471 then
                            return array81[i - 655280]
                        else
                            return array82[i - 663471]
                        endif
                    else // if i >= 671662 then
                        if i < 679853 then
                            return array83[i - 671662]
                        else
                            return array84[i - 679853]
                        endif
                    endif
                else // if i >= 688044 then
                    if i < 704426 then
                        if i < 696235 then
                            return array85[i - 688044]
                        else
                            return array86[i - 696235]
                        endif
                    else // if i >= 704426 then
                        if i < 712617 then
                            return array87[i - 704426]
                        else
                            return array88[i - 712617]
                        endif
                    endif
                endif
            else // if i >= 720808 then
                if i < 753572 then
                    if i < 737190 then
                        if i < 728999 then
                            return array89[i - 720808]
                        else
                            return array90[i - 728999]
                        endif
                    else // if i >= 737190 then
                        if i < 745381 then
                            return array91[i - 737190]
                        else
                            return array92[i - 745381]
                        endif
                    endif
                else // if i >= 753572 then
                    if i < 769954 then
                        if i < 761763 then
                            return array93[i - 753572]
                        else
                            return array94[i - 761763]
                        endif
                    else // if i >= 769954 then
                        if i < 778145 then
                            return array95[i - 769954]
                        else
                            return array96[i - 778145]
                        endif
                    endif
                endif
            endif
        endif
    else // if i >= 786336 then
        if i < 917392 then
            if i < 851864 then
                if i < 819100 then
                    if i < 802718 then
                        if i < 794527 then
                            return array97[i - 786336]
                        else
                            return array98[i - 794527]
                        endif
                    else // if i >= 802718 then
                        if i < 810909 then
                            return array99[i - 802718]
                        else
                            return array100[i - 810909]
                        endif
                    endif
                else // if i >= 819100 then
                    if i < 835482 then
                        if i < 827291 then
                            return array101[i - 819100]
                        else
                            return array102[i - 827291]
                        endif
                    else // if i >= 835482 then
                        if i < 843673 then
                            return array103[i - 835482]
                        else
                            return array104[i - 843673]
                        endif
                    endif
                endif
            else // if i >= 851864 then
                if i < 884628 then
                    if i < 868246 then
                        if i < 860055 then
                            return array105[i - 851864]
                        else
                            return array106[i - 860055]
                        endif
                    else // if i >= 868246 then
                        if i < 876437 then
                            return array107[i - 868246]
                        else
                            return array108[i - 876437]
                        endif
                    endif
                else // if i >= 884628 then
                    if i < 901010 then
                        if i < 892819 then
                            return array109[i - 884628]
                        else
                            return array110[i - 892819]
                        endif
                    else // if i >= 901010 then
                        if i < 909201 then
                            return array111[i - 901010]
                        else
                            return array112[i - 909201]
                        endif
                    endif
                endif
            endif
        else // if i >= 917392 then
            if i < 982920 then
                if i < 950156 then
                    if i < 933774 then
                        if i < 925583 then
                            return array113[i - 917392]
                        else
                            return array114[i - 925583]
                        endif
                    else // if i >= 933774 then
                        if i < 941965 then
                            return array115[i - 933774]
                        else
                            return array116[i - 941965]
                        endif
                    endif
                else // if i >= 950156 then
                    if i < 966538 then
                        if i < 958347 then
                            return array117[i - 950156]
                        else
                            return array118[i - 958347]
                        endif
                    else // if i >= 966538 then
                        if i < 974729 then
                            return array119[i - 966538]
                        else
                            return array120[i - 974729]
                        endif
                    endif
                endif
            else // if i >= 982920 then
                if i < 1015684 then
                    if i < 999302 then
                        if i < 991111 then
                            return array121[i - 982920]
                        else
                            return array122[i - 991111]
                        endif
                    else // if i >= 999302 then
                        if i < 1007493 then
                            return array123[i - 999302]
                        else
                            return array124[i - 1007493]
                        endif
                    endif
                else // if i >= 1015684 then
                    if i < 1032066 then
                        if i < 1023875 then
                            return array125[i - 1015684]
                        else
                            return array126[i - 1023875]
                        endif
                    else // if i >= 1032066 then
                        if i < 1040257 then
                            return array127[i - 1032066]
                        else
                            return array128[i - 1040257]
                        endif
                    endif
                endif
            endif
        endif
    endif
endif
 
It seems more of a proof-of-concept thing and if Typecasting is fully supported by Blizzard, I wouldn't see why not make this library possible.

Insofar, I would like to speculate that the binary technique, though log n to the base 2 (obviously), would be faster up until we reach tens or hundreds of millions worth of indices, and from that point, the array-that-should-have-been-but-blizzard-cut-it-to-8192 would beat the monstrous binary search tree; and that's only for one biggish variable array.

As far as I've heard or recall, (note that this is my opinion) hashtables in Warcraft 3 behave like linked lists and might deteriorate in performance over time (search) as more assignments are made.

That's about it regarding the library itself.
 
Last edited:
Level 29
Joined
Jul 29, 2007
Messages
5,174
While naive hashtable implementation use linked lists for their buckets (to handle collisions), this is not a must.
Either way, unless you have some source, you don't know what WC3 has.
And even more important, STOP SPREADING RANDOM CRAP ABOUT HASHTABLES BEING SLOW.
Thanks.

About the thread itself - it's a really amusing hack, but sadly if it's not faster than the alternatives...
10/10 for imagination.
 
Status
Not open for further replies.
Top