実用には向かないです。バグありまくりかも...。
#include "hspinet.as"
#module hashMap keyT,valT,arr
#modinit int keyType,int valueType
dim keyT
dim valT
dimtype arr,valueType
keyT=keyType
valT=valueType
return
#modcfunc local cast str _val,int _T
dim T
if _T==0{
T=keyT
}else{
T=valT
}
dimtype res,T
switch T
case 4:
res=int(_val)
swbreak
case 3:
res=double(_val)
swbreak
case 2:
res=str(_val)
swbreak
swend
return res
#modcfunc local Mget str _key
dim index
sdim md5
dimtype key,keyT
key=cast(thismod,_key,0)
varmd5@ md5,key,strlen(_key)
index=int("$"+strmid(md5,0,4))/*indexが大きいと何故か配列に入らない*/
return arr(index)
#define global ctype Mget(%1,%2) Mget@hashMap(%1,str(%2))
#modfunc local Mset str _key,str _val
dim index
sdim md5
dimtype key,keyT
dimtype val,valT
key=cast(thismod,_key,0)
val=cast(thismod,_val,1)
varmd5@ md5,key,strlen(_key)
index=int("$"+strmid(md5,0,4))/*indexが大きいと何故か配列に入らない*/
arr(index)=val
return
#define global Mset(%1,%2,%3) Mset@hashMap %1,str(%2),str(%3)
#global
/*ここからサンプル*/
newmod m,hashMap,vartype("str")/*キーのタイプ*/,vartype("double")/*値のタイプ*/
Mset m,"a"/*キー*/,0.5/*値*/
Mset m,"b",5
mes Mget(m,"a"/*キー*/)*Mget(m,"b")