パッケージ com.lmt.lib.bms

クラス BmsInt


  • public class BmsInt
    extends Object
    BMS向けの整数値処理を定義したクラスです。

    BMSでは一般的な10進数の数値に加えて、2文字1セットの16進整数値(00~FF)、36進整数値(00~ZZ)、およびそれらを連結した 数値の羅列(配列)を頻繁に用います。当クラスでは、そのような表現の整数値および配列をプログラムで制御しやすい形式との 相互変換を行う機能を提供します。

    提供する機能は以下の通りです。

    • 1個の整数値を16進または36進の文字列に変換する
    • 1個の16進または36進の文字列を整数値に変換する
    • 整数値の配列を16進または36進の文字列に変換する
    • 複数の16進または36進の文字列を整数値の配列に変換する
    • コンストラクタの概要

      コンストラクタ 
      コンストラクタ 説明
      BmsInt()  
    • メソッドの概要

      すべてのメソッド staticメソッド concreteメソッド 
      修飾子とタイプ メソッド 説明
      static Integer box​(int n)
      指定された値型の整数値をBOX化した整数値オブジェクトをキャッシュから取得します。
      static long[] cacheSnapshotResult()
      整数値キャッシュヒットの統計情報集計結果スナップショットを取得します。
      static void cacheStatistics​(boolean diag)
      整数値キャッシュヒットの統計有無を設定します。
      static int to16i​(String s)
      16進文字列を整数値に変換します。
      static int[] to16ia​(String s, int offset, int count)
      16進文字の羅列文字列を整数値配列に変換します。
      static String to16s​(int n)
      整数値を2文字の16進文字列に変換します。
      static String to16sa​(int[] a, int offset, int count)
      整数値配列を16進文字を羅列した文字列に変換します。
      static int to36i​(String s)
      36進文字列を整数値に変換します。
      static int[] to36ia​(String s, int offset, int count)
      36進文字の羅列文字列を整数値配列に変換します。
      static String to36s​(int n)
      整数値を2文字の36進文字列に変換します。
      static String to36sa​(int[] a, int offset, int count)
      整数値配列を36進文字を羅列した文字列に変換します。
    • コンストラクタの詳細

      • BmsInt

        public BmsInt()
    • メソッドの詳細

      • cacheStatistics

        public static void cacheStatistics​(boolean diag)
        整数値キャッシュヒットの統計有無を設定します。

        当メソッドを呼び出して統計有無を設定すると、呼び出し前の統計有無設定の内容に関わらず統計情報はリセットされ、 全てのカウンタが0になります。

        引数にtrueを指定すると統計が有効になり、box(int)が実行される度にキャッシュヒットの統計情報が 更新されるようになります。この更新処理はスレッドセーフになっている関係上、統計を有効にすると整数値キャッシュの 取得処理(box(int))のパフォーマンスが低下します。そのため統計機能は基本的にはデバッグ用であると 認識してください。

        引数にfalseを指定すると統計が無効になり、統計情報がリセットされた後は統計情報の更新は行われません。

        パラメータ:
        diag - 統計有無
      • cacheSnapshotResult

        public static long[] cacheSnapshotResult()
        整数値キャッシュヒットの統計情報集計結果スナップショットを取得します。

        当メソッドはbox(int)による整数値キャッシュの要求内容から生成した統計情報集計結果のスナップショットを取り、 それらの値を配列にして返します。返された配列は以下のような構成になっています。

        • [0] 整数値要求回数(box(int)が呼ばれた回数)
        • [1] 整数値キャッシュヒット回数
        • [2] 通常インデックス用キャッシュ(上位16ビットが全て0の整数値)要求回数
        • [3] 通常インデックス用キャッシュヒット回数
        • [4] CHX用キャッシュ(上位16ビットのいずれかが1の整数値)要求回数
        • [5] CHX用キャッシュヒット回数

        整数値キャッシュの統計が無効になっている場合、上記配列の各要素は全て0を示します。

        戻り値:
        整数値キャッシュヒットの統計情報集計結果スナップショット
      • box

        public static Integer box​(int n)
        指定された値型の整数値をBOX化した整数値オブジェクトをキャッシュから取得します。

        Javaでは標準で-127~127のIntegerがキャッシュされていますが、BMSではそれよりも大きい値を扱うことがほとんどであり 標準のキャッシュが利用できない場合が大半を占めます。そのままではJavaヒープの確保・解放が頻繁に実行されることとなり パフォーマンスに影響が出ることが懸念されるため、BMSライブラリでは独自の整数値キャッシュを保持しています。

        索引付きメタ情報やBMS仕様のチャンネルはそれぞれ0~1295までの値を扱うことが多いことから、それらをキャッシュし 保持しています。また、CHX値は上位16ビットがチャンネル番号、下位16ビットがチャンネルインデックスとなっていますが、 頻出するCHX値もキャッシュし保持しています。

        当メソッドで整数値をBOX化しようとする時、上記に示したキャッシュを最初に参照しその整数値オブジェクトを 返そうとします。キャッシュにない整数値はInteger.valueOf(int)に処理を委譲します。

        当メソッドはどのような値を指定してもnullを返したり例外をスローすることはありません。

        パラメータ:
        n - BOX化対象の値型整数値
        戻り値:
        BOX化された整数値オブジェクト
      • to16s

        public static String to16s​(int n)
        整数値を2文字の16進文字列に変換します。
        パラメータ:
        n - 整数値
        戻り値:
        2文字の16進文字列
        例外:
        IllegalArgumentException - nが0未満または255超過
      • to36s

        public static String to36s​(int n)
        整数値を2文字の36進文字列に変換します。
        パラメータ:
        n - 整数値
        戻り値:
        2文字の36進文字列
        例外:
        IllegalArgumentException - nが0未満または1295超過