クラス BmsInt
- Object
-
- 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進文字を羅列した文字列に変換します。
-
-
-
メソッドの詳細
-
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を示します。
- 戻り値:
- 整数値キャッシュヒットの統計情報集計結果スナップショット
- [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超過
-
to16i
public static int to16i(String s)
16進文字列を整数値に変換します。- パラメータ:
s
- 16進文字列- 戻り値:
- 整数値
- 例外:
NullPointerException
- sがnullIllegalArgumentException
- sの長さが2以外IllegalArgumentException
- sに変換不可能な文字がある
-
to36i
public static int to36i(String s)
36進文字列を整数値に変換します。- パラメータ:
s
- 36進文字列- 戻り値:
- 整数値
- 例外:
NullPointerException
- sがnullIllegalArgumentException
- sの長さが2以外IllegalArgumentException
- sに変換不可能な文字がある
-
to16sa
public static String to16sa(int[] a, int offset, int count)
整数値配列を16進文字を羅列した文字列に変換します。- パラメータ:
a
- 整数値配列offset
- 変換開始位置count
- 変換数- 戻り値:
- 16進文字を羅列した文字列
- 例外:
NullPointerException
- aがnullIllegalArgumentException
- offsetが0未満IllegalArgumentException
- countが0未満IndexOutOfBoundsException
- aの範囲外にアクセスしたIllegalArgumentException
- a内の変換対象に0未満または255超過の値がある
-
to36sa
public static String to36sa(int[] a, int offset, int count)
整数値配列を36進文字を羅列した文字列に変換します。- パラメータ:
a
- 整数値配列offset
- 変換開始位置count
- 変換数- 戻り値:
- 36進文字を羅列した文字列
- 例外:
NullPointerException
- aがnullIllegalArgumentException
- offsetが0未満IllegalArgumentException
- countが0未満IndexOutOfBoundsException
- aの範囲外にアクセスしたIllegalArgumentException
- a内の変換対象に0未満または255超過の値がある
-
to16ia
public static int[] to16ia(String s, int offset, int count)
16進文字の羅列文字列を整数値配列に変換します。- パラメータ:
s
- 16進文字の羅列文字列offset
- 変換開始位置count
- 変換個数(2文字1個セットの個数)- 戻り値:
- 整数値配列
- 例外:
NullPointerException
- sがnullIllegalArgumentException
- offsetが0未満IllegalArgumentException
- countが0未満IndexOutOfBoundsException
- sの範囲外にアクセスしたIllegalArgumentException
- sに変換不可能な文字がある
-
to36ia
public static int[] to36ia(String s, int offset, int count)
36進文字の羅列文字列を整数値配列に変換します。- パラメータ:
s
- 36進文字の羅列文字列offset
- 変換開始位置count
- 変換個数(2文字1個セットの個数)- 戻り値:
- 整数値配列
- 例外:
NullPointerException
- sがnullIllegalArgumentException
- offsetが0未満IllegalArgumentException
- countが0未満IndexOutOfBoundsException
- sの範囲外にアクセスしたIllegalArgumentException
- sに変換不可能な文字がある
-
-