【動的型配列コンテナ】VarArrayモジュール

; 【動的型配列コンテナ】VarArrayモジュール ; VarArray.as #ifndef VarArr […]

; 【動的型配列コンテナ】VarArrayモジュール ; VarArray.as #ifndef VarArr […]

  • タグ:
  • タグはありません
; VarArray
; VarArray.as
#ifndef VarArray
#ifndef VarArrayAliasOff
#define global vaCount count@VarArray
#define global vaForeach foreach@VarArray
#define global vaAdd add@VarArray
#define global vaSet set@VarArray
#define global vaReSet reSet@VarArray
#define global vaItem item@VarArray
#define global vaRefItem refItem@VarArray
#define global vaRemove remove@VarArray
#endif
#module @VarArrayItem thisItem
#modinit var _item
thisItem=_item: return
#modfunc local set var _item
thisItem=_item: return
#modcfunc local item
return thisItem
#modfunc local refItem var _item
_item=thisItem: return
#global
#module VarArray list,thisCount
#modcfunc local count
return thisCount
#define global foreach@VarArray(%1) repeat count@VarArray(%1)
#define new(%1) dimtype %1,5: newmod %1,VarArray
#define news(%1) newmod %1,VarArray
#modinit
dimtype list,5
thisCount=0
return
#define add(%1,%2)%tvaAdd %i=%2:__add@VarArray %1,%o
#modfunc local __add var _item
newmod list,@VarArrayItem,_item
thisCount++
return
#define set(%1,%2,%3)%tvaSet %i=%3:__set@VarArray %1,%2,%o
#modfunc local __set int index,var _item
set@@VarArrayItem list(index),_item
return 0
#define reSet(%1,%2,%3,%4) set@VarArray %1,%2,item@VarArray(%1,%2)%3%4
#modcfunc local item int index
return item@@VarArrayItem(list(index))
#modfunc local refItem int index,var _item
refItem@@VarArrayItem list(index),_item: return
#modfunc local remove int index
thisCount–
dim tmp
repeat thisCount-index,index
refItem@@VarArrayItem list(cnt+1),tmp
set@@VarArrayItem list(cnt),tmp
loop
delmod list(thisCount)
return
#global
#endif
;—-—————————————————————-----------------------------------------------
;
; VarArrayTest.hsp
#runtime "hsp3cl"
#include "VarArray.as"
#module Program
#deffunc main
dimtype list1,5
new@VarArray list1
mes vaCount(list1)
vaAdd list1,""
mes vaCount(list1)
vaAdd list1,50
vaAdd list1,1.586
mes "list1"
vaForeach list1
mes vaItem(list1,cnt)
loop
mes "Index 1 changed"
vaSet list1,1,256
vaReSet list1,2,*,2
vaForeach list1
mes vaItem(list1,cnt)
loop
mes "list2"
new@VarArray list2
vaAdd list2,""
vaAdd list2,51
vaAdd list2,1.1024
vaAdd list2,*jumping
new@VarArray inlist
vaAdd inlist,"VarArray In VarArray"
vaAdd list2,inlist //list2
vaAdd inlist,""
vaAdd inlist,1024
vaAdd inlist,M_PI
dim item
vaForeach list2
vaRefItem list2,cnt,item
if vartype(item)=vartype("label") {
gosub item
}
else:if vartype(item)=vartype("struct") {
vaForeach item
mes vaItem(item,cnt)
loop
}
else {
mes item
}
loop
mes "Removed list2"
vaRemove list2,1
vaRemove list2,3
dim item
vaForeach list2
vaRefItem list2,cnt,item
if vartype(item)=vartype("label") {
gosub item
}
else:if vartype(item)=vartype("struct") {
vaForeach item
mes vaItem(item,cnt)
loop
}
else {
mes item
}
loop
return
*jumping
mes "!": return
#global
main
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX