SUDA.LIBマニュアル
SUDA.LIBはD言語用の汎用ライブラリであり、
いくつかの関数・クラスなどから構成されている。
DMD(Digital Mars D Compiler)の最新版でコンパイルが可能である。
多くは機種依存しないようにしているものの、
一部でWindows専用の実装となっている。
本ライブラリのライセンスはGPL(GNU General Public License)である。
つまり本プログラムはフリーソフトウェアであり、GPLの定める条件の下で利用、再頒布又は改変することができるが、全くの無保証である。
ただし複製、頒布に当たっては、
ソースコードを添付するか、容易に得られるよう措置しなければならない。
(注意: GPLというのは SUDA.LIB のプログラム本体についての言明である。
本ドキュメントはGPLではなく、あくまでも転載や改変を禁じられている。)
なお suda.random は松本眞、西村拓士(敬称略)によるC言語
プログラムを、須田がD言語用に移植したものである。
よって suda.random (random.d) はオリジナルのライセンスに従い、
修正BSDライセンスが適用される。
修正BSDライセンスはGPLと矛盾しないので、
全体でGPLとして用いても差し支えない。
詳細は random.d 冒頭の通りであるが、
改変、商用利用にも自由に使用できる。
使い方
見たまま。
必要なファイルを import し、suda.lib か suda_d.lib をリンクすれば良い。
なお、
- suda.lib — リリース・ビルド用
- suda_d.lib — デバッグ・ビルド用
である。
詳細は Makefile 参照。
リファレンス
- suda.all
- SUDA.LIB の全てのモジュール(suda.*)を import するダミー・モジュール
- suda.httpclient
- ウェブページを読み出す簡易HTTPクライアント
- suda.jcode
- 日本語処理のための関数群。SHIFT-JIS や EUC-JP を UTF-8 に変換する。
また ctype の日本語版。
- suda.random
- メルセンヌ・ツイスタ疑似乱数生成
- suda.smf
- SMF(Standard MIDI Files)を作成する
- suda.std
- 汎用的に使えるユーティリティ関数やクラス
- suda.ver
- ライブラリのバージョン
suda.all
SUDA.LIB の全てのモジュール(suda.*)を import するダミー・モジュール
suda.httpclient
- void getHttpData(char[] url, out char[] head, out ubyte[] data)
-
HTTP/1.1のGETリクエストにより url で指定されたページを読み出し、
ヘッダを head に実データ部分を data に格納する
- char[] getHttpText(char[] url, Charset charset = Charset.UTF_8)
-
getHttpData のテキスト版。対象データはテキスト・データでなければならない。
Content-Type で文字コードが指定されていればそれに従い、
指定されていなければ charset であると仮定される。
EUC-JP や SHIFT-JIS ならば UTF-8 文字列に変換され、結果を返す。
suda.jcode
- wchar[] sjis_to_utf16(char[] s)
- SHIFT-JIS を UTF-16 に変換
- char[] sjis_to_utf8(char[] s)
- SHIFT-JIS を UTF-8 に変換
- wchar[] euc_to_utf16(char[] s)
- EUC-JP を UTF-16 に変換
- char[] euc_to_utf8(char[] s)
- EUC-JP を UTF-8 に変換
- char[] euc_to_sjis(char[] s)
- EUC-JP を SHIFT-JIS に変換
- int isZenkaku(dchar c)
- 全角文字なら 非0 を返す
- int isKanji(dchar c)
- int isUnihan(dchar c)
- 漢字なら 非0 を返す
- int isKana(dchar c)
- かな文字なら 非0 を返す、
isHiragana(c) || isKatakana(c) || isKatakanaPhoneticExt(c) || isHalfwidthKatakana(c) と同じ
- int isHiragana(dchar c)
- ひらがななら 非0 を返す
- int isKatakana(dchar c)
- カタカナなら 非0 を返す
- int isKatakanaPhoneticExt(dchar c)
- アイヌ語用の拡張カタカナなら 非0 を返す
- int isHalfwidthKatakana(dchar c)
- 半角カタカナなら 非0 を返す
- int isHalfwidthAndFullwidthForms(dchar c)
- '\U0000FF00' <= c && c <= '\U0000FFEF' に同じ、
全角アルファベットを含む
suda.random
メルセンヌ・ツイスタ(Mersenne Twister; 以下MT)により疑似乱数を生成する。MTは
松本眞、西村拓士により開発された疑似乱数生成アルゴリズムで、
従来にない長周期と高次元均等分布を特徴としている。詳細は
Mersenne Twister Home Page を参照。
本モジュールは修正BSDライセンスが適用され、
改変可能、商用利用にも自由に使用できる。
class Random はMTによって乱数を生成するクラスである。
- this()
- デフォルト値により乱数系列を生成する
- this(uint s)
- s を seed として乱数系列を生成する
- this(uint[] key)
- key[] を seed として乱数系列を生成する
- void seed(uint s)
- s により乱数系列を初期化する
- void seed(uint[] key)
- key[] により乱数系列を初期化する
- uint next()
- 0以上 int.max (= 0xFFFFFFFF)以下の乱数を生成する
- uint next(uint less)
- 0以上 less 未満の乱数を生成する。
例えば next(6) とした場合、結果は 0, 1, 2, 3, 4, 5 のいずれかの値を取る。
- uint nextInt31()
- 0以上0x7FFFFFFF以下の乱数を生成する
- double nextDouble()
- 0以上1以下の一様実乱数を生成する(32ビット精度)
- double nextDouble2()
- 0以上1未満の一様実乱数を生成する(32ビット精度)
- double nextDouble3()
- 0より大きく1より小さいの一様実乱数を生成する(32ビット精度)
- double nextDouble53()
- 0以上1未満の一様実乱数を生成する(53ビット精度)
またモジュール内で public Random random が宣言されており、
静的コンストラクタが自動的にデフォルト値による乱数系列を生成する。
suda.smf
SMF(Standard MIDI Files)を生成する為のクラス・セット。
SMFの構造についてはわいやぎさんの SMF の構造 辺りを参照すべし。クラス構造は下記の通り。
- MidiData
- MidiSimpleData
- MidiEvent
- MidiNoteOff
- MidiNoteOn
- MidiPolyphonicKeyPressure
- MidiControlChange
- MidiProgramChange
- MidiChannelPressure
- MidiPitchBend
- MidiSysEx
- MidiSysExVerbatim
- MidiMetaEvent
- MidiSequenceNumber (reserved)
- MidiText
- MidiCopyright
- MidiSequenceName
- MidiInstrumentName
- MidiLyric
- MidiMarker
- MidiQuePoint
- MidiProgramName
- MidiDeviceName
- MidiChannelPrefix
- MidiPort
- MidiEndOfTrack
- MidiTempo
- MidiSmpteOffset (reserved)
- MidiTimeSignature
- MidiKeySignature (reserved)
- MidiSequencerSpecific (reserved)
- MidiComplexData
- MidiDataChain
- MidiFile
例えばドレミファソラシドを演奏する test.mid を生成するプログラム:
import std.file;
import suda.smf;
int main()
{
MidiTrack conductor = new MidiTrack;
MidiTrack track = new MidiTrack;
conductor.add(0, new MidiTempo(60)); // BPM=60
track.add(48 * 0, note(60)); // do
track.add(48 * 1, note(62)); // re
track.add(48 * 2, note(64)); // mi
track.add(48 * 3, note(65)); // fa
track.add(48 * 4, note(67)); // sol
track.add(48 * 5, note(69)); // la
track.add(48 * 6, note(71)); // si
track.add(48 * 7, note(72)); // do
MidiTrack[2] tracks;
tracks[0] = conductor;
tracks[1] = track;
MidiFile smf = new MidiFile(tracks);
write("test.mid", smf.serialize());
return 0;
}
MidiDataChain note(int note_number)
{
MidiDataChain n = new MidiDataChain;
n.add(0, new MidiNoteOn(0, note_number, 100)); // note on
n.add(40, new MidiNoteOn(0, note_number, 0)); // note off
return n;
}
suda.std
class Stack(T) はスタック構造を実現するクラス・テンプレート。
文字を一文字ずつ集積して文字列にするなど、toArray メソッドで集積の用もこなす。
- bool empty()
- スタックが空なら真
- T pop()
- スタックから取り出す、空なら EmptyStackException が throw される
- T peek()
- スタックには残したままスタックの先頭を見る、
空なら EmptyStackException が throw される
- T push(T d)
- スタックに積み上げる
- T[] push(T[] a)
- スタックに a[] の全ての要素を積み上げる
- T[] toArray()
- スタックに積み上げられた全ての要素を配列として返す、
戻り値は内部データへの参照なので、
以後もスタックとして利用する場合は dup すること
- void clear()
- スタックを空にする
- int length()
- スタックに積み上がっているデータの長さ
- T opIndex(int index)
- スタックの index の要素
- T opIndexAssign(T d, int index)
- スタックの index の要素を変更する
class Queue(T) は待ち行列の構造、
つまり一般的な FIFO バッファを実現するクラス・テンプレート。
- bool empty()
- キューが空なら真
- T poll()
- キューから取り出す、空なら EmptyQueueException が throw される
- T peek()
- キューに残したまま次の要素を見る、
空なら EmptyQueueException が throw される
- T offer(T d)
- キューに追加する
- T[] offer(T[] a)
- キューに a[] の全ての要素を追加する
- void clear()
- キューを空にする
suda.ver
- uint SUDA_VERSION_MAJOR
- uint SUDA_VERSION_MINOR
- ライブラリのバージョン
- char[] SUDA_VERSION_STRING
- バージョンの "1.1" のような文字列表現
制作・著作/須田佳典
2005/07/24初出
無断転載を禁じます。リンクはご自由にどうぞ。
Copyright © 2005 Yoshinori SUDA. All rights reserved.