- Joined
- Jun 21, 2012
- Messages
- 431
JASS:
library DimensionalArray/*
****************************************************************************************
*
* DimensionalArray
* ________________
* v2.0.1.1
* by Thelordmarshall
*
* ________
* /_/_/_/_/|
* /_/_/_/_/|/|
* /_/_/_/_/|/|/|
* /_/_/_/_/|/|/|/|
* |_|_|_|_|/|/|/|/
* |_|_|_|_|/|/|/
* |_|_|_|_|/|/
* |_|_|_|_|/
*
*
* Dimensional-Array is a tool that maximizes the use of the hashtable allowing
* the user to feel comfortable with their easy and complete interface.
*
* Why use Dimensional-Array?
* __________________________
*
* This resource was created for the purpose of having a multi-dimensional
* environment; in this case 4D. It should be noted that initially figured that use
* more than 4 dimensions were necessary, but in warcraft III is not.
*
* API:
* ___
*
* struct Array extends ArrayCore
* - static method create takes nothing returns Array
* - method destroy takes nothing returns nothing
* - method flush takes nothing returns nothing
* - method operator [] takes integer id returns ArrayDimensional
* - method operator $TYPE$= takes $TYPE$ value returns nothing
* - save handle, real, integer, boolean or string.
* - method operator $TYPE$ takes nothing returns $TYPE$
* - unit, player, integer, string, etc...
* - method has$TYPE$ takes nothing returns boolean
* - method remove$TYPE$ takes nothing returns nothing
*
* Credits:
* ________
* - looking_for_help: for their suggestions.
*
****************************************************************************************/
globals
private hashtable h=InitHashtable()
private integer key=0
private integer size=0
private integer keySize=0
private string array keyId
endglobals
private struct ArrayCore
private method operator hash takes nothing returns hashtable
if(0<this)then
set key=StringHash(keyId[keySize])
set keyId[keySize]=""
if(0<keySize)then
set keySize=keySize-1
endif
return h
endif
debug call DisplayTimedTextToPlayer(GetLocalPlayer(),0,0,60,"[Dimensional-Array] error: attempted to save/get value from invalid Array instance: ("+I2S(this)+" )")
return null
endmethod
//! textmacro ARRAY_OPERATOR takes OPERATOR,ARGUMENT,FUNC1,FUNC2
method operator $OPERATOR$= takes $ARGUMENT$ value returns nothing
call Save$FUNC1$(.hash,this,key,value)
endmethod
method has$FUNC2$ takes nothing returns boolean
return HaveSaved$FUNC2$(.hash,this,key)
endmethod
method remove$FUNC2$ takes nothing returns nothing
call RemoveSaved$FUNC2$(.hash,this,key)
endmethod
//! endtextmacro
//! runtextmacro ARRAY_OPERATOR("boolean","boolean","Boolean","Boolean")
//! runtextmacro ARRAY_OPERATOR("handle","agent","AgentHandle","Handle")
//! runtextmacro ARRAY_OPERATOR("integer","integer","Integer","Integer")
//! runtextmacro ARRAY_OPERATOR("real","real","Real","Real")
//! runtextmacro ARRAY_OPERATOR("string","string","Str","String")
//! textmacro ARRAY_TYPE takes TYPEA,TYPEB
method operator $TYPEA$ takes nothing returns $TYPEA$
return Load$TYPEB$(.hash,this,key)
endmethod
//! endtextmacro
// type list:
//=========================| Type | FuncType |================
//! runtextmacro ARRAY_TYPE( "boolean", "Boolean" )
//! runtextmacro ARRAY_TYPE( "boolexpr", "BooleanExprHandle" )
//! runtextmacro ARRAY_TYPE( "button", "ButtonHandle" )
//! runtextmacro ARRAY_TYPE( "defeatcondition", "DefeatConditionHandle" )
//! runtextmacro ARRAY_TYPE( "destructable", "DestructableHandle" )
//! runtextmacro ARRAY_TYPE( "dialog", "DialogHandle" )
//! runtextmacro ARRAY_TYPE( "effect", "EffectHandle" )
//! runtextmacro ARRAY_TYPE( "fogmodifier", "FogModifierHandle" )
//! runtextmacro ARRAY_TYPE( "fogstate", "FogStateHandle" )
//! runtextmacro ARRAY_TYPE( "force", "ForceHandle" )
//! runtextmacro ARRAY_TYPE( "group", "GroupHandle" )
//! runtextmacro ARRAY_TYPE( "hashtable", "HashtableHandle" )
//! runtextmacro ARRAY_TYPE( "image", "ImageHandle" )
//! runtextmacro ARRAY_TYPE( "integer", "Integer" )
//! runtextmacro ARRAY_TYPE( "item", "ItemHandle" )
//! runtextmacro ARRAY_TYPE( "itempool", "ItemPoolHandle" )
//! runtextmacro ARRAY_TYPE( "leaderboard", "LeaderboardHandle" )
//! runtextmacro ARRAY_TYPE( "lightning", "LightningHandle" )
//! runtextmacro ARRAY_TYPE( "location", "LocationHandle" )
//! runtextmacro ARRAY_TYPE( "multiboard", "MultiboardHandle" )
//! runtextmacro ARRAY_TYPE( "multiboarditem", "MultiboardItemHandle" )
//! runtextmacro ARRAY_TYPE( "player", "PlayerHandle" )
//! runtextmacro ARRAY_TYPE( "quest", "QuestHandle" )
//! runtextmacro ARRAY_TYPE( "questitem", "QuestItemHandle" )
//! runtextmacro ARRAY_TYPE( "real", "Real" )
//! runtextmacro ARRAY_TYPE( "rect", "RectHandle" )
//! runtextmacro ARRAY_TYPE( "region", "RegionHandle" )
//! runtextmacro ARRAY_TYPE( "sound", "SoundHandle" )
//! runtextmacro ARRAY_TYPE( "string", "Str" )
//! runtextmacro ARRAY_TYPE( "texttag", "TextTagHandle" )
//! runtextmacro ARRAY_TYPE( "timerdialog", "TimerDialogHandle" )
//! runtextmacro ARRAY_TYPE( "timer", "TimerHandle" )
//! runtextmacro ARRAY_TYPE( "trackable", "TrackableHandle" )
//! runtextmacro ARRAY_TYPE( "triggeraction", "TriggerActionHandle" )
//! runtextmacro ARRAY_TYPE( "triggercondition","TriggerConditionHandle" )
//! runtextmacro ARRAY_TYPE( "event", "TriggerEventHandle" )
//! runtextmacro ARRAY_TYPE( "trigger", "TriggerHandle" )
//! runtextmacro ARRAY_TYPE( "ubersplat", "UbersplatHandle" )
//! runtextmacro ARRAY_TYPE( "unit", "UnitHandle" )
//! runtextmacro ARRAY_TYPE( "unitpool", "UnitPoolHandle" )
//! runtextmacro ARRAY_TYPE( "widget", "WidgetHandle" )
endstruct
//! textmacro ARRAY_DIMENSIONAL takes NAME,RETURNS,EXTENDS
private struct $NAME$ extends $EXTENDS$
method operator [] takes integer id returns $RETURNS$
set keyId[keySize]=keyId[keySize]+","+I2S(id)
return this
endmethod
endstruct
//! endtextmacro
//! runtextmacro ARRAY_DIMENSIONAL("Array4D","ArrayCore","array")
//! runtextmacro ARRAY_DIMENSIONAL("Array3D","Array4D","ArrayCore")
//! runtextmacro ARRAY_DIMENSIONAL("Array2D","Array3D","ArrayCore")
struct Array extends ArrayCore
method operator [] takes integer id returns Array2D
set keySize=keySize+1
set keyId[keySize]=I2S(id)
return this
endmethod
method flush takes nothing returns nothing
call FlushChildHashtable(h,this)
endmethod
static method create takes nothing returns Array
local thistype this=LoadInteger(h,0,0)
if(0==this)then
set this=size+1
set size=this
else
call SaveInteger(h,0,0,LoadInteger(h,0,this))
endif
return this
endmethod
method destroy takes nothing returns nothing
call .flush()
call SaveInteger(h,0,this,LoadInteger(h,0,0))
call SaveInteger(h,0,0,this)
endmethod
endstruct
endlibrary
Last edited: