• 🏆 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!

Alternate API for Hashtables

Level 23
Joined
Apr 16, 2012
Messages
4,041
Many people use Hashtables for their spells, systems, whatever
However the API of hashtables is little bit too long, for instance
SaveUnitHandle, doesn't it seem too long?
What about SaveUnit, or even SUnit?
If you are interested, take a look below:

JASS:
library AlternateHashApi //by edo494 version 1.0


/*
*   This Alternate API for Hashtables can be used by those
*   who are quite lazy to write SaveUnitHandle(...) and other
*   endless long codes.
*
*========================================================================
*
*   I also provide some spells to prove that it works
*   and is no slower then normal Hashtables.
*
*========================================================================
*
*   Using This API allows you to call SaveUnit / SUnit instead of SaveUnitHandle
*   and this applies to everything which has handle in it.
*
*========================================================================
*
*   functions with shortened names:
*
*       pk = parentkey
*       ck = childkey
*
*
*
*       Save = S
*       Load = L
*       Have = H
*       Remove = R
*
*
*       QuestItem => QItem
*       Destructable => Destruct
*       Location => Loc
*       DefeatCondition => DefCond
*       MultiBoardItem => MbItem
*       Lightning => Light
*       Ubersplat => Uber
*       Region => Reg
*       FogModifier => FogModif
*       Hashtable => Hash
*
*========================================================================
*
*       Examples:
*
*       call SaveQuestItem(hashtable, parentkey, childkey questitem q)
*
*   is equal to
*
*       call SaveQItem(hashtable, parentkey, childkey, questitem q)
*
*   which is equal to
*
*       call SQItem(hashtable, parentkey, childkey, questitem q)
*
*
*
*       call LoadUnit(hashtable, parentkey, childkey)
*
*   is equal to
*
*       call LUnit(hashtable, parentkey, childkey)
*
*
*
*       call HaveSavedBoolean(hashtable, parentkey, childkey)
*
*   is the same as
*
*       call HaveBoolean(hashtable, parentkey, childkey)
*
*   which is the same as
*
*       call HBoolean(hashtable, parentkey, childkey)
*
*========================================================================
*
*   API:
*
*       for better orientation:
*
*           Save API starts at line 81.
*           S(Save) API starts at line 134.
*           Load API starts at line 187.
*           L(Load) API starts at line 239.
*           Have API starts at line 291.
*           H(Have) API starts at line 299.
*           Remove API starts at line 307.
*           R(Remove) API starts at line 315.
*           Flush API starts at line 323.
*           F(Flush) API starts at line 328.
*
*
*
*    function SaveInt takes hashtable h, integer pk, integer ck, integer value returns nothing
*    function SaveBool takes hashtable h, integer pk, integer ck, boolean bool returns nothing
*    function SavePlayer takes hashtable h, integer pk, integer ck, player p returns boolean
*    function SaveWidget takes hashtable h, integer pk, integer ck, widget w returns boolean
*    function SaveDestruct takes hashtable h, integer pk, integer ck, destructable d returns boolean
*    function SaveDestructable takes hashtable h, integer pk, integer ck, destructable d returns boolean
*    function SaveItem takes hashtable h, integer pk, integer ck, item i returns boolean
*    function SaveUnit takes hashtable h, integer pk, integer ck, unit u returns boolean
*    function SaveAbility takes hashtable h, integer pk, integer ck, ability a returns boolean
*    function SaveTimer takes hashtable h, integer pk, integer ck, timer t returns boolean
*    function SaveTrigger takes hashtable h, integer pk, integer ck, trigger t returns boolean
*    function SaveTrigCond takes hashtable h, integer pk, integer ck, triggercondition tc returns boolean
*    function SaveTrigAction takes hashtable h, integer pk, integer ck, triggeraction ta returns boolean
*    function SaveTrigEvent takes hashtable h, integer pk, integer ck, event e returns boolean
*    function SaveForce takes hashtable h, integer pk, integer ck, force f returns boolean
*    function SaveGroup takes hashtable h, integer pk, integer ck, group g returns boolean
*    function SaveLoc takes hashtable h, integer pk, integer ck, location l returns boolean
*    function SaveLocation takes hashtable h, integer pk, integer ck, location l returns boolean
*    function SaveRect takes hashtable h, integer pk, integer ck, rect r returns boolean
*    function SaveBoolExpr takes hashtable h, integer pk, integer ck, boolexpr bxp returns boolean
*    function SaveSound takes hashtable h, integer pk, integer ck, sound s returns boolean
*    function SaveEffect takes hashtable h, integer pk, integer ck, effect e returns boolean
*    function SaveUnitPool takes hashtable h, integer pk, integer ck, unitpool up returns boolean
*    function SaveItemPool takes hashtable h, integer pk, integer ck, itempool ip returns boolean
*    function SaveQuest takes hashtable h, integer pk, integer ck, quest q returns boolean
*    function SaveQItem takes hashtable h, integer pk, integer ck, questitem qi returns boolean
*    function SaveQuestItem takes hashtable h, integer pk, integer ck, questitem qi returns boolean
*    function SaveDefCond takes hashtable h, integer pk, integer ck, defeatcondition d returns boolean
*    function SaveDefeatCondition takes hashtable h, integer pk, integer ck, defeatcondition d returns boolean
*    function SaveTimerDialog takes hashtable h, integer pk, integer ck, timerdialog td returns boolean
*    function SaveLeadboard takes hashtable h, integer pk, integer ck, leaderboard ld returns boolean
*    function SaveMultiboard takes hashtable h, integer pk, integer ck, multiboard mb returns boolean
*    function SaveMultiboardItem takes hashtable h, integer pk, integer ck, multiboarditem mbi returns boolean
*    function SaveMbItem takes hashtable h, integer pk, integer ck, multiboarditem mbi returns boolean
*    function SaveTrackable takes hashtable h, integer pk, integer ck, trackable t returns boolean
*    function SaveDialog takes hashtable h, integer pk, integer ck, dialog d returns boolean
*    function SaveButton takes hashtable h, integer pk, integer ck, button b returns boolean
*    function SaveTextTag takes hashtable h, integer pk, integer ck, texttag tt returns boolean
*    function SaveLight takes hashtable h, integer pk, integer ck, lightning l returns boolean
*    function SaveLightning takes hashtable h, integer pk, integer ck, lightning l returns boolean
*    function SaveImage takes hashtable h, integer pk, integer ck, image i returns boolean
*    function SaveUber takes hashtable h, integer pk, integer ck, ubersplat us returns boolean
*    function SaveUbersplat takes hashtable h, integer pk, integer ck, ubersplat us returns boolean
*    function SaveReg takes hashtable h, integer pk, integer ck, region r returns boolean
*    function SaveRegion takes hashtable h, integer pk, integer ck, region r returns boolean
*    function SaveFogState takes hashtable h, integer pk, integer ck, fogstate f returns boolean
*    function SaveFogModif takes hashtable h, integer pk, integer ck, fogmodifier f returns boolean
*    function SaveFogModifier takes hashtable h, integer pk, integer ck, fogmodifier f returns boolean
*    function SaveAgent takes hashtable h, integer pk, integer ck, agent a returns boolean
*    function SaveHash takes hashtable h, integer pk, integer ck, hashtable ht returns boolean
*    function SaveHashtable takes hashtable h, integer pk, integer ck, hashtable ht returns boolean
*
*
*    function SInt takes hashtable h, integer pk, integer ck, integer value returns nothing
*    function SBool takes hashtable h, integer pk, integer ck, boolean bool returns nothing
*    function SPlayer takes hashtable h, integer pk, integer ck, player p returns boolean
*    function SWidget takes hashtable h, integer pk, integer ck, widget w returns boolean
*    function SDestruct takes hashtable h, integer pk, integer ck, destructable d returns boolean
*    function SDestructable takes hashtable h, integer pk, integer ck, destructable d returns boolean
*    function SItem takes hashtable h, integer pk, integer ck, item i returns boolean
*    function SUnit takes hashtable h, integer pk, integer ck, unit u returns boolean
*    function SAbility takes hashtable h, integer pk, integer ck, ability a returns boolean
*    function STimer takes hashtable h, integer pk, integer ck, timer t returns boolean
*    function STrigger takes hashtable h, integer pk, integer ck, trigger t returns boolean
*    function STrigCond takes hashtable h, integer pk, integer ck, triggercondition tc returns boolean
*    function STrigAction takes hashtable h, integer pk, integer ck, triggeraction ta returns boolean
*    function STrigEvent takes hashtable h, integer pk, integer ck, event e returns boolean
*    function SForce takes hashtable h, integer pk, integer ck, force f returns boolean
*    function SGroup takes hashtable h, integer pk, integer ck, group g returns boolean
*    function SLoc takes hashtable h, integer pk, integer ck, location l returns boolean
*    function SLocation takes hashtable h, integer pk, integer ck, location l returns boolean
*    function SRect takes hashtable h, integer pk, integer ck, rect r returns boolean
*    function SBoolExpr takes hashtable h, integer pk, integer ck, boolexpr bxp returns boolean
*    function SSound takes hashtable h, integer pk, integer ck, sound s returns boolean
*    function SEffect takes hashtable h, integer pk, integer ck, effect e returns boolean
*    function SUnitPool takes hashtable h, integer pk, integer ck, unitpool up returns boolean
*    function SItemPool takes hashtable h, integer pk, integer ck, itempool ip returns boolean
*    function SQuest takes hashtable h, integer pk, integer ck, quest q returns boolean
*    function SQItem takes hashtable h, integer pk, integer ck, questitem qi returns boolean
*    function SQuestItem takes hashtable h, integer pk, integer ck, questitem qi returns boolean
*    function SDefCond takes hashtable h, integer pk, integer ck, defeatcondition d returns boolean
*    function SDefeatCondition takes hashtable h, integer pk, integer ck, defeatcondition d returns boolean
*    function STimerDialog takes hashtable h, integer pk, integer ck, timerdialog td returns boolean
*    function SLeadboard takes hashtable h, integer pk, integer ck, leaderboard ld returns boolean
*    function SMultiboard takes hashtable h, integer pk, integer ck, multiboard mb returns boolean
*    function SMultiboardItem takes hashtable h, integer pk, integer ck, multiboarditem mbi returns boolean
*    function SMbItem takes hashtable h, integer pk, integer ck, multiboarditem mbi returns boolean
*    function STrackable takes hashtable h, integer pk, integer ck, trackable t returns boolean
*    function SDialog takes hashtable h, integer pk, integer ck, dialog d returns boolean
*    function SButton takes hashtable h, integer pk, integer ck, button b returns boolean
*    function STextTag takes hashtable h, integer pk, integer ck, texttag tt returns boolean
*    function SLight takes hashtable h, integer pk, integer ck, lightning l returns boolean
*    function SLightning takes hashtable h, integer pk, integer ck, lightning l returns boolean
*    function SImage takes hashtable h, integer pk, integer ck, image i returns boolean
*    function SUber takes hashtable h, integer pk, integer ck, ubersplat us returns boolean
*    function SUbersplat takes hashtable h, integer pk, integer ck, ubersplat us returns boolean
*    function SReg takes hashtable h, integer pk, integer ck, region r returns boolean
*    function SRegion takes hashtable h, integer pk, integer ck, region r returns boolean
*    function SFogState takes hashtable h, integer pk, integer ck, fogstate f returns boolean
*    function SFogModif takes hashtable h, integer pk, integer ck, fogmodifier f returns boolean
*    function SFogModifier takes hashtable h, integer pk, integer ck, fogmodifier f returns boolean
*    function SAgent takes hashtable h, integer pk, integer ck, agent a returns boolean
*    function SHash takes hashtable h, integer pk, integer ck, hashtable ht returns boolean
*    function SHashtable takes hashtable h, integer pk, integer ck, hashtable ht returns boolean
*
*
*    function LoadInt takes hashtable h, integer pk, integer ck returns integer
*    function LoadBool takes hashtable h, integer pk, integer ck returns boolean
*    function LoadPlayer takes hashtable h, integer pk, integer ck returns player
*    function LoadWidget takes hashtable h, integer pk, integer ck returns widget
*    function LoadDestruct takes hashtable h, integer pk, integer ck returns destructable
*    function LoadItem takes hashtable h, integer pk, integer ck returns item
*    function LoadUnit takes hashtable h, integer pk, integer ck returns unit
*    function LoadAbility takes hashtable h, integer pk, integer ck returns ability
*    function LoadTimer takes hashtable h, integer pk, integer ck returns timer
*    function LoadTrigger takes hashtable h, integer pk, integer ck returns trigger
*    function LoadTrigCond takes hashtable h, integer pk, integer ck returns triggercondition
*    function LoadTrigAction takes hashtable h, integer pk, integer ck returns triggeraction
*    function LoadTrigEvent takes hashtable h, integer pk, integer ck returns event
*    function LoadForce takes hashtable h, integer pk, integer ck returns force
*    function LoadGroup takes hashtable h, integer pk, integer ck returns group
*    function LoadLoc takes hashtable h, integer pk, integer ck returns location
*    function LoadLocation takes hashtable h, integer pk, integer ck returns location
*    function LoadRect takes hashtable h, integer pk, integer ck returns rect
*    function LoadBoolExpr takes hashtable h, integer pk, integer ck returns boolexpr
*    function LoadSound takes hashtable h, integer pk, integer ck returns sound
*    function LoadEffect takes hashtable h, integer pk, integer ck returns effect
*    function LoadUnitPool takes hashtable h, integer pk, integer ck returns unitpool
*    function LoadItemPool takes hashtable h, integer pk, integer ck returns itempool
*    function LoadQuest takes hashtable h, integer pk, integer ck returns quest
*    function LoadQItem takes hashtable h, integer pk, integer ck returns questitem
*    function LoadQuestItem takes hashtable h, integer pk, integer ck returns questitem
*    function LoadDefCond takes hashtable h, integer pk, integer ck returns defeatcondition
*    function LoadTimDialog takes hashtable h, integer pk, integer ck returns timerdialog
*    function LoadTimerDialog takes hashtable h, integer pk, integer ck returns timerdialog
*    function LoadLeadboard takes hashtable h, integer pk, integer ck returns leaderboard
*    function LoadMultiboard takes hashtable h, integer pk, integer ck returns multiboard
*    function LoadMultiboardItem takes hashtable h, integer pk, integer ck returns multiboarditem
*    function LoadMbItem takes hashtable h, integer pk, integer ck returns multiboarditem
*    function LoadTrackable takes hashtable h, integer pk, integer ck returns trackable
*    function LoadTrack takes hashtable h, integer pk, integer ck returns trackable
*    function LoadDialog takes hashtable h, integer pk, integer ck returns dialog
*    function LoadButton takes hashtable h, integer pk, integer ck returns button
*    function LoadTextTag takes hashtable h, integer pk, integer ck returns texttag
*    function LoadLightning takes hashtable h, integer pk, integer ck returns lightning
*    function LoadLight takes hashtable h, integer pk, integer ck returns lightning
*    function LoadImage takes hashtable h, integer pk, integer ck returns image
*    function LoadUbersplat takes hashtable h, integer pk, integer ck returns ubersplat
*    function LoadReg takes hashtable h, integer pk, integer ck returns region
*    function LoadRegion takes hashtable h, integer pk, integer ck returns region
*    function LoadFogState takes hashtable h, integer pk, integer ck returns fogstate
*    function LoadFogModif takes hashtable h, integer pk, integer ck returns fogmodifier
*    function LoadFogModifier takes hashtable h, integer pk, integer ck returns fogmodifier
*    function LoadHashtable takes hashtable h, integer pk, integer ck returns hashtable
*    function LoadHash takes hashtable h, integer pk, integer ck returns hashtable
*
*
*
*    function LInt takes hashtable h, integer pk, integer ck returns integer
*    function LReal takes hashtable h, integer pk, integer ck returns real
*    function LBool takes hashtable h, integer pk, integer ck returns boolean
*    function LPlayer takes hashtable h, integer pk, integer ck returns player
*    function LWidget takes hashtable h, integer pk, integer ck returns widget
*    function LDestruct takes hashtable h, integer pk, integer ck returns destructable
*    function LItem takes hashtable h, integer pk, integer ck returns item
*    function LUnit takes hashtable h, integer pk, integer ck returns unit
*    function LAbility takes hashtable h, integer pk, integer ck returns ability
*    function LTimer takes hashtable h, integer pk, integer ck returns timer
*    function LTrigger takes hashtable h, integer pk, integer ck returns trigger
*    function LTrigCond takes hashtable h, integer pk, integer ck returns triggercondition
*    function LTrigAction takes hashtable h, integer pk, integer ck returns triggeraction
*    function LTrigEvent takes hashtable h, integer pk, integer ck returns event
*    function LForce takes hashtable h, integer pk, integer ck returns force
*    function LGroup takes hashtable h, integer pk, integer ck returns group
*    function LLoc takes hashtable h, integer pk, integer ck returns location
*    function LLocation takes hashtable h, integer pk, integer ck returns location
*    function LRect takes hashtable h, integer pk, integer ck returns rect
*    function LBoolExpr takes hashtable h, integer pk, integer ck returns boolexpr
*    function LSound takes hashtable h, integer pk, integer ck returns sound
*    function LEffect takes hashtable h, integer pk, integer ck returns effect
*    function LUnitPool takes hashtable h, integer pk, integer ck returns unitpool
*    function LItemPool takes hashtable h, integer pk, integer ck returns itempool
*    function LQuest takes hashtable h, integer pk, integer ck returns quest
*    function LQItem takes hashtable h, integer pk, integer ck returns questitem
*    function LQuestItem takes hashtable h, integer pk, integer ck returns questitem
*    function LDefCond takes hashtable h, integer pk, integer ck returns defeatcondition
*    function LTimDialog takes hashtable h, integer pk, integer ck returns timerdialog
*    function LTimerDialog takes hashtable h, integer pk, integer ck returns timerdialog
*    function LLeadboard takes hashtable h, integer pk, integer ck returns leaderboard
*    function LMultiboard takes hashtable h, integer pk, integer ck returns multiboard
*    function LMultiboardItem takes hashtable h, integer pk, integer ck returns multiboarditem
*    function LMbItem takes hashtable h, integer pk, integer ck returns multiboarditem
*    function LTrackable takes hashtable h, integer pk, integer ck returns trackable
*    function LTrack takes hashtable h, integer pk, integer ck returns trackable
*    function LDialog takes hashtable h, integer pk, integer ck returns dialog
*    function LButton takes hashtable h, integer pk, integer ck returns button
*    function LTextTag takes hashtable h, integer pk, integer ck returns texttag
*    function LLightning takes hashtable h, integer pk, integer ck returns lightning
*    function LLight takes hashtable h, integer pk, integer ck returns lightning
*    function LImage takes hashtable h, integer pk, integer ck returns image
*    function LUbersplat takes hashtable h, integer pk, integer ck returns ubersplat
*    function LReg takes hashtable h, integer pk, integer ck returns region
*    function LRegion takes hashtable h, integer pk, integer ck returns region
*    function LFogState takes hashtable h, integer pk, integer ck returns fogstate
*    function LFogModif takes hashtable h, integer pk, integer ck returns fogmodifier
*    function LFogModifier takes hashtable h, integer pk, integer ck returns fogmodifier
*    function LHashtable takes hashtable h, integer pk, integer ck returns hashtable
*    function LHash takes hashtable h, integer pk, integer ck returns hashtable
*
*
*   
*    function HaveInteger takes hashtable h, integer pk, integer ck returns boolean
*    function HaveReal takes hashtable h, integer pk, integer ck returns boolean
*    function HaveBoolean takes hashtable h, integer pk, integer ck returns boolean
*    function HaveString takes hashtable h, integer pk, integer ck returns boolean
*    function HaveHandle takes hashtable h, integer pk, integer ck returns boolean
*
*
*
*    function HInteger takes hashtable h, integer pk, integer ck returns boolean
*    function HReal takes hashtable h, integer pk, integer ck returns boolean
*    function HBoolean takes hashtable h, integer pk, integer ck returns boolean
*    function HString takes hashtable h, integer pk, integer ck returns boolean
*    function HHandle takes hashtable h, integer pk, integer ck returns boolean
*
*
*
*    function RemoveInteger takes hashtable h, integer pk, integer ck returns nothing
*    function RemoveReal takes hashtable h, integer pk, integer ck returns nothing
*    function RemoveBoolean takes hashtable h, integer pk, integer ck returns nothing
*    function RemoveString takes hashtable h, integer pk, integer ck returns nothing
*    function RemoveHandle takes hashtable h, integer pk, integer ck returns nothing
*
*
*
*    function RInteger takes hashtable h, integer pk, integer ck returns nothing
*    function RReal takes hashtable h, integer pk, integer ck returns nothing
*    function RBoolean takes hashtable h, integer pk, integer ck returns nothing
*    function RString takes hashtable h, integer pk, integer ck returns nothing
*    function RHandle takes hashtable h, integer pk, integer ck returns nothing
*
*
*
*    function FlushChild takes hashtable h, integer pk returns nothing
*    function FlushParent takes hashtable h returns nothing
*
*
*
*    function FChild takes hashtable h, integer pk returns nothing
*    function FParent takes hashtable h returns nothing
*
*
*
*
*/

