- Joined
- Apr 24, 2012
- Messages
- 5,113
Sometime ago I deleted some of my resources which doesn't use Unit Indexer and instead used my own indexing method (our indexing method). This is allocating ofc.
But the flaws of those resources is that they must have a much faster lookup, so that it won't have to iterate the lists everytime it has to lookup an index.
Solution is that I have to create a hashtable, but It seems to be expensive just for a lookup, so I decided to create this monstrosity:
So many people are going to hate me, but I have no choice
But the flaws of those resources is that they must have a much faster lookup, so that it won't have to iterate the lists everytime it has to lookup an index.
Solution is that I have to create a hashtable, but It seems to be expensive just for a lookup, so I decided to create this monstrosity:
JASS:
//*************************************************************************************
//*
//* Table by Almia
//*
//* Vanilla JASS Implementation of Bribe's Table
//*
//*************************************************************************************
//*
//* API
//*
//* function InitTable takes nothing returns boolean
//* - Initialize System, optional
//* function CreateTable takes nothing returns integer
//* - Creates table instance
//* function IsTable takes integer i returns boolean
//* - Checks if instance is a table
//* function FlushTable takes integer t returns nothing
//* - Flushes table memory
//* function DestroyTable takes integer t returns nothing
//* - Destroys table
//*
//* SAVE API
//*
//* function TableSaveInteger takes integer t, integer key, integer val returns nothing
//* function TableSaveReal takes integer t, integer key, real val returns nothing
//* function TableSaveBoolean takes integer t, integer key, boolean val returns nothing
//* function TableSaveStr takes integer t, integer key, string val returns nothing
//*
//* function TableSavePlayer takes integer t, integer key, player val returns nothing
//* function TableSaveWidget takes integer t, integer key, widget val returns nothing
//* function TableSaveDestructable takes integer t, integer key, destructable val returns nothing
//* function TableSaveItem takes integer t, integer key, item val returns nothing
//* function TableSaveUnit takes integer t, integer key, unit val returns nothing
//* function TableSaveAbility takes integer t, integer key, ability val returns nothing
//* function TableSaveTimer takes integer t, integer key, timer val returns nothing
//* function TableSaveTrigger takes integer t, integer key, trigger val returns nothing
//* function TableSaveTriggerCondition takes integer t, integer key, triggercondition val returns nothing
//* function TableSaveTriggerAction takes integer t, integer key, triggeraction val returns nothing
//* function TableSaveTriggerEvent takes integer t, integer key, event val returns nothing
//* function TableSaveForce takes integer t, integer key, force val returns nothing
//* function TableSaveGroup takes integer t, integer key, group val returns nothing
//* function TableSaveLocation takes integer t, integer key, location val returns nothing
//* function TableSaveRect takes integer t, integer key, rect val returns nothing
//* function TableSaveBooleanExpr takes integer t, integer key, boolexpr val returns nothing
//* function TableSaveSound takes integer t, integer key, sound val returns nothing
//* function TableSaveEffect takes integer t, integer key, effect val returns nothing
//* function TableSaveUnitPool takes integer t, integer key, unitpool val returns nothing
//* function TableSaveItemPool takes integer t, integer key, itempool val returns nothing
//* function TableSaveQuest takes integer t, integer key, quest val returns nothing
//* function TableSaveQuestItem takes integer t, integer key, questitem val returns nothing
//* function TableSaveDefeatCondition takes integer t, integer key, defeatcondition val returns nothing
//* function TableSaveTimerDialog takes integer t, integer key, timerdialog val returns nothing
//* function TableSaveLeaderboard takes integer t, integer key, leaderboard val returns nothing
//* function TableSaveMultiboard takes integer t, integer key, multiboard val returns nothing
//* function TableSaveMultiboardItem takes integer t, integer key, multiboarditem val returns nothing
//* function TableSaveTrackable takes integer t, integer key, trackable val returns nothing
//* function TableSaveDialog takes integer t, integer key, dialog val returns nothing
//* function TableSaveButton takes integer t, integer key, button val returns nothing
//* function TableSaveTextTag takes integer t, integer key, texttag val returns nothing
//* function TableSaveLightning takes integer t, integer key, lightning val returns nothing
//* function TableSaveImage takes integer t, integer key, image val returns nothing
//* function TableSaveUbersplat takes integer t, integer key, ubersplat val returns nothing
//* function TableSaveRegion takes integer t, integer key, region val returns nothing
//* function TableSaveFogState takes integer t, integer key, fogstate val returns nothing
//* function TableSaveFogModifier takes integer t, integer key, fogmodifier val returns nothing
//* function TableSaveAgent takes integer t, integer key, agent val returns nothing
//* function TableSaveHashtable takes integer t, integer key, hashtable val returns nothing
//*
//* LOAD API
//*
//* function TableLoadInteger takes integer t, integer key returns integer
//* function TableLoadReal takes integer t, integer key returns real
//* function TableLoadBoolean takes integer t, integer key returns boolean
//* function TableLoadStr takes integer t, integer key returns string
//*
//* function TableLoadPlayer takes integer t, integer key returns player
//* function TableLoadWidget takes integer t, integer key returns widget
//* function TableLoadDestructable takes integer t, integer key returns destructable
//* function TableLoadItem takes integer t, integer key returns item
//* function TableLoadUnit takes integer t, integer key returns unit
//* function TableLoadAbility takes integer t, integer key returns ability
//* function TableLoadTimer takes integer t, integer key returns timer
//* function TableLoadTrigger takes integer t, integer key returns trigger
//* function TableLoadTriggerCondition takes integer t, integer key returns triggercondition
//* function TableLoadTriggerAction takes integer t, integer key returns triggeraction
//* function TableLoadTriggerEvent takes integer t, integer key returns event
//* function TableLoadForce takes integer t, integer key returns force
//* function TableLoadGroup takes integer t, integer key returns group
//* function TableLoadLocation takes integer t, integer key returns location
//* function TableLoadRect takes integer t, integer key returns rect
//* function TableLoadBooleanExpr takes integer t, integer key returns boolexpr
//* function TableLoadSound takes integer t, integer key returns sound
//* function TableLoadEffect takes integer t, integer key returns effect
//* function TableLoadUnitPool takes integer t, integer key returns unitpool
//* function TableLoadItemPool takes integer t, integer key returns itempool
//* function TableLoadQuest takes integer t, integer key returns quest
//* function TableLoadQuestItem takes integer t, integer key returns questitem
//* function TableLoadDefeatCondition takes integer t, integer key returns defeatcondition
//* function TableLoadTimerDialog takes integer t, integer key returns timerdialog
//* function TableLoadLeaderboard takes integer t, integer key returns leaderboard
//* function TableLoadMultiboard takes integer t, integer key returns multiboard
//* function TableLoadMultiboardItem takes integer t, integer key returns multiboarditem
//* function TableLoadTrackable takes integer t, integer key returns trackable
//* function TableLoadDialog takes integer t, integer key returns dialog
//* function TableLoadButton takes integer t, integer key returns button
//* function TableLoadTextTag takes integer t, integer key returns texttag
//* function TableLoadLightning takes integer t, integer key returns lightning
//* function TableLoadImage takes integer t, integer key returns image
//* function TableLoadUbersplat takes integer t, integer key returns ubersplat
//* function TableLoadRegion takes integer t, integer key returns region
//* function TableLoadFogState takes integer t, integer key returns fogstate
//* function TableLoadFogModifier takes integer t, integer key returns fogmodifier
//* function TableLoadHashtable takes integer t, integer key returns hashtable
//*
//* HAS API
//*
//* function TableHasInteger takes integer t, integer key returns boolean
//* function TableHasReal takes integer t, integer key returns boolean
//* function TableHasBoolean takes integer t, integer key returns boolean
//* function TableHasString takes integer t, integer key returns boolean
//* function TableHasHandle takes integer t, integer key returns boolean
//*
//* REMOVE API
//*
//* function TableRemoveInteger takes integer t, integer key returns nothing
//* function TableRemoveReal takes integer t, integer key returns nothing
//* function TableRemoveBoolean takes integer t, integer key returns nothing
//* function TableRemoveString takes integer t, integer key returns nothing
//* function TableRemoveHandle takes integer t, integer key returns nothing
//*
//*************************************************************************************
//*
//* Credits
//*
//* Bribe - Table
//*
//*************************************************************************************
function InitTable takes nothing returns boolean
if udg_Table == null then
set udg_Table = InitHashtable()
set udg_Table_R[0] = 1
return true
endif
return false
endfunction
function FlushTable takes integer t returns nothing
call FlushChildHashtable(udg_Table, t)
endfunction
function CreateTable takes nothing returns integer
local integer i = udg_Table_R[0]
if InitTable() then
set i = 1
endif
if udg_Table_R[i] == 0 then
set udg_Table_R[0] = i + 1
else
set udg_Table_R[0] = udg_Table_R[i]
call FlushTable(i)
endif
set udg_IsTable[i] = true
return i
endfunction
function IsTable takes integer i returns boolean
return udg_IsTable[i]
endfunction
function DestroyTable takes integer t returns nothing
call FlushTable(t)
set udg_Table_R[t] = udg_Table_R[0]
set udg_Table_R[0] = t
set udg_IsTable[t] = false
endfunction
//*************************************************************************************
//*
//* Save and Load Handles
//*
//*************************************************************************************
function TableSavePlayer takes integer t, integer key, player val returns nothing
if IsTable(t) then
call SavePlayerHandle(udg_Table, t, key, val)
endif
endfunction
function TableLoadPlayer takes integer t, integer key returns player
return LoadPlayerHandle(udg_Table, t, key)
endfunction
function TableSaveWidget takes integer t, integer key, widget val returns nothing
if IsTable(t) then
call SaveWidgetHandle(udg_Table, t, key, val)
endif
endfunction
function TableLoadWidget takes integer t, integer key returns widget
return LoadWidgetHandle(udg_Table, t, key)
endfunction
function TableSaveDestructable takes integer t, integer key, destructable val returns nothing
if IsTable(t) then
call SaveDestructableHandle(udg_Table, t, key, val)
endif
endfunction
function TableLoadDestructable takes integer t, integer key returns destructable
return LoadDestructableHandle(udg_Table, t, key)
endfunction
function TableSaveItem takes integer t, integer key, item val returns nothing
if IsTable(t) then
call SaveItemHandle(udg_Table, t, key, val)
endif
endfunction
function TableLoadItem takes integer t, integer key returns item
return LoadItemHandle(udg_Table, t, key)
endfunction
function TableSaveUnit takes integer t, integer key, unit val returns nothing
if IsTable(t) then
call SaveUnitHandle(udg_Table, t, key, val)
endif
endfunction
function TableLoadUnit takes integer t, integer key returns unit
return LoadUnitHandle(udg_Table, t, key)
endfunction
function TableSaveAbility takes integer t, integer key, ability val returns nothing
if IsTable(t) then
call SaveAbilityHandle(udg_Table, t, key, val)
endif
endfunction
function TableLoadAbility takes integer t, integer key returns ability
return LoadAbilityHandle(udg_Table, t, key)
endfunction
function TableSaveTimer takes integer t, integer key, timer val returns nothing
if IsTable(t) then
call SaveTimerHandle(udg_Table, t, key, val)
endif
endfunction
function TableLoadTimer takes integer t, integer key returns timer
return LoadTimerHandle(udg_Table, t, key)
endfunction
function TableSaveTrigger takes integer t, integer key, trigger val returns nothing
if IsTable(t) then
call SaveTriggerHandle(udg_Table, t, key, val)
endif
endfunction
function TableLoadTrigger takes integer t, integer key returns trigger
return LoadTriggerHandle(udg_Table, t, key)
endfunction
function TableSaveTriggerCondition takes integer t, integer key, triggercondition val returns nothing
if IsTable(t) then
call SaveTriggerConditionHandle(udg_Table, t, key, val)
endif
endfunction
function TableLoadTriggerCondition takes integer t, integer key returns triggercondition
return LoadTriggerConditionHandle(udg_Table, t, key)
endfunction
function TableSaveTriggerAction takes integer t, integer key, triggeraction val returns nothing
if IsTable(t) then
call SaveTriggerActionHandle(udg_Table, t, key, val)
endif
endfunction
function TableLoadTriggerAction takes integer t, integer key returns triggeraction
return LoadTriggerActionHandle(udg_Table, t, key)
endfunction
function TableSaveTriggerEvent takes integer t, integer key, event val returns nothing
if IsTable(t) then
call SaveTriggerEventHandle(udg_Table, t, key, val)
endif
endfunction
function TableLoadTriggerEvent takes integer t, integer key returns event
return LoadTriggerEventHandle(udg_Table, t, key)
endfunction
function TableSaveForce takes integer t, integer key, force val returns nothing
if IsTable(t) then
call SaveForceHandle(udg_Table, t, key, val)
endif
endfunction
function TableLoadForce takes integer t, integer key returns force
return LoadForceHandle(udg_Table, t, key)
endfunction
function TableSaveGroup takes integer t, integer key, group val returns nothing
if IsTable(t) then
call SaveGroupHandle(udg_Table, t, key, val)
endif
endfunction
function TableLoadGroup takes integer t, integer key returns group
return LoadGroupHandle(udg_Table, t, key)
endfunction
function TableSaveLocation takes integer t, integer key, location val returns nothing
if IsTable(t) then
call SaveLocationHandle(udg_Table, t, key, val)
endif
endfunction
function TableLoadLocation takes integer t, integer key returns location
return LoadLocationHandle(udg_Table, t, key)
endfunction
function TableSaveRect takes integer t, integer key, rect val returns nothing
if IsTable(t) then
call SaveRectHandle(udg_Table, t, key, val)
endif
endfunction
function TableLoadRect takes integer t, integer key returns rect
return LoadRectHandle(udg_Table, t, key)
endfunction
function TableSaveBooleanExpr takes integer t, integer key, boolexpr val returns nothing
if IsTable(t) then
call SaveBooleanExprHandle(udg_Table, t, key, val)
endif
endfunction
function TableLoadBooleanExpr takes integer t, integer key returns boolexpr
return LoadBooleanExprHandle(udg_Table, t, key)
endfunction
function TableSaveSound takes integer t, integer key, sound val returns nothing
if IsTable(t) then
call SaveSoundHandle(udg_Table, t, key, val)
endif
endfunction
function TableLoadSound takes integer t, integer key returns sound
return LoadSoundHandle(udg_Table, t, key)
endfunction
function TableSaveEffect takes integer t, integer key, effect val returns nothing
if IsTable(t) then
call SaveEffectHandle(udg_Table, t, key, val)
endif
endfunction
function TableLoadEffect takes integer t, integer key returns effect
return LoadEffectHandle(udg_Table, t, key)
endfunction
function TableSaveUnitPool takes integer t, integer key, unitpool val returns nothing
if IsTable(t) then
call SaveUnitPoolHandle(udg_Table, t, key, val)
endif
endfunction
function TableLoadUnitPool takes integer t, integer key returns unitpool
return LoadUnitPoolHandle(udg_Table, t, key)
endfunction
function TableSaveItemPool takes integer t, integer key, itempool val returns nothing
if IsTable(t) then
call SaveItemPoolHandle(udg_Table, t, key, val)
endif
endfunction
function TableLoadItemPool takes integer t, integer key returns itempool
return LoadItemPoolHandle(udg_Table, t, key)
endfunction
function TableSaveQuest takes integer t, integer key, quest val returns nothing
if IsTable(t) then
call SaveQuestHandle(udg_Table, t, key, val)
endif
endfunction
function TableLoadQuest takes integer t, integer key returns quest
return LoadQuestHandle(udg_Table, t, key)
endfunction
function TableSaveQuestItem takes integer t, integer key, questitem val returns nothing
if IsTable(t) then
call SaveQuestItemHandle(udg_Table, t, key, val)
endif
endfunction
function TableLoadQuestItem takes integer t, integer key returns questitem
return LoadQuestItemHandle(udg_Table, t, key)
endfunction
function TableSaveDefeatCondition takes integer t, integer key, defeatcondition val returns nothing
if IsTable(t) then
call SaveDefeatConditionHandle(udg_Table, t, key, val)
endif
endfunction
function TableLoadDefeatCondition takes integer t, integer key returns defeatcondition
return LoadDefeatConditionHandle(udg_Table, t, key)
endfunction
function TableSaveTimerDialog takes integer t, integer key, timerdialog val returns nothing
if IsTable(t) then
call SaveTimerDialogHandle(udg_Table, t, key, val)
endif
endfunction
function TableLoadTimerDialog takes integer t, integer key returns timerdialog
return LoadTimerDialogHandle(udg_Table, t, key)
endfunction
function TableSaveLeaderboard takes integer t, integer key, leaderboard val returns nothing
if IsTable(t) then
call SaveLeaderboardHandle(udg_Table, t, key, val)
endif
endfunction
function TableLoadLeaderboard takes integer t, integer key returns leaderboard
return LoadLeaderboardHandle(udg_Table, t, key)
endfunction
function TableSaveMultiboard takes integer t, integer key, multiboard val returns nothing
if IsTable(t) then
call SaveMultiboardHandle(udg_Table, t, key, val)
endif
endfunction
function TableLoadMultiboard takes integer t, integer key returns multiboard
return LoadMultiboardHandle(udg_Table, t, key)
endfunction
function TableSaveMultiboardItem takes integer t, integer key, multiboarditem val returns nothing
if IsTable(t) then
call SaveMultiboardItemHandle(udg_Table, t, key, val)
endif
endfunction
function TableLoadMultiboardItem takes integer t, integer key returns multiboarditem
return LoadMultiboardItemHandle(udg_Table, t, key)
endfunction
function TableSaveTrackable takes integer t, integer key, trackable val returns nothing
if IsTable(t) then
call SaveTrackableHandle(udg_Table, t, key, val)
endif
endfunction
function TableLoadTrackable takes integer t, integer key returns trackable
return LoadTrackableHandle(udg_Table, t, key)
endfunction
function TableSaveDialog takes integer t, integer key, dialog val returns nothing
if IsTable(t) then
call SaveDialogHandle(udg_Table, t, key, val)
endif
endfunction
function TableLoadDialog takes integer t, integer key returns dialog
return LoadDialogHandle(udg_Table, t, key)
endfunction
function TableSaveButton takes integer t, integer key, button val returns nothing
if IsTable(t) then
call SaveButtonHandle(udg_Table, t, key, val)
endif
endfunction
function TableLoadButton takes integer t, integer key returns button
return LoadButtonHandle(udg_Table, t, key)
endfunction
function TableSaveTextTag takes integer t, integer key, texttag val returns nothing
if IsTable(t) then
call SaveTextTagHandle(udg_Table, t, key, val)
endif
endfunction
function TableLoadTextTag takes integer t, integer key returns texttag
return LoadTextTagHandle(udg_Table, t, key)
endfunction
function TableSaveLightning takes integer t, integer key, lightning val returns nothing
if IsTable(t) then
call SaveLightningHandle(udg_Table, t, key, val)
endif
endfunction
function TableLoadLightning takes integer t, integer key returns lightning
return LoadLightningHandle(udg_Table, t, key)
endfunction
function TableSaveImage takes integer t, integer key, image val returns nothing
if IsTable(t) then
call SaveImageHandle(udg_Table, t, key, val)
endif
endfunction
function TableLoadImage takes integer t, integer key returns image
return LoadImageHandle(udg_Table, t, key)
endfunction
function TableSaveUbersplat takes integer t, integer key, ubersplat val returns nothing
if IsTable(t) then
call SaveUbersplatHandle(udg_Table, t, key, val)
endif
endfunction
function TableLoadUbersplat takes integer t, integer key returns ubersplat
return LoadUbersplatHandle(udg_Table, t, key)
endfunction
function TableSaveRegion takes integer t, integer key, region val returns nothing
if IsTable(t) then
call SaveRegionHandle(udg_Table, t, key, val)
endif
endfunction
function TableLoadRegion takes integer t, integer key returns region
return LoadRegionHandle(udg_Table, t, key)
endfunction
function TableSaveFogState takes integer t, integer key, fogstate val returns nothing
if IsTable(t) then
call SaveFogStateHandle(udg_Table, t, key, val)
endif
endfunction
function TableLoadFogState takes integer t, integer key returns fogstate
return LoadFogStateHandle(udg_Table, t, key)
endfunction
function TableSaveFogModifier takes integer t, integer key, fogmodifier val returns nothing
if IsTable(t) then
call SaveFogModifierHandle(udg_Table, t, key, val)
endif
endfunction
function TableLoadFogModifier takes integer t, integer key returns fogmodifier
return LoadFogModifierHandle(udg_Table, t, key)
endfunction
function TableSaveHashtable takes integer t, integer key, hashtable val returns nothing
if IsTable(t) then
call SaveHashtableHandle(udg_Table, t, key, val)
endif
endfunction
function TableLoadHashtable takes integer t, integer key returns hashtable
return LoadHashtableHandle(udg_Table, t, key)
endfunction
//*************************************************************************************
//*
//* Save Load Integer, Real, Boolean, String
//*
//*************************************************************************************
function TableSaveInteger takes integer t, integer key, integer val returns nothing
if IsTable(t) then
call SaveInteger(udg_Table, t, key, val)
endif
endfunction
function TableLoadInteger takes integer t, integer key returns integer
return LoadInteger(udg_Table, t, key)
endfunction
function TableSaveReal takes integer t, integer key, real val returns nothing
if IsTable(t) then
call SaveReal(udg_Table, t, key, val)
endif
endfunction
function TableLoadReal takes integer t, integer key returns real
return LoadReal(udg_Table, t, key)
endfunction
function TableSaveBoolean takes integer t, integer key, boolean val returns nothing
if IsTable(t) then
call SaveBoolean(udg_Table, t, key, val)
endif
endfunction
function TableLoadBoolean takes integer t, integer key returns boolean
return LoadBoolean(udg_Table, t, key)
endfunction
function TableSaveStr takes integer t, integer key, string val returns nothing
if IsTable(t) then
call SaveStr(udg_Table, t, key, val)
endif
endfunction
function TableLoadStr takes integer t, integer key returns string
return LoadStr(udg_Table, t, key)
endfunction
//*************************************************************************************
//*
//* Save Agent
//*
//*************************************************************************************
function TableSaveAgent takes integer t, integer key, agent val returns nothing
if IsTable(t) then
call SaveAgentHandle(udg_Table, t, key, val)
endif
endfunction
//*************************************************************************************
//*
//* Has / Remove Functionality
//*
//*************************************************************************************
function TableHasInteger takes integer t, integer key returns boolean
return HaveSavedInteger(udg_Table, t, key)
endfunction
function TableRemoveInteger takes integer t, integer key returns nothing
call RemoveSavedInteger(udg_Table, t, key)
endfunction
function TableHasReal takes integer t, integer key returns boolean
return HaveSavedReal(udg_Table, t, key)
endfunction
function TableRemoveReal takes integer t, integer key returns nothing
call RemoveSavedReal(udg_Table, t, key)
endfunction
function TableHasBoolean takes integer t, integer key returns boolean
return HaveSavedBoolean(udg_Table, t, key)
endfunction
function TableRemoveBoolean takes integer t, integer key returns nothing
call RemoveSavedBoolean(udg_Table, t, key)
endfunction
function TableHasString takes integer t, integer key returns boolean
return HaveSavedString(udg_Table, t, key)
endfunction
function TableRemoveString takes integer t, integer key returns nothing
call RemoveSavedString(udg_Table, t, key)
endfunction
function TableHasHandle takes integer t, integer key returns boolean
return HaveSavedHandle(udg_Table, t, key)
endfunction
function TableRemoveHandle takes integer t, integer key returns nothing
call RemoveSavedHandle(udg_Table, t, key)
endfunction
So many people are going to hate me, but I have no choice
