OSDN Git Service

[NyARToolKit for java]update document
[nyartoolkit-and/nyartoolkit-and.git] / lib / src / jp / nyatla / nyartoolkit / core / utils / NyARManagedObjectPool.java
index 19314e8..5da704d 100644 (file)
@@ -6,24 +6,42 @@ import jp.nyatla.nyartoolkit.NyARException;
 \r
 \r
 \r
-\r
-\r
 /**\r
- * 参照カウンタ付きのobjectPoolです。NyARManagedObjectから派生したオブジェクトを管理します。\r
- * このクラスは、参照カウンタ付きのオブジェクト型Tのオブジェクトプールを実現します。\r
+ * このクラスは、参照カウンタ付きのObjectPoolの基本クラスです。\r
+ * {@link NyARManagedObject}から派生したオブジェクト型Tのオブジェクトプールを実現します。\r
+ * \r
+ * オブジェクトプールは、未割当リストを使って、オブジェクト要素を管理します。\r
+ * はじめ、全てのオブジェクト要素は未割当リストにあります。オブジェクト要素の生成要求があると、オブジェクトプール\r
+ * は未割当リストにあるオブジェクト要素の参照カウンタを1加算して、未割当リストから削除します。\r
+ * 逆に、オブジェクト要素の解放を要求があると、オブジェクト要素の参照カウンタを1減算して、その数が 0になったら、\r
+ * オブジェクト要素を未割当リストへ加えます。\r
+ * <br/>\r
+ * このクラスは、NyARManagedObjectと密接に関係して動作することに注意してください。\r
+ * 割り当て関数はオブジェクトプールの{@link NyARManagedObjectPool#newObject}、解放関数にはオブジェクト要素の\r
+ * {@link NyARManagedObject#releaseObject()}を使います。\r
+ * <br/>\r
+ * また、このクラスは{@link NyARManagedObject}に対して、特殊な関数を持つインタフェイスを提供します。\r
+ * このインタフェイスは、{@link NyARManagedObject}が{@link NyARManagedObjectPool}のリストを操作するために使います。\r
+ * <p>継承クラスの実装について - \r
+ * このクラスは、そのまま実体化できません。継承クラスを実装する必要があります。\r
+ * 実装するには、{@link #createElement}をオーバライドして、コンストラクタから{@link #initInstance}を呼び出します。\r
+ * {@link #initInstance}には2種類の関数があります。要素生成パラメータの有無で、どちらかを選択して呼び出してください。\r
+ * </p>\r
  * \r
- * このクラスは、NyARManagedObjectと密接に関連して動作することに注意してください。\r
- * 要素の作成関数はこのクラスで公開しますが、要素の解放関数は要素側に公開します。\r
  * @param <T>\r
  */\r
 public class NyARManagedObjectPool<T extends NyARManagedObject>\r
 {\r
        /**\r
+        * このクラスは、{@link NyARManagedObject}へ提供する操作インタフェイスの実体です。\r
+        * 未割当リストを操作する関数を定義します。\r
         * Javaの都合でバッファを所有させていますが、別にこの形で実装しなくてもかまいません。\r
         */\r
        public class Operator implements NyARManagedObject.INyARManagedObjectPoolOperater\r
        {\r
+               /** 要素の実体の保管用リスト*/\r
                public NyARManagedObject[] _buffer;\r
+               /** 未割当オブジェクトのリスト*/\r
                public NyARManagedObject[] _pool;\r
                public int _pool_stock;\r
                public void deleteObject(NyARManagedObject i_object)\r
@@ -35,15 +53,15 @@ public class NyARManagedObjectPool<T extends NyARManagedObject>
                }\r
        }\r
        /**\r
-        * 公開するオペレータオブジェクトです\r
-        * このプールに所属する要素以外からは参照しないでください。\r
+        * オブジェクト要素から参照する操作インタフェイス。ユーザが使用することはありません\r
+        * <p>メモ - このスコープはprotectedではないか?</p>\r
         */\r
        public Operator _op_interface=new Operator();\r
 \r
        /**\r
-        * ã\83\97ã\83¼ã\83«ã\81\8bã\82\89å\9e\8b\81®ã\82ªã\83\96ã\82¸ã\82§ã\82¯ã\83\88ã\82\92割り当てて返します。\r
+        * ã\81\93ã\81®é\96¢æ\95°ã\81¯ã\80\81æ\96°ã\81\97ã\81\84ã\82ªã\83\96ã\82¸ã\82§ã\82¯ã\83\88ã\82\92ï¼\91å\80\8b割り当てて返します。\r
         * @return\r
-        * 新しいオブジェクト\r
+        * 新しいオブジェクト。失敗した場合はnull\r
         */\r
        @SuppressWarnings("unchecked")\r
        public T newObject() throws NyARException\r
