クラス BmsObjectFinder<IT,OT,CT>
- Object
-
- BmsObjectFinder<IT,OT,CT>
-
- 型パラメータ:
IT- Input Type: 入力データの型OT- Output Type: 出力データの型CT- Candidate Type: 候補データの型
- 直系の既知のサブクラス:
BmsMaterialFileFinder
public abstract class BmsObjectFinder<IT,OT,CT> extends Object
BMSにおけるオブジェクト(主に楽曲データの素材ファイル)の最も一般的な検索アルゴリズムを提供するクラスです。BMSでは一般的に、楽曲を構成する素材データファイルは索引付きメタ情報に記述されます。 本来はそのメタ情報に記述した通りの名前でファイルが格納されているべきですが、異なる拡張子・異なるファイル形式の 素材データファイルとして格納されているケースが散見され、アプリケーションはそのケースに対応した機能を提供しなければなりません。 その機能は煩雑かつ複雑であり、アプリケーションの実装・テストのコストを高騰させる要因になりがちです。
当クラスは上記に係る検索アルゴリズムを抽象化し、各アプリケーションでのオブジェクト検索の実装を簡略化します。 通常、楽曲を構成するオブジェクトはメタ情報の定義と拡張子・ファイル形式が異なっていても、BMSコンテンツごとに見ると その形式が統一されている場合がほとんどです。この特性を利用し、一度特定された形式を記憶しておけばオブジェクト検索の ヒットミスを最小化でき、BMS関連アプリケーション実装の簡略化・高速化を見込めます。
オブジェクト検索の結果は統計情報として記録されており、各統計情報を参照すれば検索アルゴリズムの妥当性を検証できます。 オブジェクト検索のパフォーマンスが問題になる場合はこの情報を活用して検索アルゴリズム・候補データをチューニングしてください。
- 導入されたバージョン:
- 0.11.0
-
-
コンストラクタの概要
コンストラクタ 修飾子 コンストラクタ 説明 protectedBmsObjectFinder(List<CT> candidates)新しいオブジェクト検索クラスインスタンスを生成します。
-
メソッドの概要
すべてのメソッド インスタンス・メソッド abstractメソッド concreteメソッド 修飾子とタイプ メソッド 説明 protected abstract OTdoFind(IT input, CT candidate)指定された候補データによる実際のオブジェクト検索処理の実装です。Optional<OT>find(IT input)入力データに該当するオブジェクトの検索を実行します。intgetCandidateCount()候補データの数を取得します。longgetFoundCount()オブジェクトが見つかった回数を取得します。longgetHitCount()前回見つかったオブジェクトの候補と同じ候補でオブジェクトが見つかった回数を取得します。CTgetLastCandidate()最後にオブジェクトが見つかった時の候補データを取得します。longgetQueryCount()オブジェクト検索を行った回数を取得します。longgetWrongCount()前回見つかったオブジェクトの候補とは異なる候補でオブジェクトが見つかった回数を取得します。voidreset()このオブジェクトの状態をリセットします。
-
-
-
コンストラクタの詳細
-
BmsObjectFinder
protected BmsObjectFinder(List<CT> candidates)
新しいオブジェクト検索クラスインスタンスを生成します。候補データは必ず1つ以上指定しなければなりません。
- パラメータ:
candidates- 候補データリスト- 例外:
NullPointerException- candidatesがnullIllegalArgumentException- candidatesが0件
-
-
メソッドの詳細
-
getCandidateCount
public int getCandidateCount()
候補データの数を取得します。- 戻り値:
- 候補データの数
-
getLastCandidate
public CT getLastCandidate()
最後にオブジェクトが見つかった時の候補データを取得します。まだ一度もオブジェクトが見つかっていない場合、nullを返します。
- 戻り値:
- 最後にオブジェクトが見つかった時の候補データ
-
getQueryCount
public long getQueryCount()
オブジェクト検索を行った回数を取得します。- 戻り値:
- オブジェクト検索を行った回数
-
getFoundCount
public long getFoundCount()
オブジェクトが見つかった回数を取得します。- 戻り値:
- オブジェクトが見つかった回数
-
getHitCount
public long getHitCount()
前回見つかったオブジェクトの候補と同じ候補でオブジェクトが見つかった回数を取得します。- 戻り値:
- 前回見つかったオブジェクトの候補と同じ候補でオブジェクトが見つかった回数
-
getWrongCount
public long getWrongCount()
前回見つかったオブジェクトの候補とは異なる候補でオブジェクトが見つかった回数を取得します。- 戻り値:
- 前回見つかったオブジェクトの候補とは異なる候補でオブジェクトが見つかった回数
-
reset
public void reset()
このオブジェクトの状態をリセットします。当メソッドが実行されると一度も候補が見つかっていない状態となり、全ての統計データが初期化されます。
-
find
public Optional<OT> find(IT input)
入力データに該当するオブジェクトの検索を実行します。当メソッドは、最初に前回の検索で使用した候補データでの検索を試みます。この検索で該当オブジェクトが 見つからなかった場合のみ他候補データでの検索を実行し、最初に見つかったオブジェクトの出力データを返します。
オブジェクト検索の結果は統計データとして記録されます。統計データは
reset()を実行しない限り その情報のカウンタ値が増加し続けますので、必要なタイミングでリセットするようにしてください。 また、検索処理中に実行時例外がスローされた場合はいずれの統計データも更新されません。オブジェクトが見つかると、そのオブジェクトを表すデータ(例:ファイルパス)が返されます。 見つからなかった場合は空オブジェクト(Optional#isEmptyがtrueを返す)が返されます。 戻り値がnullになることはありません。
- パラメータ:
input- オブジェクトを表すデータ(例:ファイルパス)- 戻り値:
- オブジェクト検索結果
- 例外:
NullPointerException- inputがnull
-
doFind
protected abstract OT doFind(IT input, CT candidate)
指定された候補データによる実際のオブジェクト検索処理の実装です。入力データに対して候補データを適用し、検索処理を実行してください。該当するオブジェクトが存在する場合は そのオブジェクトを表す出力データを返し、存在しない場合はnullを返してください。
当メソッド内でスローされた実行時例外は全て
find(Object)の呼び出し元へそのままスローされます。 オブジェクト検索処理内でスローされ得る例外は当メソッド内でキャッチし、適切な処理を行うようにしてください。- パラメータ:
input- 入力データcandidate- 候補データ- 戻り値:
- inputに該当するオブジェクトが存在すれば、それに該当する出力データ。存在しなければnull。
-
-