/* save part */




    function SaveInt takes hashtable h, integer pk, integer ck, integer value returns nothing
        call SaveInteger(h, pk, ck, value)
    endfunction
    
    function SaveBool takes hashtable h, integer pk, integer ck, boolean bool returns nothing
        call SaveBoolean(h, pk, ck, bool)
    endfunction
    
    function SavePlayer takes hashtable h, integer pk, integer ck, player p returns boolean
        return SavePlayerHandle(h, pk, ck, p)
    endfunction
    
    function SaveWidget takes hashtable h, integer pk, integer ck, widget w returns boolean
        return SaveWidgetHandle(h, pk, ck, w)
    endfunction
    
    function SaveDestruct takes hashtable h, integer pk, integer ck, destructable d returns boolean
        return SaveDestructableHandle(h, pk, ck, d)
    endfunction
    
    function SaveDestructable takes hashtable h, integer pk, integer ck, destructable d returns boolean
        return SaveDestructableHandle(h, pk, ck, d)
    endfunction
    
    function SaveItem takes hashtable h, integer pk, integer ck, item i returns boolean
        return SaveItemHandle(h, pk, ck, i)
    endfunction
    
    function SaveUnit takes hashtable h, integer pk, integer ck, unit u returns boolean
        return SaveUnitHandle(h, pk, ck, u)
    endfunction
    
    function SaveAbility takes hashtable h, integer pk, integer ck, ability a returns boolean
        return SaveAbilityHandle(h, pk, ck, a)
    endfunction
    
    function SaveTimer takes hashtable h, integer pk, integer ck, timer t returns boolean
        return SaveTimerHandle(h, pk, ck, t)
    endfunction
    
    function SaveTrigger takes hashtable h, integer pk, integer ck, trigger t returns boolean
        return SaveTriggerHandle(h, pk, ck, t)
    endfunction
    
    function SaveTrigCond takes hashtable h, integer pk, integer ck, triggercondition tc returns boolean
        return SaveTriggerConditionHandle(h, pk, ck, tc)
    endfunction
    
    function SaveTrigAction takes hashtable h, integer pk, integer ck, triggeraction ta returns boolean
        return SaveTriggerActionHandle(h, pk, ck, ta)
    endfunction
    
    function SaveTrigEvent takes hashtable h, integer pk, integer ck, event e returns boolean
        return SaveTriggerEventHandle(h, pk, ck, e)
    endfunction
    
    function SaveForce takes hashtable h, integer pk, integer ck, force f returns boolean
        return SaveForceHandle(h, pk, ck, f)
    endfunction
    
    function SaveGroup takes hashtable h, integer pk, integer ck, group g returns boolean
        return SaveGroupHandle(h, pk, ck, g)
    endfunction
    
    function SaveLoc takes hashtable h, integer pk, integer ck, location l returns boolean
        return SaveLocationHandle(h, pk, ck, l)
    endfunction
    
    function SaveLocation takes hashtable h, integer pk, integer ck, location l returns boolean
        return SaveLocationHandle(h, pk, ck, l)
    endfunction
    
    function SaveRect takes hashtable h, integer pk, integer ck, rect r returns boolean
        return SaveRectHandle(h, pk, ck, r)
    endfunction
    
    function SaveBoolExpr takes hashtable h, integer pk, integer ck, boolexpr bxp returns boolean
        return SaveBooleanExprHandle(h, pk, ck, bxp)
    endfunction
    
    function SaveSound takes hashtable h, integer pk, integer ck, sound s returns boolean
        return SaveSoundHandle(h, pk, ck, s)
    endfunction
    
    function SaveEffect takes hashtable h, integer pk, integer ck, effect e returns boolean
        return SaveEffectHandle(h, pk, ck, e)
    endfunction
    
    function SaveUnitPool takes hashtable h, integer pk, integer ck, unitpool up returns boolean
        return SaveUnitPoolHandle(h, pk, ck, up)
    endfunction
    
    function SaveItemPool takes hashtable h, integer pk, integer ck, itempool ip returns boolean
        return SaveItemPoolHandle(h, pk, ck, ip)
    endfunction
    
    function SaveQuest takes hashtable h, integer pk, integer ck, quest q returns boolean
        return SaveQuestHandle(h, pk, ck, q)
    endfunction
    
    function SaveQItem takes hashtable h, integer pk, integer ck, questitem qi returns boolean
        return SaveQuestItemHandle(h, pk, ck, qi)
    endfunction
    
    function SaveQuestItem takes hashtable h, integer pk, integer ck, questitem qi returns boolean
        return SaveQuestItemHandle(h, pk, ck, qi)
    endfunction
    
    function SaveDefCond takes hashtable h, integer pk, integer ck, defeatcondition d returns boolean
        return SaveDefeatConditionHandle(h, pk, ck, d)
    endfunction
    
    function SaveDefeatCondition takes hashtable h, integer pk, integer ck, defeatcondition d returns boolean
        return SaveDefeatConditionHandle(h, pk, ck, d)
    endfunction
    
    function SaveTimerDialog takes hashtable h, integer pk, integer ck, timerdialog td returns boolean
        return SaveTimerDialogHandle(h, pk, ck, td)
    endfunction
    
    function SaveLeadboard takes hashtable h, integer pk, integer ck, leaderboard ld returns boolean
        return SaveLeaderboardHandle(h, pk, ck, ld)
    endfunction
    
    function SaveMultiboard takes hashtable h, integer pk, integer ck, multiboard mb returns boolean
        return SaveMultiboardHandle(h, pk, ck, mb)
    endfunction
        
    function SaveMultiboardItem takes hashtable h, integer pk, integer ck, multiboarditem mbi returns boolean
        return SaveMultiboardItemHandle(h, pk, ck, mbi)
    endfunction
    
    function SaveMbItem takes hashtable h, integer pk, integer ck, multiboarditem mbi returns boolean
        return SaveMultiboardItemHandle(h, pk, ck, mbi)
    endfunction
    
    function SaveTrackable takes hashtable h, integer pk, integer ck, trackable t returns boolean
        return SaveTrackableHandle(h, pk, ck, t)
    endfunction
    
    function SaveDialog takes hashtable h, integer pk, integer ck, dialog d returns boolean
        return SaveDialogHandle(h, pk, ck, d)
    endfunction
    
    function SaveButton takes hashtable h, integer pk, integer ck, button b returns boolean
        return SaveButtonHandle(h, pk, ck, b)
    endfunction
    
    function SaveTextTag takes hashtable h, integer pk, integer ck, texttag tt returns boolean
        return SaveTextTagHandle(h, pk, ck, tt)
    endfunction
    
    function SaveLight takes hashtable h, integer pk, integer ck, lightning l returns boolean
        return SaveLightningHandle(h, pk, ck, l)
    endfunction
    
    function SaveLightning takes hashtable h, integer pk, integer ck, lightning l returns boolean
        return SaveLightningHandle(h, pk, ck, l)
    endfunction
    
    function SaveImage takes hashtable h, integer pk, integer ck, image i returns boolean
        return SaveImageHandle(h, pk, ck, i)
    endfunction
    
    function SaveUber takes hashtable h, integer pk, integer ck, ubersplat us returns boolean
        return SaveUbersplatHandle(h, pk, ck, us)
    endfunction
    
    function SaveUbersplat takes hashtable h, integer pk, integer ck, ubersplat us returns boolean
        return SaveUbersplatHandle(h, pk, ck, us)
    endfunction
    
    function SaveReg takes hashtable h, integer pk, integer ck, region r returns boolean
        return SaveRegionHandle(h, pk, ck, r)
    endfunction
    
    function SaveRegion takes hashtable h, integer pk, integer ck, region r returns boolean
        return SaveRegionHandle(h, pk, ck, r)
    endfunction
    
    function SaveFogState takes hashtable h, integer pk, integer ck, fogstate f returns boolean
        return SaveFogStateHandle(h, pk, ck, f)
    endfunction
    
    function SaveFogModif takes hashtable h, integer pk, integer ck, fogmodifier f returns boolean
        return SaveFogModifierHandle(h, pk, ck, f)
    endfunction
    
    function SaveFogModifier takes hashtable h, integer pk, integer ck, fogmodifier f returns boolean
        return SaveFogModifierHandle(h, pk, ck, f)
    endfunction
    
    function SaveAgent takes hashtable h, integer pk, integer ck, agent a returns boolean
        return SaveAgentHandle(h, pk, ck, a)
    endfunction
    
    function SaveHash takes hashtable h, integer pk, integer ck, hashtable ht returns boolean
        return SaveHashtableHandle(h, pk, ck, ht)
    endfunction
    
    function SaveHashtable takes hashtable h, integer pk, integer ck, hashtable ht returns boolean
        return SaveHashtableHandle(h, pk, ck, ht)
    endfunction
    
    
    
    
    /*  saving part ends, but for those who are lazy enough I have here the same functions
        but with S instead of Save                                                          */
       
       
       
       
       
    function SInt takes hashtable h, integer pk, integer ck, integer value returns nothing
        call SaveInteger(h, pk, ck, value)
    endfunction

    function SReal takes hashtable h, integer pk, integer ck, real value returns nothing
        call SaveReal(h, pk, ck, value)
    endfunction
    
    function SBool takes hashtable h, integer pk, integer ck, boolean bool returns nothing
        call SaveBoolean(h, pk, ck, bool)
    endfunction
    
    function SPlayer takes hashtable h, integer pk, integer ck, player p returns boolean
        return SavePlayerHandle(h, pk, ck, p)
    endfunction
    
    function SWidget takes hashtable h, integer pk, integer ck, widget w returns boolean
        return SaveWidgetHandle(h, pk, ck, w)
    endfunction
    
    function SDestruct takes hashtable h, integer pk, integer ck, destructable d returns boolean
        return SaveDestructableHandle(h, pk, ck, d)
    endfunction
    
    function SDestructable takes hashtable h, integer pk, integer ck, destructable d returns boolean
        return SaveDestructableHandle(h, pk, ck, d)
    endfunction
    
    function SItem takes hashtable h, integer pk, integer ck, item i returns boolean
        return SaveItemHandle(h, pk, ck, i)
    endfunction
    
    function SUnit takes hashtable h, integer pk, integer ck, unit u returns boolean
        return SaveUnitHandle(h, pk, ck, u)
    endfunction
    
    function SAbility takes hashtable h, integer pk, integer ck, ability a returns boolean
        return SaveAbilityHandle(h, pk, ck, a)
    endfunction
    
    function STimer takes hashtable h, integer pk, integer ck, timer t returns boolean
        return SaveTimerHandle(h, pk, ck, t)
    endfunction
    
    function STrigger takes hashtable h, integer pk, integer ck, trigger t returns boolean
        return SaveTriggerHandle(h, pk, ck, t)
    endfunction
    
    function STrigCond takes hashtable h, integer pk, integer ck, triggercondition tc returns boolean
        return SaveTriggerConditionHandle(h, pk, ck, tc)
    endfunction
    
    function STrigAction takes hashtable h, integer pk, integer ck, triggeraction ta returns boolean
        return SaveTriggerActionHandle(h, pk, ck, ta)
    endfunction
    
    function STrigEvent takes hashtable h, integer pk, integer ck, event e returns boolean
        return SaveTriggerEventHandle(h, pk, ck, e)
    endfunction
    
    function SForce takes hashtable h, integer pk, integer ck, force f returns boolean
        return SaveForceHandle(h, pk, ck, f)
    endfunction
    
    function SGroup takes hashtable h, integer pk, integer ck, group g returns boolean
        return SaveGroupHandle(h, pk, ck, g)
    endfunction
    
    function SLoc takes hashtable h, integer pk, integer ck, location l returns boolean
        return SaveLocationHandle(h, pk, ck, l)
    endfunction
    
    function SLocation takes hashtable h, integer pk, integer ck, location l returns boolean
        return SaveLocationHandle(h, pk, ck, l)
    endfunction
    
    function SRect takes hashtable h, integer pk, integer ck, rect r returns boolean
        return SaveRectHandle(h, pk, ck, r)
    endfunction
    
    function SBoolExpr takes hashtable h, integer pk, integer ck, boolexpr bxp returns boolean
        return SaveBooleanExprHandle(h, pk, ck, bxp)
    endfunction
    
    function SSound takes hashtable h, integer pk, integer ck, sound s returns boolean
        return SaveSoundHandle(h, pk, ck, s)
    endfunction
    
    function SEffect takes hashtable h, integer pk, integer ck, effect e returns boolean
        return SaveEffectHandle(h, pk, ck, e)
    endfunction
    
    function SUnitPool takes hashtable h, integer pk, integer ck, unitpool up returns boolean
        return SaveUnitPoolHandle(h, pk, ck, up)
    endfunction
    
    function SItemPool takes hashtable h, integer pk, integer ck, itempool ip returns boolean
        return SaveItemPoolHandle(h, pk, ck, ip)
    endfunction
    
    function SQuest takes hashtable h, integer pk, integer ck, quest q returns boolean
        return SaveQuestHandle(h, pk, ck, q)
    endfunction
    
    function SQuestItem takes hashtable h, integer pk, integer ck, questitem qi returns boolean
        return SaveQuestItemHandle(h, pk, ck, qi)
    endfunction
    
    function SDefCond takes hashtable h, integer pk, integer ck, defeatcondition d returns boolean
        return SaveDefeatConditionHandle(h, pk, ck, d)
    endfunction
    
    function STimDialog takes hashtable h, integer pk, integer ck, timerdialog td returns boolean
        return SaveTimerDialogHandle(h, pk, ck, td)
    endfunction
    
    function SLeadboard takes hashtable h, integer pk, integer ck, leaderboard ld returns boolean
        return SaveLeaderboardHandle(h, pk, ck, ld)
    endfunction
    
    function SMultiboard takes hashtable h, integer pk, integer ck, multiboard mb returns boolean
        return SaveMultiboardHandle(h, pk, ck, mb)
    endfunction
    
    function SMultiboardItem takes hashtable h, integer pk, integer ck, multiboarditem mbi returns boolean
        return SaveMultiboardItemHandle(h, pk, ck, mbi)
    endfunction
    
    function SMbItem takes hashtable h, integer pk, integer ck, multiboarditem mbi returns boolean
        return SaveMultiboardItemHandle(h, pk, ck, mbi)
    endfunction
    
    function STrackable takes hashtable h, integer pk, integer ck, trackable t returns boolean
        return SaveTrackableHandle(h, pk, ck, t)
    endfunction
    
    function SDialog takes hashtable h, integer pk, integer ck, dialog d returns boolean
        return SaveDialogHandle(h, pk, ck, d)
    endfunction
    
    function SButton takes hashtable h, integer pk, integer ck, button b returns boolean
        return SaveButtonHandle(h, pk, ck, b)
    endfunction
    
    function STextTag takes hashtable h, integer pk, integer ck, texttag tt returns boolean
        return SaveTextTagHandle(h, pk, ck, tt)
    endfunction
    
    function SLight takes hashtable h, integer pk, integer ck, lightning l returns boolean
        return SaveLightningHandle(h, pk, ck, l)
    endfunction
    
    function SImage takes hashtable h, integer pk, integer ck, image i returns boolean
        return SaveImageHandle(h, pk, ck, i)
    endfunction
    
    function SUber takes hashtable h, integer pk, integer ck, ubersplat us returns boolean
        return SaveUbersplatHandle(h, pk, ck, us)
    endfunction
    
    function SUbersplat takes hashtable h, integer pk, integer ck, ubersplat us returns boolean
        return SaveUbersplatHandle(h, pk, ck, us)
    endfunction
    
    function SReg takes hashtable h, integer pk, integer ck, region r returns boolean
        return SaveRegionHandle(h, pk, ck, r)
    endfunction
    
    function SRegion takes hashtable h, integer pk, integer ck, region r returns boolean
        return SaveRegionHandle(h, pk, ck, r)
    endfunction
    
    function SFogState takes hashtable h, integer pk, integer ck, fogstate f returns boolean
        return SaveFogStateHandle(h, pk, ck, f)
    endfunction
    
    function SFogModif takes hashtable h, integer pk, integer ck, fogmodifier f returns boolean
        return SaveFogModifierHandle(h, pk, ck, f)
    endfunction
    
    function SAgent takes hashtable h, integer pk, integer ck, agent a returns boolean
        return SaveAgentHandle(h, pk, ck, a)
    endfunction
    
    function SHash takes hashtable h, integer pk, integer ck, hashtable ht returns boolean
        return SaveHashtableHandle(h, pk, ck, ht)
    endfunction
    
    
    
    
    
    /*      Now the Loading functions                                        */
    
    
    
    
    function LoadInt takes hashtable h, integer pk, integer ck returns integer
        return LoadInteger(h, pk, ck)
    endfunction
    
    function LoadBool takes hashtable h, integer pk, integer ck returns boolean
        return LoadBoolean(h, pk, ck)
    endfunction
    
    function LoadPlayer takes hashtable h, integer pk, integer ck returns player
        return LoadPlayerHandle(h, pk, ck)
    endfunction
    
    function LoadWidget takes hashtable h, integer pk, integer ck returns widget
        return LoadWidgetHandle(h, pk, ck)
    endfunction
    
    function LoadDestruct takes hashtable h, integer pk, integer ck returns destructable
        return LoadDestructableHandle(h, pk, ck)
    endfunction
    
    function LoadItem takes hashtable h, integer pk, integer ck returns item
        return LoadItemHandle(h, pk, ck)
    endfunction
    
    function LoadUnit takes hashtable h, integer pk, integer ck returns unit
        return LoadUnitHandle(h, pk, ck)
    endfunction
    
    function LoadAbility takes hashtable h, integer pk, integer ck returns ability
        return LoadAbilityHandle(h, pk, ck)
    endfunction
            
    function LoadTimer takes hashtable h, integer pk, integer ck returns timer
        return LoadTimerHandle(h, pk, ck)
    endfunction
    
    function LoadTrigger takes hashtable h, integer pk, integer ck returns trigger
        return LoadTriggerHandle(h, pk, ck)
    endfunction
    
    function LoadTrigCond takes hashtable h, integer pk, integer ck returns triggercondition
        return LoadTriggerConditionHandle(h, pk, ck)
    endfunction
    
    function LoadTrigAction takes hashtable h, integer pk, integer ck returns triggeraction
        return LoadTriggerActionHandle(h, pk, ck)
    endfunction
    
    function LoadTrigEvent takes hashtable h, integer pk, integer ck returns event
        return LoadTriggerEventHandle(h, pk, ck)
    endfunction
    
    function LoadForce takes hashtable h, integer pk, integer ck returns force
        return LoadForceHandle(h, pk, ck)
    endfunction
    
    function LoadGroup takes hashtable h, integer pk, integer ck returns group
        return LoadGroupHandle(h, pk, ck)
    endfunction
    
    function LoadLoc takes hashtable h, integer pk, integer ck returns location
        return LoadLocationHandle(h, pk, ck)
    endfunction
    
    function LoadLocation takes hashtable h, integer pk, integer ck returns location
        return LoadLocationHandle(h, pk, ck)
    endfunction
    
    function LoadRect takes hashtable h, integer pk, integer ck returns rect
        return LoadRectHandle(h, pk, ck)
    endfunction
    
    function LoadBoolExpr takes hashtable h, integer pk, integer ck returns boolexpr
        return LoadBooleanExprHandle(h, pk, ck)
    endfunction
    
    function LoadSound takes hashtable h, integer pk, integer ck returns sound
        return LoadSoundHandle(h, pk, ck)
    endfunction
    
    function LoadEffect takes hashtable h, integer pk, integer ck returns effect
        return LoadEffectHandle(h, pk, ck)
    endfunction
    
    function LoadUnitPool takes hashtable h, integer pk, integer ck returns unitpool
        return LoadUnitPoolHandle(h, pk, ck)
    endfunction
    
    function LoadItemPool takes hashtable h, integer pk, integer ck returns itempool
        return LoadItemPoolHandle(h, pk, ck)
    endfunction
    
    function LoadQuest takes hashtable h, integer pk, integer ck returns quest
        return LoadQuestHandle(h, pk, ck)
    endfunction
    
    function LoadQItem takes hashtable h, integer pk, integer ck returns questitem
        return LoadQuestItemHandle(h, pk, ck)
    endfunction
    
    function LoadQuestItem takes hashtable h, integer pk, integer ck returns questitem
        return LoadQuestItemHandle(h, pk, ck)
    endfunction
    
    function LoadDefCond takes hashtable h, integer pk, integer ck returns defeatcondition
        return LoadDefeatConditionHandle(h, pk, ck)
    endfunction
    
    function LoadTimDialog takes hashtable h, integer pk, integer ck returns timerdialog
        return LoadTimerDialogHandle(h, pk, ck)
    endfunction
    
    function LoadTimerDialog takes hashtable h, integer pk, integer ck returns timerdialog
        return LoadTimerDialogHandle(h, pk, ck)
    endfunction
    
    function LoadLeadboard takes hashtable h, integer pk, integer ck returns leaderboard
        return LoadLeaderboardHandle(h, pk, ck)
    endfunction
    
    function LoadMultiboard takes hashtable h, integer pk, integer ck returns multiboard
        return LoadMultiboardHandle(h, pk, ck)
    endfunction

    function LoadMultiboardItem takes hashtable h, integer pk, integer ck returns multiboarditem
        return LoadMultiboardItemHandle(h, pk, ck)
    endfunction
    
    function LoadMbItem takes hashtable h, integer pk, integer ck returns multiboarditem
        return LoadMultiboardItemHandle(h, pk, ck)
    endfunction
    
    function LoadTrackable takes hashtable h, integer pk, integer ck returns trackable
        return LoadTrackableHandle(h, pk, ck)
    endfunction
    
    function LoadTrack takes hashtable h, integer pk, integer ck returns trackable
        return LoadTrackableHandle(h, pk, ck)
    endfunction
    
    function LoadDialog takes hashtable h, integer pk, integer ck returns dialog
        return LoadDialogHandle(h, pk, ck)
    endfunction

    function LoadButton takes hashtable h, integer pk, integer ck returns button
        return LoadButtonHandle(h, pk, ck)
    endfunction

    function LoadTextTag takes hashtable h, integer pk, integer ck returns texttag
        return LoadTextTagHandle(h, pk, ck)
    endfunction
 
    function LoadLightning takes hashtable h, integer pk, integer ck returns lightning
        return LoadLightningHandle(h, pk, ck)
    endfunction
 
    function LoadLight takes hashtable h, integer pk, integer ck returns lightning
        return LoadLightningHandle(h, pk, ck)
    endfunction
  
    function LoadImage takes hashtable h, integer pk, integer ck returns image
        return LoadImageHandle(h, pk, ck)
    endfunction
  
    function LoadUbersplat takes hashtable h, integer pk, integer ck returns ubersplat
        return LoadUbersplatHandle(h, pk, ck)
    endfunction
  
    function LoadReg takes hashtable h, integer pk, integer ck returns region
        return LoadRegionHandle(h, pk, ck)
    endfunction
  
    function LoadRegion takes hashtable h, integer pk, integer ck returns region
        return LoadRegionHandle(h, pk, ck)
    endfunction
  
    function LoadFogState takes hashtable h, integer pk, integer ck returns fogstate
        return LoadFogStateHandle(h, pk, ck)
    endfunction
  
    function LoadFogModif takes hashtable h, integer pk, integer ck returns fogmodifier
        return LoadFogModifierHandle(h, pk, ck)
    endfunction
  
    function LoadFogModifier takes hashtable h, integer pk, integer ck returns fogmodifier
        return LoadFogModifierHandle(h, pk, ck)
    endfunction
  
    function LoadHashtable takes hashtable h, integer pk, integer ck returns hashtable
        return LoadHashtableHandle(h, pk, ck)
    endfunction

    function LoadHash takes hashtable h, integer pk, integer ck returns hashtable
        return LoadHashtableHandle(h, pk, ck)
    endfunction
    
    
    /*      Again, for those who are lazy here is L instead of Load          */
    
    
    
    
    
    function LInt takes hashtable h, integer pk, integer ck returns integer
        return LoadInteger(h, pk, ck)
    endfunction
    
    function LReal takes hashtable h, integer pk, integer ck returns real
        return LoadReal(h, pk, ck)
    endfunction
    
    function LBool takes hashtable h, integer pk, integer ck returns boolean
        return LoadBoolean(h, pk, ck)
    endfunction
    
    function LPlayer takes hashtable h, integer pk, integer ck returns player
        return LoadPlayerHandle(h, pk, ck)
    endfunction
    
    function LWidget takes hashtable h, integer pk, integer ck returns widget
        return LoadWidgetHandle(h, pk, ck)
    endfunction
    
    function LDestruct takes hashtable h, integer pk, integer ck returns destructable
        return LoadDestructableHandle(h, pk, ck)
    endfunction
    
    function LItem takes hashtable h, integer pk, integer ck returns item
        return LoadItemHandle(h, pk, ck)
    endfunction
    
    function LUnit takes hashtable h, integer pk, integer ck returns unit
        return LoadUnitHandle(h, pk, ck)
    endfunction
    
    function LAbility takes hashtable h, integer pk, integer ck returns ability
        return LoadAbilityHandle(h, pk, ck)
    endfunction
            
    function LTimer takes hashtable h, integer pk, integer ck returns timer
        return LoadTimerHandle(h, pk, ck)
    endfunction
    
    function LTrigger takes hashtable h, integer pk, integer ck returns trigger
        return LoadTriggerHandle(h, pk, ck)
    endfunction
    
    function LTrigCond takes hashtable h, integer pk, integer ck returns triggercondition
        return LoadTriggerConditionHandle(h, pk, ck)
    endfunction
    
    function LTrigAction takes hashtable h, integer pk, integer ck returns triggeraction
        return LoadTriggerActionHandle(h, pk, ck)
    endfunction
    
    function LTrigEvent takes hashtable h, integer pk, integer ck returns event
        return LoadTriggerEventHandle(h, pk, ck)
    endfunction
    
    function LForce takes hashtable h, integer pk, integer ck returns force
        return LoadForceHandle(h, pk, ck)
    endfunction
    
    function LGroup takes hashtable h, integer pk, integer ck returns group
        return LoadGroupHandle(h, pk, ck)
    endfunction
    
    function LLoc takes hashtable h, integer pk, integer ck returns location
        return LoadLocationHandle(h, pk, ck)
    endfunction
    
    function LLocation takes hashtable h, integer pk, integer ck returns location
        return LoadLocationHandle(h, pk, ck)
    endfunction
    
    function LRect takes hashtable h, integer pk, integer ck returns rect
        return LoadRectHandle(h, pk, ck)
    endfunction
    
    function LBoolExpr takes hashtable h, integer pk, integer ck returns boolexpr
        return LoadBooleanExprHandle(h, pk, ck)
    endfunction
    
    function LSound takes hashtable h, integer pk, integer ck returns sound
        return LoadSoundHandle(h, pk, ck)
    endfunction
    
    function LEffect takes hashtable h, integer pk, integer ck returns effect
        return LoadEffectHandle(h, pk, ck)
    endfunction
    
    function LUnitPool takes hashtable h, integer pk, integer ck returns unitpool
        return LoadUnitPoolHandle(h, pk, ck)
    endfunction
    
    function LItemPool takes hashtable h, integer pk, integer ck returns itempool
        return LoadItemPoolHandle(h, pk, ck)
    endfunction
    
    function LQuest takes hashtable h, integer pk, integer ck returns quest
        return LoadQuestHandle(h, pk, ck)
    endfunction
    
    function LQItem takes hashtable h, integer pk, integer ck returns questitem
        return LoadQuestItemHandle(h, pk, ck)
    endfunction
    
    function LQuestItem takes hashtable h, integer pk, integer ck returns questitem
        return LoadQuestItemHandle(h, pk, ck)
    endfunction
    
    function LDefCond takes hashtable h, integer pk, integer ck returns defeatcondition
        return LoadDefeatConditionHandle(h, pk, ck)
    endfunction
    
    function LTimDialog takes hashtable h, integer pk, integer ck returns timerdialog
        return LoadTimerDialogHandle(h, pk, ck)
    endfunction
    
    function LTimerDialog takes hashtable h, integer pk, integer ck returns timerdialog
        return LoadTimerDialogHandle(h, pk, ck)
    endfunction
    
    function LLeadboard takes hashtable h, integer pk, integer ck returns leaderboard
        return LoadLeaderboardHandle(h, pk, ck)
    endfunction
    
    function LMultiboard takes hashtable h, integer pk, integer ck returns multiboard
        return LoadMultiboardHandle(h, pk, ck)
    endfunction

    function LMultiboardItem takes hashtable h, integer pk, integer ck returns multiboarditem
        return LoadMultiboardItemHandle(h, pk, ck)
    endfunction
    
    function LMbItem takes hashtable h, integer pk, integer ck returns multiboarditem
        return LoadMultiboardItemHandle(h, pk, ck)
    endfunction
    
    function LTrackable takes hashtable h, integer pk, integer ck returns trackable
        return LoadTrackableHandle(h, pk, ck)
    endfunction
    
    function LTrack takes hashtable h, integer pk, integer ck returns trackable
        return LoadTrackableHandle(h, pk, ck)
    endfunction
    
    function LDialog takes hashtable h, integer pk, integer ck returns dialog
        return LoadDialogHandle(h, pk, ck)
    endfunction

    function LButton takes hashtable h, integer pk, integer ck returns button
        return LoadButtonHandle(h, pk, ck)
    endfunction

    function LTextTag takes hashtable h, integer pk, integer ck returns texttag
        return LoadTextTagHandle(h, pk, ck)
    endfunction
 
    function LLightning takes hashtable h, integer pk, integer ck returns lightning
        return LoadLightningHandle(h, pk, ck)
    endfunction
 
    function LLight takes hashtable h, integer pk, integer ck returns lightning
        return LoadLightningHandle(h, pk, ck)
    endfunction
  
    function LImage takes hashtable h, integer pk, integer ck returns image
        return LoadImageHandle(h, pk, ck)
    endfunction
  
    function LUbersplat takes hashtable h, integer pk, integer ck returns ubersplat
        return LoadUbersplatHandle(h, pk, ck)
    endfunction
  
    function LReg takes hashtable h, integer pk, integer ck returns region
        return LoadRegionHandle(h, pk, ck)
    endfunction
  
    function LRegion takes hashtable h, integer pk, integer ck returns region
        return LoadRegionHandle(h, pk, ck)
    endfunction
  
    function LFogState takes hashtable h, integer pk, integer ck returns fogstate
        return LoadFogStateHandle(h, pk, ck)
    endfunction
  
    function LFogModif takes hashtable h, integer pk, integer ck returns fogmodifier
        return LoadFogModifierHandle(h, pk, ck)
    endfunction
  
    function LFogModifier takes hashtable h, integer pk, integer ck returns fogmodifier
        return LoadFogModifierHandle(h, pk, ck)
    endfunction
  
    function LHashtable takes hashtable h, integer pk, integer ck returns hashtable
        return LoadHashtableHandle(h, pk, ck)
    endfunction

    function LHash takes hashtable h, integer pk, integer ck returns hashtable
        return LoadHashtableHandle(h, pk, ck)
    endfunction
    
    
    
    
    
    //HAVE API STARTS
    
    
    function HaveInteger takes hashtable h, integer pk, integer ck returns boolean
        return HaveSavedInteger(h, pk, ck)
    endfunction
    
    function HaveReal takes hashtable h, integer pk, integer ck returns boolean
        return HaveSavedReal(h, pk, ck)
    endfunction
    
    function HaveBoolean takes hashtable h, integer pk, integer ck returns boolean
        return HaveSavedBoolean(h, pk, ck)
    endfunction
    
    function HaveString takes hashtable h, integer pk, integer ck returns boolean
        return HaveSavedString(h, pk, ck)
    endfunction
    
    function HaveHandle takes hashtable h, integer pk, integer ck returns boolean
        return HaveSavedHandle(h, pk, ck)
    endfunction
    
    
    /*          And Again                       */
    
    function HInteger takes hashtable h, integer pk, integer ck returns boolean
        return HaveSavedInteger(h, pk, ck)
    endfunction
    
    function HReal takes hashtable h, integer pk, integer ck returns boolean
        return HaveSavedReal(h, pk, ck)
    endfunction
    
    function HBoolean takes hashtable h, integer pk, integer ck returns boolean
        return HaveSavedBoolean(h, pk, ck)
    endfunction
    
    function HString takes hashtable h, integer pk, integer ck returns boolean
        return HaveSavedString(h, pk, ck)
    endfunction
    
    function HHandle takes hashtable h, integer pk, integer ck returns boolean
        return HaveSavedHandle(h, pk, ck)
    endfunction
    
    //Removing API
    
    function RemoveInteger takes hashtable h, integer pk, integer ck returns nothing
        call RemoveSavedInteger(h, pk, ck)
    endfunction
    
    function RemoveReal takes hashtable h, integer pk, integer ck returns nothing
        call RemoveSavedReal(h, pk, ck)
    endfunction
    
    function RemoveBoolean takes hashtable h, integer pk, integer ck returns nothing
        call RemoveSavedBoolean(h, pk, ck)
    endfunction
    
    function RemoveString takes hashtable h, integer pk, integer ck returns nothing
        call RemoveSavedString(h, pk, ck)
    endfunction
    
    function RemoveHandle takes hashtable h, integer pk, integer ck returns nothing
        call RemoveSavedHandle(h, pk, ck)
    endfunction
    
    
    /*             And Again                    */
    
    function RInteger takes hashtable h, integer pk, integer ck returns nothing
        call RemoveSavedInteger(h, pk, ck)
    endfunction
    
    function RReal takes hashtable h, integer pk, integer ck returns nothing
        call RemoveSavedReal(h, pk, ck)
    endfunction
    
    function RBoolean takes hashtable h, integer pk, integer ck returns nothing
        call RemoveSavedBoolean(h, pk, ck)
    endfunction
    
    function RString takes hashtable h, integer pk, integer ck returns nothing
        call RemoveSavedString(h, pk, ck)
    endfunction
    
    function RHandle takes hashtable h, integer pk, integer ck returns nothing
        call RemoveSavedHandle(h, pk, ck)
    endfunction
    
    
    //Flushing API
    
    function FlushChild takes hashtable h, integer pk returns nothing
        call FlushChildHashtable(h, pk)
    endfunction
    
    function FlushParent takes hashtable h returns nothing
        call FlushParentHashtable(h)
    endfunction
    
    function FChild takes hashtable h, integer pk returns nothing
        call FlushChildHashtable(h, pk)
    endfunction
    
    function FParent takes hashtable h returns nothing
        call FlushParentHashtable(h)
    endfunction
    
