\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
}\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\8bTã\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
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
}\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
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