読者です 読者をやめる 読者になる 読者になる

元派遣プログラマの自称技術系ブログです。雑記とか自作のオープンソースプロジェクトの話とか。
Javaとか組込とかできます。お仕事ください。

Javaでのポインタの隠蔽

Cのポインタを隠蔽するためにJavaにポインタクラスを作った。

public class IntPointer {
	private int[] array_ref;		//配列
	private int array_offset;		//配列に対する基準値
	private int position;			//array_offsetに対する現在位置
	static IntPointer wrap(int[] i_array_ref,int i_offset)
	{
		return new IntPointer(i_array_ref,i_offset);
	}
	public void set(int i_value)
	{
		array_ref[array_offset+position]=i_value;		
	}
	public void set(int i_rel_positon,int i_value)
	{
		array_ref[array_offset+position+i_rel_positon]=i_value;
	}
	/**
	 * カレント位置の値を取得する
	 * @return
	 */
	public int get()
	{
		return array_ref[array_offset+position];
	}
	/**
	 * カレント位置から+i_slideの位置にある値を取得する。
	 * @param i_step
	 * @return
	 */
	public int get(int i_slide)
	{
		return array_ref[array_offset+position+i_slide];
	}
	public void incPtr()
	{
		position++;
	}
	public void addPtr(int v)
	{
		position+=v;
	}
	private IntPointer(int[] i_array_ref,int i_base_point)
	{
		array_offset	=i_base_point;
		array_ref		=i_array_ref;
		position		=0;
	}
	public IntPointer()
	{
		array_offset	=0;
		array_ref		=new int[1];
		position		=0;
	}
}

んだけど、例えば下のソースはそのままなおせない。
aが、a[8]なら出来るんだけど。

char a[2][4];
char *b;
int i;
b=&a[0][0];
for(i=0;i<8;i++){
  printf("%c",b++);
}

仕方が無いから全ての配列を1次元の配列に直して実装してる。でもそうすると…、要素にアクセスするたびに、掛け算しなきゃいけないんだよね。コレは結構(イヤだいぶ)処理速度に利いてきそうな気がする。

まあ、作ってみないとわからないか。