endlibrary

JASS:
globals
    hashtable hash = InitHashtable()
endglobals

function AAA takes nothing returns nothing
    local timer t = GetExpiredTimer()
    call KillUnit(LUnit(hash, GetHandleId(t), 0))
    //this is the same as:
    call KillUnit(LoadUnit(hash, GetHandleId(t), 0))
    //...
endfunction

function AAB takes nothing returns nothing
    local timer t = CreateTimer()
    call SaveUnit(hash, GetHandleId(t), 0, GetTriggerUnit())
    //the same as:
    call SUnit(hash, GetHandleId(t), 0, GetTriggerUnit())
endfunction


Map providing the effectivness of this in attachment with 2 custom basic spells.

I Hope someone will find use for this as it can save you some time ;)
 
Last edited:
Level 29
Joined
Mar 10, 2009
Messages
5,016
1) There's no difference for this one and BJ's, so this is slower.
2) We already have Table.
3) Use textmacros.
JASS:
//! textmacro FUNC takes FName,value,RName
function $FName$ takes hashtable h, integer pk, integer ck, $value$ g returns boolean
    return Save$RName$(h, pk, ck, g)
endfunction
//! endtextmacro

//! runtextmacro FUNC("SaveGroup","group","GroupHandle")
//! runtextmacro FUNC("SaveLoc","location","LocationHandle")
//! runtextmacro FUNC("SaveRect","rect","RectHandle")
//! and so on...
 
Check out Table by Bribe.

JASS:
local Table tb = Table.create()
set tb[0] = 2
set tb[42372] = 10
set tb.unit[GetHandleId(gg_unit_H000_0000)] = gg_unit_H000_0000

JASS:
local TableArray tb = TableArray[0x40000]
set tb[0x10][982391] = 23
set tb[0x20].widget[90] = GetTriggerWidget()
set tb[0x40].unit[24234] = GetTriggerUnit()
set tb[324][432] = 2
 
Level 23
Joined
Apr 16, 2012
Messages
4,041
Mckill I though about something like that but I didnt know how to do that :D
Also not every saave hashtable call returns boolean
Int, Bool, Real, String returns nothing on save and load returns something else on any function call
Anyways thank you for showing me how textmacros works a little bit.

Mag I know there is/are table/s(Vexorians and Brides maybe more) but maybe not everyone use it, I dont use it :D
 
Still, you need to use the full names for the objects.

You can omit the "Handle" part for most of those Save functions.

Doing things like substituting Quest with Q isn't exactly a good move especially for APIs.

The API should be intuitive.

This could still be a good alternative, as the names /could/ be just as descriptive, yet shorter.
 
Level 6
Joined
Oct 23, 2011
Messages
182
^^ then why not make some big project to maximize replacing all native functions
with ones with smaller, comprehensible names

