; 【動的型配列コンテナ】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 _itemthisItem=_item: return#modfunc local set var _itemthisItem=_item: return#modcfunc local itemreturn thisItem#modfunc local refItem var _item_item=thisItem: return#global#module VarArray list,thisCount#modcfunc local countreturn 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#modinitdimtype list,5thisCount=0return#define add(%1,%2)%tvaAdd %i=%2:__add@VarArray %1,%o#modfunc local __add var _itemnewmod list,@VarArrayItem,_itemthisCount++return#define set(%1,%2,%3)%tvaSet %i=%3:__set@VarArray %1,%2,%o#modfunc local __set int index,var _itemset@@VarArrayItem list(index),_itemreturn 0#define reSet(%1,%2,%3,%4) set@VarArray %1,%2,item@VarArray(%1,%2)%3%4#modcfunc local item int indexreturn item@@VarArrayItem(list(index))#modfunc local refItem int index,var _itemrefItem@@VarArrayItem list(index),_item: return#modfunc local remove int indexthisCount–dim tmprepeat thisCount-index,indexrefItem@@VarArrayItem list(cnt+1),tmpset@@VarArrayItem list(cnt),tmploopdelmod list(thisCount)return#global#endif;—-別ファイル—————————————————————-----------------------------------------------; 動作サンプル; VarArrayTest.hsp#runtime "hsp3cl"#include "VarArray.as"#module Program#deffunc maindimtype list1,5new@VarArray list1mes vaCount(list1)vaAdd list1,"ナス"mes vaCount(list1)vaAdd list1,50vaAdd list1,1.586mes "【list1】"vaForeach list1mes vaItem(list1,cnt)loopmes "【Index 1 changed】"vaSet list1,1,256vaReSet list1,2,*,2vaForeach list1mes vaItem(list1,cnt)loopmes "【list2】"new@VarArray list2vaAdd list2,"キュウリ"vaAdd list2,51vaAdd list2,1.1024vaAdd list2,*jumpingnew@VarArray inlistvaAdd inlist,"【VarArray In VarArray】"vaAdd list2,inlist //list2に渡されるのは参照のみvaAdd inlist,"ダイコン"vaAdd inlist,1024vaAdd inlist,M_PIdim itemvaForeach list2vaRefItem list2,cnt,itemif vartype(item)=vartype("label") {gosub item}else:if vartype(item)=vartype("struct") {vaForeach itemmes vaItem(item,cnt)loop}else {mes item}loopmes "【Removed list2】"vaRemove list2,1vaRemove list2,3dim itemvaForeach list2vaRefItem list2,cnt,itemif vartype(item)=vartype("label") {gosub item}else:if vartype(item)=vartype("struct") {vaForeach itemmes vaItem(item,cnt)loop}else {mes item}loopreturn*jumpingmes "ラベルジャンピング!": return#globalmain