HSPポータル
サイトマップ お問い合わせ


HSPTV!掲示板


未解決 解決 停止 削除要請

2012
0829
@keymemcopy関係5解決


@key

リンク

2012/8/29(Wed) 18:53:18|NO.48905

delが消す対象の番号で
sprが消す対象が入っている配列です(要素数1000のint型)


dim sprcpy,1000 ;sprと同じ形のものを作る memcpy sprcpy,spr,1000*4 ;それにsprの内容をコピー memcpy spr,sprcpy,del*4,0,0 ;delの直前までの部分をsprに上書き memcpy spr,sprcpy,(1000-del-1)*4,(del+1)*4,(del+2)*4 ;delの直後から最後までをdelが消えるように上書き return
sprという配列からdel番の値を消す、という風にしたいんですがうまくいきません
なにがおかしいんでしょうか?

たぶんオフセットなどが間違っていると思うんですが自分の頭ではもう限界です・・・



この記事に返信する


KA

リンク

2012/8/29(Wed) 19:19:28|NO.48907

>>dim sprcpy,1000 ;sprと同じ形のものを作る
数値型変数を1000個作って
>>memcpy sprcpy,spr,1000*4 ;それにsprの内容をコピー
コピー
>>memcpy spr,sprcpy,del*4,0,0 ;delの直前までの部分をsprに上書き
なにがしたいんだ。
>>memcpy spr,sprcpy,(1000-del-1)*4,(del+1)*4,(del+2)*4 ;delの直後から最後までをdelが消えるように上書き
良く分からないが前詰めしたいのかな。



暇人

リンク

2012/8/29(Wed) 19:29:35|NO.48908

削除して詰めるだけならこれで良いんじゃないの?

del=100 dim spr,1000 spr(del)=1,2,3 repeat 3,del mes strf("%d : %d",cnt,spr(cnt)) loop memcpy spr,spr,(1000-del-1)*4,(del)*4,(del+1)*4 ;delの直後から最後までをdelが消えるように上書き mes "削除後" repeat 3,del mes strf("%d : %d",cnt,spr(cnt)) loop
最後尾は上書きコピーされずに残る
必要ならspr(999)=0とでもすれば良い



@key

リンク

2012/8/29(Wed) 20:00:48|NO.48909

ああ
直後からのを上書きするだけでいいんですね・・・
ありがとうございます



@key

リンク

2012/8/29(Wed) 22:57:47|NO.48914

二次元配列でも使えるようにしたくて

del=100 dim spr,1000 spr(del,2)=1,2,3 repeat 3,del mes strf("%d : %d",cnt,spr(cnt,2)) loop memcpy spr,spr,(1000-del-1)*4,(del)*4*2,(del+1)*4*2 ;delの直後から最後までをdelが消えるように上書き mes "削除後" repeat 3,del mes strf("%d : %d",cnt,spr(cnt,2)) loop
としましたがうまくいきません
どうすればいいんですか?



ヂオン

リンク

2012/8/30(Thu) 00:25:54|NO.48916


// %1 = 変数 // %2 = 削除する位置(byte) // %3 = 削除するサイズ(byte) // %4 = 確保されているバッファのサイズ(byte) #define global DeleteMemory(%1,%2,%3,%4) \ int_work@hMem_module = %2+%3 :\ memcpy %1 , %1 , %4-int_work@hMem_module , %2 , int_work@hMem_module // データの構造を定義 #enum DAT1 = 0 #enum DAT2 #enum DAT3 #enum TOTALDAT #const TOTALDAT_BUFSIZE TOTALDAT*4 // データの数を定義 #const ARRAYLEN 5 dim v,TOTALDAT,ARRAYLEN repeat ARRAYLEN v(0,cnt) = -1,-1,-1 loop v(0,2) = 100,100,100 i = TOTALDAT_BUFSIZE*2 a = ARRAYLEN*TOTALDAT_BUFSIZE DeleteMemory v,i,TOTALDAT_BUFSIZE,a

 以前書いたマクロをアップします。
 主に、指定した変数の指定した位置を指定したサイズ、削除して詰めます。

 



ONION software Copyright 1997-2023(c) All rights reserved.