@@ -57,16 +75,22 @@ public class NyARManagedObjectPool<T extends NyARManagedObject>
                return (T)(pool._pool[pool._pool_stock].initObject());\r
        }\r
        /**\r
-        * 実体化の拒否の為に、コンストラクタを隠蔽します。\r
-        * 継承クラスを作成して、初期化処理を実装してください。\r
+        * コンストラクタです。\r
+        * 生成拒否の為に、コンストラクタを隠蔽します。\r
+        * 継承クラスを作成してください。\r
         */\r
        protected NyARManagedObjectPool()\r
        {\r
        }\r
        /**\r
-        * オブジェクトを初期化します。この関数は、このクラスを継承したクラスを公開するときに、コンストラクタから呼び出します。\r
+        * この関数は、インスタンスを初期化します。\r
+        * 継承クラスのコンストラクタから呼び出します。\r
+        * {@link #initInstance(int, Class, Object)}との違いは、オブジェクトの生成に引数を渡すかどうかです。\r
+        * 引数が必要な時は、こちらの関数を使って、{@link #createElement()}をオーバライドします。\r
         * @param i_length\r
+        * 配列の最大長さ\r
         * @param i_element_type\r
+        * 配列型を示すクラスタイプ\r
         * @throws NyARException\r
         */\r
        @SuppressWarnings("unchecked")\r
@@ -85,7 +109,19 @@ public class NyARManagedObjectPool<T extends NyARManagedObject>
                }\r
                return;         \r
        }\r
-\r
+       /**\r
+        * この関数は、インスタンスを初期化します。\r
+        * 継承クラスのコンストラクタから呼び出します。\r
+        * {@link #initInstance(int, Class)}との違いは、オブジェクトの生成に引数を渡すかどうかです。\r
+        * 引数が必要な時は、こちらの関数を使って、{@link #createElement(Object)}をオーバライドします。\r
+        * @param i_length\r
+        * 配列の最大長さ\r
+        * @param i_element_type\r
+        * 配列型を示すクラスタイプ\r
+        * @param i_param\r
+        * 配列要素を生成するときに渡すパラメータ\r
+        * @throws NyARException\r
+        */\r
        @SuppressWarnings("unchecked")\r
        protected void initInstance(int i_length,Class<T> i_element_type,Object i_param) throws NyARException\r
        {\r
@@ -103,14 +139,25 @@ public class NyARManagedObjectPool<T extends NyARManagedObject>
                return;         \r
        }\r
        /**\r
-        * オブジェクトを作成します。継承クラス内で、型Tのオブジェクトを作成して下さい。\r
+        * この関数は、配列要素のオブジェクトを1個作ります。\r
+        * {@link #initInstance(int, Class)}から呼び出されます。\r
+        * 継承クラスでオーバライドして、要素オブジェクトを1個生成して返す処理を実装してください。\r
         * @return\r
+        * 新しいオブジェクトを返してください。\r
         * @throws NyARException\r
         */\r
        protected T createElement() throws NyARException\r
        {\r
                throw new NyARException();\r
        }\r
+       /**\r
+        * この関数は、配列要素のオブジェクトを(引数付きで)1個作ります。\r
+        * {@link #initInstance(int, Class, Object)}から呼び出されます。\r
+        * 継承クラスでオーバライドして、要素オブジェクトを1個生成して返す処理を実装してください。\r
+        * @return\r
+        * 新しいオブジェクトを返してください。\r
+        * @throws NyARException\r
+        */     \r
        protected T createElement(Object i_param) throws NyARException\r
        {\r
                throw new NyARException();\r