NO.1006:indexを使って配列にアクセスするモジュール
配列の全要素にアクセスする時は
大体repeatとcntを使ってアクセスします
でもcntは動く値なので
静的な動作に感じられません
そこでLISTのようにadd、getできるモジュールを作成してみました
cntの指定はしなくてよくなったのですが
インスタンスを書く必要があるのが不満
・以下テストコード
こんなかんじで使います
大体repeatとcntを使ってアクセスします
でもcntは動く値なので
静的な動作に感じられません
そこでLISTのようにadd、getできるモジュールを作成してみました
cntの指定はしなくてよくなったのですが
インスタンスを書く必要があるのが不満
array_exモジュール
FILE名:FILE_array_push_pop.hsp
// "FILE_array_ex.hsp"が必要! // モジュール変数の説明 // array_dat:array_exのインスタンス // size:array_exのデータを確保する単位 // index4push:add時のindex // index4pop:get_add_index時のindex #module array_push_pop array_dat,size,index4push,index4pop #modinit str type flag=0 size=16 index4push=0 index4pop=0 if type=="S"{size=16:flag=1} if type=="M"{size=64:flag=1} if type=="L"{size=256:flag=1} if flag!=1{ logmes "array_push_pop内modinitのERROR" logmes "modinitの引数は\"S\"か\"M\"か\"L\"を指定してください" return } newmod array_dat,array_ex,size return // index4pushクリア #modfunc reset_push_at_array_push_pop index4push=0 return // index4pushをset #modfunc set_index_push_at_array_push_pop int p index4push=p return // index4pushをget #modfunc get_index_push_at_array_push_pop var r r=index4push return // index4popクリア #modfunc reset_pop_at_array_push_pop index4pop=0 return // index4popをset #modfunc set_index_pop_at_array_push_pop int p index4pop=p return // index4popをget #modfunc get_index_pop_at_array_push_pop var r r=index4pop return // インスタンスに数値をadd #modfunc add_at_array_push_pop int p set_ex_at_array_ex array_dat,p,index4push index4push++ return // インスタンスから数値を取り出す #modfunc get_add_index_at_array_push_pop var r get_at_array_ex array_dat,r,index4pop index4pop++ return #global |
・以下テストコード
#include "FILE_array_ex.hsp" #include "FILE_array_push_pop.hsp" newmod o,array_push_pop,"M" // add_at_array_push_popのテスト add_at_array_push_pop o,123 add_at_array_push_pop o,456 add_at_array_push_pop o,789 // get_index_push_at_array_push_popのテスト r=0 get_index_push_at_array_push_pop o,r logmes "push_index : "+str(r) // get_add_index_at_array_push_popのテスト。兼dump r=0 get_add_index_at_array_push_pop o,r logmes str(r) r=0 get_add_index_at_array_push_pop o,r logmes str(r) r=0 get_add_index_at_array_push_pop o,r logmes str(r) // get_index_pop_at_array_push_popのテスト r=0 get_index_pop_at_array_push_pop o,r logmes "pop_index : "+str(r) // reset_pop_at_array_push_popのテスト reset_pop_at_array_push_pop o r=0 get_index_pop_at_array_push_pop o,r logmes "pop_index : "+str(r) // set_index_pop_at_array_push_popのテスト set_index_pop_at_array_push_pop o,2 r=0 get_index_pop_at_array_push_pop o,r logmes "pop_index : "+str(r) r=0 get_add_index_at_array_push_pop o,r logmes str(r) // reset_push_at_array_push_popのテスト reset_push_at_array_push_pop o r=0 get_index_push_at_array_push_pop o,r logmes "push_index : "+str(r) add_at_array_push_pop o,256 // set_index_push_at_array_push_popのテスト set_index_push_at_array_push_pop o,2 add_at_array_push_pop o,512 reset_pop_at_array_push_pop o // dump r=0 get_add_index_at_array_push_pop o,r logmes str(r) r=0 get_add_index_at_array_push_pop o,r logmes str(r) r=0 get_add_index_at_array_push_pop o,r logmes str(r) |
こんなかんじで使います
#include "FILE_array_ex.hsp" #include "FILE_array_push_pop.hsp" newmod o,array_push_pop,"M" repeat 32,1 add_at_array_push_pop o,cnt loop repeat 32 r=0 get_add_index_at_array_push_pop o,r logmes "var : "+str(r) loop logmes "" newmod o2,array_push_pop,"M" repeat 32,1 add_at_array_push_pop o2,(cnt*2) loop repeat 32 r=0 get_add_index_at_array_push_pop o2,r logmes "var : "+str(r) loop stop |