OSDN Git Service

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