創作田園地帯

SUDA.LIBマニュアル

SUDA.LIBはD言語用の汎用ライブラリであり、 いくつかの関数・クラスなどから構成されている。

DMD(Digital Mars D Compiler)の 1.0 系列でコンパイルが可能である。 多くは機種依存しないようにしているものの、 一部で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 をリンクすれば良い。 なお、

である。 詳細は 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.stdio
標準入出力関数
suda.string
文字列処理に関する関数群
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 の構造 辺りを参照すべし。クラス構造は下記の通り。

例えばドレミファソラシドを演奏する 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()
キューを空にする

class Reader(T) は一要素ずつ読み取るクラス・テンプレート。 this(T[]) で指定された配列をそのまま使用する。

bool empty()
全て読み取っていれば真
T poll(T d)
一要素だけ読み取る、 既に終端に達していれば EmptyReaderException が throw される
T peek()
次に読み取るべき一要素を見る、 空なら EmptyReaderException が throw される
void clear()
読み取りを終える
int length()
残りの要素数

suda.stdio

標準入出力関数。std.c.stdio も public に import します。

void write(char c)
stdout に文字 c を出力する。エラーが発生すると StdioException が throw される
void write(FILE* fp, char c)
ストリーム fp に文字 c を出力する。エラーが発生すると StdioException が throw される
void write(char[] str)
stdout に文字列 str を出力する。エラーが発生すると StdioException が throw される
void write(FILE* fp, char[] str)
ストリーム fp に文字列 str を出力する。エラーが発生すると StdioException が throw される
void writeLine(char[] str)
void write(char[] str) と同様だが、最後に改行 '\n' を出力する
void writeLine(FILE* fp, char[] str)
void write(FILE* fp, char[] str) と同様だが、最後に改行 '\n' を出力する
int read(out char c)
stdin から一文字を読み込んで c に格納する。通常は 1 を返し、ファイル終端やエラー発生時は 0 を返す
int read(FILE* fp, out char c)
ストリーム fp から一文字を読み込んで c に格納する。通常は 1 を返し、ファイル終端やエラー発生時は 0 を返す
int readLine(ref char[] buf)
stdin から一行を読み込んで buf に格納する。buf に '\n' は含まれない。ファイル終端やエラー発生時は 0 を返し、そうでなければ読み込まれた文字数を返す
int readLine(FILE* fp, ref char[] buf)
ストリーム fp から一行を読み込んで buf に格納する。buf に '\n' は含まれない。ファイル終端やエラー発生時は 0 を返し、そうでなければ読み込まれた文字数を返す

suda.string

char[][] csv(char[] from)
文字列 from をコンマ ',' で分割し、文字列の配列に変換する。なお、二重引用符の間(" から " まで)は一つの項目と見なす
int csv(char[] from, ref char[][] to)
char[][] csv(char[] from) と同様の処理をし、結果を to へ格納する。to のバッファを再利用するため、より高速に動作する可能性がある。変換された項目の数を返す

suda.ver

uint SUDA_VERSION_MAJOR
uint SUDA_VERSION_MINOR
ライブラリのバージョン
char[] SUDA_VERSION_STRING
バージョンの "1.1" のような文字列表現

制作/創作田園地帯  2005/07/24初出
無断転載を禁じます。リンクはご自由にどうぞ。
Copyright © 2005-2009 Yoshinori SUDA. All rights reserved.