; 【動的型配列コンテナ】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