kingkingyyk3
Visitor (Welcome to the Jungle, Baby!)
- Reaction score
- 216
vJass Edition :
Zinc Edition :
JASS:
///////////////////////////////////////////////
// ___ ___ ___
// / _ | | \ / _ \ __ __ __ _ _
// |_|/ / | || | ||_|| | _| | _| | | ||_||
// / /_ | || | | _ | || || |||| |__ |
// |____| |___/ || || || || |_ \ __||
//
// Extended 2D Array (vJass)
//
// present by kingking
//
// How to use?
// //! textmacro 2DArray takes PREFIX, NAME, TYPE, LOAD
// Here is the textmacro to let you play with it.
// PREFIX -> private/public/nothing
// NAME -> the variable's name
// TYPE -> the type of variable
// LOAD -> Functions of hashtable to store and get data. For integer, you need "Integer".
//
// Example :
// I need a 2d integer array vars in my library!
// //! runtextmacro 2DArray("private","XnY","integer","Integer")
// I need another 2d unit array vars!
// //! runtextmacro 2DArray("private","Creeps","unit","UnitHandle")
//
// -Pros- :
// 1) Practically unlimited array index.(Max value = 2^32)
//
// -Cons- :
// 2) Generate a hashtable on every 2d variables.
////////////////////////////////////////////////
library ExtendedTwoDimensionalArray
//! textmacro 2DArray takes PREFIX, NAME, TYPE, LOAD
$PREFIX$ struct $NAME$
private static hashtable ht
method operator [] takes integer i returns $TYPE$
return Load$LOAD$(thistype.ht,this,i)
endmethod
method operator []= takes integer i, unit value returns nothing
call Save$LOAD$(thistype.ht,this,i,value)
endmethod
static method operator [] takes integer i returns thistype
return i
endmethod
private static method onInit takes nothing returns nothing
set thistype.ht = InitHashtable()
endmethod
endstruct
//! endtextmacro
endlibrary
Zinc Edition :
JASS:
///////////////////////////////////////////////
// ___ ___ ___
// / _ | | \ / _ \ __ __ __ _ _
// |_|/ / | || | ||_|| | _| | _| | | ||_||
// / /_ | || | | _ | || || |||| |__ |
// |____| |___/ || || || || |_ \ __||
//
// Extended 2D Array (Zinc)
//
// present by kingking
//
// How to use?
// //! textmacro 2DArray takes PREFIX, NAME, TYPE, LOAD
// Here is the textmacro to let you play with it.
// PREFIX -> private/public/nothing
// NAME -> the variable's name
// TYPE -> the type of variable
// LOAD -> Functions of hashtable to store and get data. For integer, you need "Integer".
//
// Example :
// I need a 2d integer array vars in my library!
// //! runtextmacro 2DArray("private","XnY","integer","Integer")
// I need another 2d unit array vars!
// //! runtextmacro 2DArray("private","Creeps","unit","UnitHandle")
//
// -Pros- :
// 1) Practically unlimited array index.
//
// -Cons- :
// 2) Generate a hashtable on every 2d variables.
////////////////////////////////////////////////
//! zinc
library ExtendedTwoDimensionalArray
{
//! textmacro 2DArray takes PREFIX, NAME, TYPE, LOAD
$PREFIX$ struct $NAME$
{
private static hashtable ht ;
method operator[] (integer i) -> $TYPE$
{
return Load$LOAD$(thistype.ht,this,i);
}
method operator[]= (integer i, $TYPE$ value)
{
Save$LOAD$(thistype.ht,this,i,value);
}
static method operator[] (integer i) -> thistype
{
return i;
}
private static method onInit()
{
thistype.ht = InitHashtable();
}
}
//! endtextmacro
}
//! endzinc