クラス BmsInt
- Object
-
- BmsInt
-
public abstract class BmsInt extends Object
BMS向けの整数値処理を定義したクラスです。BMSでは一般的な10進数の数値に加えて、2文字1セットの16進整数値(00~FF)、36進整数値(00~ZZ)、62進整数値(00~zz)、 およびそれらを連結した数値の羅列(配列)を頻繁に用います。 当クラスでは、そのような表現の整数値および配列をプログラムで制御しやすい形式との相互変換を行う機能を提供します。
提供する機能は以下の通りです。
- 1個の整数値を16進、36進、62進の文字列に変換する
- 1個の16進、36進、62進の文字列を整数値に変換する
- 整数値の配列を16進、36進、62進の文字列に変換する
- 複数の16進、36進、62進の文字列を整数値の配列に変換する
-
-
コンストラクタの概要
コンストラクタ コンストラクタ 説明 BmsInt()
-
メソッドの概要
すべてのメソッド staticメソッド インスタンス・メソッド abstractメソッド concreteメソッド 修飾子とタイプ メソッド 説明 abstract int
base()
この整数オブジェクトの基数を取得します。static BmsInt
base16()
16進数の整数オブジェクトを取得します。static BmsInt
base36()
36進数の整数オブジェクトを取得します。static BmsInt
base62()
62進数の整数オブジェクトを取得します。static Integer
box(int n)
指定された値型の整数値をBOX化した整数値オブジェクトをキャッシュから取得します。static long[]
cacheSnapshotResult()
整数値キャッシュヒットの統計情報集計結果スナップショットを取得します。static void
cacheStatistics(boolean diag)
整数値キャッシュヒットの統計有無を設定します。abstract int
max()
この整数オブジェクトが扱う1個の整数の最大値を取得します。static BmsInt
of(int base)
指定された基数の整数オブジェクトを取得します。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進文字を羅列した文字列に変換します。static int
to62i(String s)
62進文字列を整数値に変換します。static int[]
to62ia(String s, int offset, int count)
62進文字の羅列文字列を整数値配列に変換します。static String
to62s(int n)
整数値を2文字の62進文字列に変換します。static String
to62sa(int[] a, int offset, int count)
整数値配列を62進文字を羅列した文字列に変換します。abstract int
toi(String s)
基数に対応した2文字の数値文字列を整数値に変換します。abstract int[]
toia(String s, int offset, int count)
基数に対応した数値文字列の羅列を整数値配列に変換します。abstract String
tos(int n)
整数値を基数に対応した2文字の数値文字列に変換します。abstract String
tosa(int[] a, int offset, int count)
整数値配列を、基数に対応した数値文字列の羅列に変換します。
-
-
-
メソッドの詳細
-
base
public abstract int base()
この整数オブジェクトの基数を取得します。- 戻り値:
- 整数オブジェクトの基数(16, 36, 62 のいずれか)
-
max
public abstract int max()
この整数オブジェクトが扱う1個の整数の最大値を取得します。最大値は基数によって異なります。最小値はどの基数でも常に0です。
- 戻り値:
- 整数オブジェクトが扱う1個の整数の最大値
-
tos
public abstract String tos(int n)
整数値を基数に対応した2文字の数値文字列に変換します。当メソッドでは基数に応じて
to16s(int)
,to36s(int)
,to62s(int)
を呼び分けます。- パラメータ:
n
- 変換対象の整数値- 戻り値:
- 基数に対応した2文字の数値文字列
- 例外:
IllegalArgumentException
- nが0未満またはmax()
超過- 関連項目:
to16s(int)
,to36s(int)
,to62s(int)
-
toi
public abstract int toi(String s)
基数に対応した2文字の数値文字列を整数値に変換します。当メソッドでは基数に応じて
to16i(String)
,to36i(String)
,to62i(String)
を呼び分けます。- パラメータ:
s
- 変換対象の文字列- 戻り値:
- 整数値
- 例外:
NullPointerException
- sがnullIllegalArgumentException
- sの長さが2以外IllegalArgumentException
- sに変換不可能な文字がある- 関連項目:
to16i(String)
,to36i(String)
,to62i(String)
-
tosa
public abstract String tosa(int[] a, int offset, int count)
整数値配列を、基数に対応した数値文字列の羅列に変換します。当メソッドは基数に応じて
to16sa(int[], int, int)
,to36sa(int[], int, int)
,to62sa(int[], int, int)
を呼び分けます。- パラメータ:
a
- 整数値配列offset
- 変換開始位置count
- 変換数- 戻り値:
- 基数に対応した数値文字列を羅列した文字列
- 例外:
NullPointerException
- aがnullIllegalArgumentException
- offsetが0未満IllegalArgumentException
- countが0未満IndexOutOfBoundsException
- aの範囲外にアクセスしたIllegalArgumentException
- a内の変換対象に0未満またはmax()
超過の値がある- 関連項目:
to16sa(int[], int, int)
,to36sa(int[], int, int)
,to62sa(int[], int, int)
-
toia
public abstract int[] toia(String s, int offset, int count)
基数に対応した数値文字列の羅列を整数値配列に変換します。当メソッドは基数に応じて
to16ia(String, int, int)
,to36ia(String, int, int)
,to62ia(String, int, int)
を呼び分けます。- パラメータ:
s
- 基数に対応した数値文字列の羅列offset
- 変換開始位置count
- 変換個数(2文字1個セットの個数)- 戻り値:
- 整数値配列
- 例外:
NullPointerException
- sがnullIllegalArgumentException
- offsetが0未満IllegalArgumentException
- countが0未満IndexOutOfBoundsException
- sの範囲外にアクセスしたIllegalArgumentException
- sに変換不可能な文字がある- 関連項目:
to16ia(String, int, int)
,to36ia(String, int, int)
,to62ia(String, int, int)
-
base16
public static BmsInt base16()
16進数の整数オブジェクトを取得します。- 戻り値:
- 16進数の整数オブジェクト
-
base36
public static BmsInt base36()
36進数の整数オブジェクトを取得します。- 戻り値:
- 36進数の整数オブジェクト
-
base62
public static BmsInt base62()
62進数の整数オブジェクトを取得します。- 戻り値:
- 62進数の整数オブジェクト
-
of
public static BmsInt of(int base)
指定された基数の整数オブジェクトを取得します。サポートしている基数は16, 36, 62のいずれかです。
- パラメータ:
base
- 基数- 戻り値:
- 基数に該当する整数オブジェクト
- 例外:
IllegalArgumentException
- baseが16, 36, 62以外
-
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超過
-
to62s
public static String to62s(int n)
整数値を2文字の62進文字列に変換します。- パラメータ:
n
- 整数値- 戻り値:
- 2文字の62進文字列
- 例外:
IllegalArgumentException
- nが0未満または3843超過
-
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に変換不可能な文字がある
-
to62i
public static int to62i(String s)
62進文字列を整数値に変換します。- パラメータ:
s
- 62進文字列- 戻り値:
- 整数値
- 例外:
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未満または1295超過の値がある
-
to62sa
public static String to62sa(int[] a, int offset, int count)
整数値配列を62進文字を羅列した文字列に変換します。- パラメータ:
a
- 整数値配列offset
- 変換開始位置count
- 変換数- 戻り値:
- 62進文字を羅列した文字列
- 例外:
NullPointerException
- aがnullIllegalArgumentException
- offsetが0未満IllegalArgumentException
- countが0未満IndexOutOfBoundsException
- aの範囲外にアクセスしたIllegalArgumentException
- a内の変換対象に0未満または3843超過の値がある
-
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に変換不可能な文字がある
-
to62ia
public static int[] to62ia(String s, int offset, int count)
62進文字の羅列文字列を整数値配列に変換します。- パラメータ:
s
- 62進文字の羅列文字列offset
- 変換開始位置count
- 変換個数(2文字1個セットの個数)- 戻り値:
- 整数値配列
- 例外:
NullPointerException
- sがnullIllegalArgumentException
- offsetが0未満IllegalArgumentException
- countが0未満IndexOutOfBoundsException
- sの範囲外にアクセスしたIllegalArgumentException
- sに変換不可能な文字がある
-
-