JASS:
library GetUnit

    function TriggerUnit takes nothing returns unit
        return GetTriggerUnit()
    endfunction
    
    function KillingUnit takes nothing returns unit
        return GetKillingUnit()
    endfunction
    
    function DyingUnit takes nothing returns unit
        return GetTriggerUnit()
    endfunction
    
    function LearningUnit takes nothing returns unit
        return GetLearningUnit()
    endfunction
        
    function LevelingUnit takes nothing returns unit
        return GetLevelingUnit()
    endfunction
        
    function LeavingUnit takes nothing returns unit
        return GetLeavingUnit()
    endfunction
    
    function BuyingUnit takes nothing returns unit
        return GetBuyingUnit()
    endfunction
        
    function SellingUnit takes nothing returns unit
        return GetSellingUnit()
    endfunction
    
endlibrary
 
Well, wrappers for those things aren't really needed. People have done it before, but they never caught on because it is usually more of a hassle to remember the short-term versions opposed to the native versions. The only case where it would make sense would be to make OO syntax for the natives since it is a different syntax.

In this case it was a nice gesture since hashtable natives are pretty long to type out, but we already have Table which also has some nice functionality to it.
 
Level 23
Joined
Apr 16, 2012
Messages
4,041
Ok lets see

People have done it before, but they never caught on because it is usually more of a hassle to remember the short-term versions opposed to the native versions.
Lol?
As long as you know what you want to save youre fine
Lets say I want to save unit, then I just call SaveUnit without the handle part

The only case where it would make sense would be to make OO syntax for the natives since it is a different syntax.
I may be noob now but idk what you meant(is it right?) here

but we already have Table which also has some nice functionality to it.


Just because we have Table doesnt mean hashtables are useless
Its like if I say "we already have Jass which also has some nice functionality over GUI so why use GUI?"
 
Level 16
Joined
Aug 7, 2009
Messages
1,403
1) There's no difference for this one and BJ's, so this is slower.

Those wrappers will most likely get inlined, so actually they're not slower.

Table is still superior to any other hashtable snippets, it has a clear API, efficient, versatile, and uses only one hashtable.

Just because we have Table doesnt mean hashtables are useless

Noone said they were, but if you have a fast system then why would you want to use a slower one? It also makes working with hashtables much more clear due to the struct syntax it involves.
 
Just because we have Table doesnt mean hashtables are useless
Its like if I say "we already have Jass which also has some nice functionality over GUI so why use GUI?"

Table uses hashtables. I wasn't saying hashtables are useless.

Anyway, I'm not trying to degrade the system. I was just giving my opinion, since the necessity and usefulness of a system is subjective. If you find this system useful, then that is good for you. :)
 
Level 23
Joined
Apr 16, 2012
Messages
4,041
Table uses hashtables. I wasn't saying hashtables are useless.

Anyway, I'm not trying to degrade the system. I was just giving my opinion, since the necessity and usefulness of a system is subjective. If you find this system useful, then that is good for you. :)

I didnt though about what you wrote as degrading my system, I took it as constructive critism(maybe? :D ) :)
also

Noone said they were, but if you have a fast system then why would you want to use a slower one? It also makes working with hashtables much more clear due to the struct syntax it involves.

This is not about the speed of system, Im not idiot I know calling function which calls function is slower then simple function call, this is about saving time while writing code which use hashtables.
 

Bribe

Code Moderator
Level 50
Joined
Sep 26, 2009
Messages
9,464
Wrappers are generally discouraged in the JASS community. Most of us are using Syntax Highlighters and JNGP has syntax completion so you don't have to type everything out. I think those solutions work perfectly fine and if I am looking at a resource that only provides wrappers I need to know what functionality it provides over what already exists - and if there is none there is almost no point whatsoever.

Also, you can't leave API ambiguous.

If you want to use this in your map you can but this thing doesn't belong out in the open (in my very honest and humble opinion).
 
Top