JASS:
library DataHandler initializer Initialization
globals
private constant integer A=65
private constant integer B=66
private constant integer C=67
private constant integer D=68
private constant integer E=69
private constant integer F=70
private constant integer G=71
private constant integer H=72
private constant integer I=73
private constant integer J=74
private constant integer K=75
private constant integer L=76
private constant integer M=77
private constant integer N=78
private constant integer O=79
private constant integer P=80
private constant integer Q=81
private constant integer R=82
private constant integer S=83
private constant integer T=84
private constant integer U=85
private constant integer V=86
private constant integer W=87
private constant integer X=88
private constant integer Y=89
private constant integer Z=90
private string array Letter
endglobals
private function Initialization takes nothing returns nothing
set Letter[A]="A"
set Letter<b>="B"
set Letter[C]="C"
set Letter[D]="D"
set Letter[E]="E"
set Letter[F]="F"
set Letter[G]="G"
set Letter[H]="H"
set Letter<i>="I"
set Letter[J]="J"
set Letter[K]="K"
set Letter[L]="L"
set Letter[M]="M"
set Letter[N]="N"
set Letter[O]="O"
set Letter[P]="P"
set Letter[Q]="Q"
set Letter[R]="R"
set Letter<s>="S"
set Letter[T]="T"
set Letter<u>="U"
set Letter[V]="V"
set Letter[W]="W"
set Letter[X]="X"
set Letter[Y]="Y"
set Letter[Z]="Z"
endfunction
function DH_H2I takes handle h returns integer
return h
return 0
endfunction
function DH_H2S takes handle h returns string
return I2S(DH_H2I(h))
endfunction
function DH_GetHandleName takes handle h returns string
local integer hj=DH_H2I(h)-0x100000
local string basic=""
local string s=""
local integer n=A-1
local integer j=-1
if hj>Z then
loop
set j=j+1
exitwhen hj<=Z
set hj=hj-1
endloop
endif
set basic=I2S(hj)
loop
set n=n+1
exitwhen n>Z
if n==hj then
set s=s+Letter[n]
set n=Z+1
endif
endloop
debug call BJDebugMsg("basic == "+basic)
debug call BJDebugMsg("s == "+s)
return s
endfunction
//! textmacro DH_Create takes NAME,TYPE
private struct stringex$TYPE$
string sxname
string sx$TYPE$
string sxfull
endstruct
globals
private stringex$TYPE$ array str$TYPE$[400000]
private $TYPE$ array $TYPE$store[400000]
endglobals
function Insert$NAME$Data takes $TYPE$ xx returns string // stores $TYPE$ data in a string
local integer i=DH_H2I(xx)
set str$TYPE$<i>=stringex$TYPE$.create()
set str$TYPE$<i>.sxname=DH_GetHandleName(xx)
set str$TYPE$<i>.sx$TYPE$=DH_H2S(xx)
set str$TYPE$<i>.sxfull=str$TYPE$<i>.sxname+str$TYPE$<i>.sx$TYPE$
debug call BJDebugMsg(str$TYPE$<i>.sxfull)
set $TYPE$store[S2I(str$TYPE$<i>.sxfull)]=xx
return str$TYPE$<i>.sxfull
endfunction
function Get$NAME$Data takes string sxfull returns $TYPE$ // gets $TYPE$ data in a string and converts it into a $TYPE$
return $TYPE$store[S2I(sxfull)]
endfunction
//! endtextmacro
//! runtextmacro DH_Create("Unit","unit")
//! runtextmacro DH_Create("Timer","timer")
//! runtextmacro DH_Create("Trigger","trigger")
//! runtextmacro DH_Create("Group","group")
endlibrary</i></i></i></i></i></i></i></i></i></u></s></i></b>
What it does? Stores things via strings.
Got the idea from Toadcop a long time ago. Didn't know if this was useful to anyone, but if it is, I'll optimize it and release it.