OSDN Git Service

[更新]nyatlaブランチ
[nyartoolkit-and/nyartoolkit-and.git] / src / jp / nyatla / nyartoolkit / core / labeling / NyLabelingLabelList.java
1 package jp.nyatla.nyartoolkit.core.labeling;\r
2 \r
3 import jp.nyatla.nyartoolkit.NyARException;\r
4 \r
5 /**\r
6  * NyLabelの予約型動的配列\r
7  *\r
8  */\r
9 public class NyLabelingLabelList\r
10 {    \r
11     private final static int ARRAY_APPEND_STEP=128;\r
12     private final static int ARRAY_MAX=1024*16;\r
13     private final NyLabelingLabel[] _labels;\r
14     private int _allocated_size;\r
15     private int _length;\r
16     /**\r
17      * 最大ARRAY_MAX個の動的割り当てバッファを準備する。\r
18      * @param i_holder_size\r
19      */\r
20     public NyLabelingLabelList()\r
21     {\r
22         //ポインタだけははじめに確保しておく\r
23         this._labels=new NyLabelingLabel[ARRAY_MAX];\r
24         //現在アロケート中の個数は0\r
25         this._allocated_size=0;\r
26         this._length=0;\r
27     }\r
28     /**\r
29      * i_indexで指定した番号までのバッファを準備する。\r
30      * @param i_index\r
31      */\r
32     public final void reserv(int i_index) throws NyARException\r
33     {\r
34         //アロケート済みなら即リターン\r
35         if(this._allocated_size>i_index){\r
36             return;\r
37         }\r
38         //要求されたインデクスは範囲外\r
39         if(i_index>=this._labels.length){\r
40             throw new NyARException();\r
41         }\r
42         //追加アロケート範囲を計算\r
43         int range=i_index+ARRAY_APPEND_STEP;\r
44         if(range>=this._labels.length){\r
45             range=this._labels.length;\r
46         }\r
47         //アロケート\r
48         for(int i=this._allocated_size;i<range;i++)\r
49         {\r
50             this._labels[i]=new NyLabelingLabel();\r
51         }\r
52         this._allocated_size=range;\r
53     }\r
54     public final NyLabelingLabel[] getArray()\r
55     {\r
56         return this._labels;\r
57     }\r
58     /**\r
59      * 動的配列の見かけ上の要素数を設定する。\r
60      */\r
61     public final void setLength(int i_length)\r
62     {\r
63         this._length=i_length;\r
64         \r
65     }\r
66     public final int getCount()\r
67     {\r
68         return this._length;\r
69     }\r
70 }\r