OSDN Git Service

[TAG]NyARToolkit Version 0.5
[nyartoolkit-and/nyartoolkit-and.git] / tags / 0.5 / src / jp / nyatla / util / DoublePointer.java
1 package jp.nyatla.util;\r
2 /**\r
3  * double型ポインタのエミュレートクラス\r
4  * 対象のdouble配列を基点を基準に参照する。\r
5  * @author atla\r
6  *\r
7  */\r
8 public class DoublePointer\r
9 {\r
10         private double[] array_ref;     //配列\r
11         private int array_offset;               //配列に対する基準値\r
12         private int position;                   //array_offsetに対する現在位置\r
13         public static DoublePointer wrap(double[] i_array_ref,int i_offset)\r
14         {\r
15                 return new DoublePointer(i_array_ref,i_offset);\r
16         }\r
17         public static DoublePointer wrap(DoublePointer i_inst)\r
18         {\r
19                 return new DoublePointer(i_inst.array_ref,i_inst.getPtrArrayOffset());\r
20         }\r
21         //現在位置からのサブシーケンスを返す。\r
22         public DoublePointer slice(int i_offset)\r
23         {\r
24                 return DoublePointer.wrap(array_ref,array_offset+position+i_offset);\r
25         }\r
26         public void set(double i_value)\r
27         {\r
28                 array_ref[array_offset+position]=i_value;               \r
29         }\r
30         public void set(int i_rel_positon,double i_value)\r
31         {\r
32                 array_ref[array_offset+position+i_rel_positon]=i_value;\r
33         }\r
34         /**\r
35          * カレント位置の値を取得する\r
36          * @return\r
37          */\r
38         public double get()\r
39         {\r
40                 return array_ref[array_offset+position];\r
41         }\r
42         /**\r
43          * カレント位置から+i_slideの位置にある値を取得する。\r
44          * @param i_step\r
45          * @return\r
46          */\r
47         public double get(int i_slide)\r
48         {\r
49                 return array_ref[array_offset+position+i_slide];\r
50         }\r
51         public void incPtr()\r
52         {\r
53                 position++;\r
54         }\r
55         public void addPtr(int v)\r
56         {\r
57                 position+=v;\r
58         }\r
59         public double[] array()\r
60         {\r
61                 return array_ref;\r
62         }\r
63         public void subValue(double i_val)\r
64         {\r
65                 array_ref[array_offset+position]-=i_val;\r
66         }\r
67         public void subValue(int i_step,double i_val)\r
68         {\r
69                 array_ref[array_offset+position+i_step]-=i_val;\r
70         }\r
71         public void addValue(double i_val)\r
72         {\r
73                 array_ref[array_offset+position]+=i_val;\r
74         }\r
75         public void addValue(int i_step,double i_val)\r
76         {\r
77                 array_ref[array_offset+position+i_step]+=i_val;\r
78         }\r
79 \r
80         /**\r
81          * 現在位置のオフセット位置を返す。\r
82          * @return\r
83          */\r
84         public int getPtrArrayOffset()\r
85         {\r
86                 return array_offset+position;\r
87         }\r
88         private DoublePointer(double[] i_array_ref,int i_base_point)\r
89         {\r
90                 array_offset    =i_base_point;\r
91                 array_ref               =i_array_ref;\r
92                 position                =0;\r
93         }\r
94         public DoublePointer(int i_length)\r
95         {\r
96                 array_offset    =0;\r
97                 array_ref               =new double[i_length];\r
98                 position                =0;             \r
99         }\r
100         public DoublePointer()\r
101         {\r
102                 array_offset    =0;\r
103                 array_ref               =new double[1];\r
104                 position                =0;             \r
105         }\r
106 }