std.uuid
カテゴリー | 関数 |
---|---|
Parsing UUIDs | parseUUID UUID UUIDParsingException uuidRegex |
Generating UUIDs | sha1UUID randomUUID md5UUID |
Using UUIDs | UUID.uuidVersion UUID.variant UUID.toString UUID.data UUID.swap UUID.opEquals UUID.opCmp UUID.toHash |
UUID namespaces | dnsNamespace urlNamespace oidNamespace x500Namespace |
ソース std/uuid.d
import std.uuid; UUID[] ids; ids ~= randomUUID(); ids ~= md5UUID("test.name.123"); ids ~= sha1UUID("test.name.123"); foreach (entry; ids) { writeln(entry.variant); // UUID.Variant.rfc4122 } writeln(ids[0].uuidVersion); // UUID.Version.randomNumberBased writeln(ids[1].toString()); // "22390768-cced-325f-8f0f-cfeaa19d0ccd" assert(ids[1].data == [34, 57, 7, 104, 204, 237, 50, 95, 143, 15, 207, 234, 161, 157, 12, 205]); UUID id; assert(id.empty);
- struct
UUID
; - Examples:
UUID id; assert(id.empty); id = randomUUID; assert(!id.empty); id = UUID(cast(ubyte[16]) [138, 179, 6, 14, 44, 186, 79, 35, 183, 76, 181, 45, 179, 189, 251, 70]); writeln(id.toString()); // "8ab3060e-2cba-4f23-b74c-b52db3bdfb46"
- enum
Variant
: int; - RFC 4122は、UUIDの異なる内部データレイアウトを定義している。これらは このモジュールがサポートするUUIDフォーマットである。これらはこのモジュールでサポートされるUUIDフォーマットである。 これらすべてのVariantを読み、比較し、使用することが可能である。 このモジュールによって生成されるUUIDは常にrfc4122フォーマットになる。
注釈: これを std.variant.Variant.
ncs
- NCSの下位互換性
rfc4122
- RFC 4122で定義されている
microsoft
- マイクロソフト社の後方互換性
future
- 将来の使用のために予約されている
- enum
Version
: int; - RFC 4122は異なるUUIDバージョンを定義している。バージョンは 例えば、バージョン4のUUIDは乱数から、バージョン3のUUIDはMD5から生成される。 は乱数から、バージョン3のUUIDは名前のMD5ハッシュから生成される。
注釈: これらのUUIDバージョンはすべて std.uuid しかし、生成できるのはバージョン3、4、5のUUIDだけである。
unknown
- 不明なバージョン
timeBased
- バージョン1
dceSecurity
- バージョン2
nameBasedMD5
- バージョン3(名前ベース+MD5)
randomNumberBased
- バージョン4(ランダム)
nameBasedSHA1
- バージョン5(名前ベース+SHA-1)
- ubyte[16]
data
; - UUIDの16バイトを直接取得したり設定したりすると便利なことがある。 を直接取得したり設定したりすると便利なことがある。
注釈: UUIDはUUIDデータに対して16バイト表現を使用する。 RFC 4122はUUIDをビッグエンディアン形式の特別な構造体として定義している。 形式の特別な構造体として定義している。この16-ubyteは常にRFC 4122で定義されているビッグエンディアン構造と等しい。 RFC 4122で定義されている。
例:
auto rawData = uuid.data; //データを取得する rawData[0] = 1; //修正する uuid.data = rawData; //データを設定する uuid.data[1] = 2; //直接修正する
- pure nothrow @nogc @safe this(ref scope const ubyte[16]
uuidData
);
pure nothrow @nogc @safe this(const ubyte[16]uuidData
); - 16バイト表現のUUIDからUUID構造体を構築する。 からUUID構造体を構築する。Examples:
enum ubyte[16] data = [0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15]; auto uuid = UUID(data); enum ctfe = UUID(data); writeln(uuid.data); // data writeln(ctfe.data); // data
- pure @safe this(T...)(T
uuidData
)
if (uuidData
.length == 16 && allSatisfy!(isIntegral, T)); - UUIDの16バイト表現からUUID構造体を構築する。 からUUID構造体を構築する。可変長コンストラクタにより、よりシンプルな構文が可能になる。 正確に16ubyteを渡す必要がある。Examples:
auto tmp = UUID(0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15); assert(tmp.data == cast(ubyte[16])[0,1,2,3,4,5,6,7,8,9,10,11, 12,13,14,15]);
- this(T)(in T[]
uuid
)
if (isSomeChar!T); - Throws:UUIDParsingException入力が無効な場合
CTFE この関数は CTFE コードでサポートされている。この関数はCTFEコードでサポートされている。 コンパイル時に解析された不正なUUIDによって引き起こされるエラーメッセージは、不可解なものである可能性がある、 しかし、エラーは コンパイル時に検出され報告される。
注釈:これは厳密なパーサーである。 これは厳密なパーサーである。上記のパターンのみを受け付ける。 先頭や末尾の文字はサポートしない。また 16進数に使われる文字しか受け付けない。 ハイフンがなければならない。
より厳密でないパーサーについては parseUUIDExamples:auto id = UUID("8AB3060E-2cba-4f23-b74c-b52db3bdfb46"); assert(id.data == [138, 179, 6, 14, 44, 186, 79, 35, 183, 76, 181, 45, 179, 189, 251, 70]); writeln(id.toString()); // "8ab3060e-2cba-4f23-b74c-b52db3bdfb46" //CTFEでは、例えばUUIDリテラルとしても使用できる: enum ctfeID = UUID("8ab3060e-2cba-4f23-b74c-b52db3bdfb46"); //ここでの解析はコンパイル時に行われ、実行時のオーバーヘッドはない!
- const pure nothrow @nogc @property @trusted bool
empty
(); - UUIDが以下の場合にのみ真を返す。 to {00000000-0000-0000-0000-000000000000}Examples:
UUID id; assert(id.empty); id = UUID("00000000-0000-0000-0000-000000000001"); assert(!id.empty);
- const pure nothrow @nogc @property @safe Variant
variant
(); - RFC 4122はUUIDの異なる内部データレイアウトを定義している。 このUUIDが使用しているフォーマットを返す。
注釈: これを std.variant.Variant. このプロパティの型は`std.uuid.UUID.Variant` である。
See Also:Examples:assert(UUID("8ab3060e-2cba-4f23-b74c-b52db3bdfb46").variant == UUID.Variant.rfc4122);
- const pure nothrow @nogc @property @safe Version
uuidVersion
(); - RFC 4122は異なるUUIDバージョンを定義している。バージョンは 例えば、バージョン4のUUIDは乱数から、バージョン3のUUIDは名前のMD5ハッシュから生成される。 は乱数から、バージョン3のUUIDは名前のMD5ハッシュから生成された。 このUUIDが使用しているバージョンを返す。See Also:Examples:
assert(UUID("8ab3060e-2cba-4f23-b74c-b52db3bdfb46").uuidVersion == UUID.Version.randomNumberBased);
- pure nothrow @nogc @safe void
swap
(ref UUIDrhs
); - このUUIDのデータとrhsのデータを入れ替える。Examples:
immutable ubyte[16] data = [0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15]; UUID u1; UUID u2 = UUID(data); u1.swap(u2); writeln(u1); // UUID(data) writeln(u2); // UUID.init
- const pure nothrow @nogc @safe bool
opEquals
(const UUIDs
);
const pure nothrow @nogc @safe boolopEquals
(ref scope const UUIDs
);
const pure nothrow @nogc @safe intopCmp
(const UUIDs
);
const pure nothrow @nogc @safe intopCmp
(ref scope const UUIDs
);
pure nothrow @nogc @safe UUIDopAssign
(const UUIDs
);
pure nothrow @nogc @safe UUIDopAssign
(ref scope const UUIDs
);
const pure nothrow @nogc @safe size_ttoHash
(); - 標準的な数値演算子はすべて に対して定義されている。Examples:
// UUIDを比較する writeln(UUID("00000000-0000-0000-0000-000000000000")); // UUID.init //連想配列のUUID: int[UUID] test = [UUID("8a94f585-d180-44f7-8929-6fca0189c7d0") : 1, UUID("7c351fd4-b860-4ee3-bbdc-7f79f3dfb00a") : 2, UUID("9ac0a4e5-10ee-493a-86fc-d29eeb82ecc1") : 3]; writeln(test[UUID("9ac0a4e5-10ee-493a-86fc-d29eeb82ecc1")]); // 3 //UUIDはソートできる: import std.algorithm; UUID[] ids = [UUID("8a94f585-d180-44f7-8929-6fca0189c7d0"), UUID("7c351fd4-b860-4ee3-bbdc-7f79f3dfb00a"), UUID("9ac0a4e5-10ee-493a-86fc-d29eeb82ecc1")]; sort(ids);
- const void
toString
(Writer)(scope Writersink
); - UUIDを正規形式のASCII文字列として
sink
にASCII文字列として書き込む、 これは、"xxxxxxxx-xxxxx-xxxxx-xxxxx-xxxxxxxxx "という形式で36文字である。Parameters:Writer sink
少なくとも36エントリーの長さのOutputRangeまたは書き込み可能な配列 - const pure nothrow @trusted string
toString
(); - UUIDを正規形式の文字列として返す。Examples:
immutable str = "8ab3060e-2cba-4f23-b74c-b52db3bdfb46"; auto id = UUID(str); writeln(id.toString()); // str
- pure nothrow @nogc @safe UUID
md5UUID
(const(char[])name
, const UUIDnamespace
= UUID.init);
pure nothrow @nogc @safe UUIDmd5UUID
(const(ubyte[])data
, const UUIDnamespace
= UUID.init); - この関数は、名前空間UUIDと名前から名前ベース(バージョン3)のUUIDを生成する。 名前空間UUIDが渡されなかった場合、空のUUIDUUID.init が使用される。
注釈 デフォルトの名前空間(dnsNamespaceこのモジュールで定義されている を使うべきである。
RFC4122は、新しいアプリケーションではバージョン3のUUID(MD5)ではなく、バージョン5のUUID(SHA-1)を使うことを推奨している。 UUID(MD5)の代わりにバージョン5のUUID(SHA-1)を使うことを推奨している。CTFE CTFEはサポートされていない。
注釈: RFC4122は、名前からどのようにUUIDを生成すべきかについてあまり明確にしていない。 異なる実装が異なるUUIDを返す可能性がある。 を返す可能性がある。UTF-8文字列 std.uuid とバイト配列の実装は、Boostの実装と互換性がある。 std.uuid は、この関数への同じ入力がいつでも同じ出力を生成することを保証している。 これは特にエンディアンが関係ないことを意味する)。 は関係ない)。
注釈: この関数はwstringとdstringのオーバーロードを提供しない。 というのも、この関数はwstringとdstringのオーバーロードを提供しないからである。それは string、wstring、dstringの入力は同じ出力を持つべきだと主張することもできる、 文字列とwstringで異なる出力を生成するBoostとは互換性がない。 とは互換性がない。ubyte[]を使うことで、常にwstringとdstringを渡すことができる。 ubyte[]関数のオーバーロードを使うことで、wstringとdstringを渡すことは可能だ(ただしエンディアンの問題に注意!)。
Examples://デフォルトのUUID.init名前空間を使う auto simpleID = md5UUID("test.uuid.any.string"); //名前ベースのidを名前空間として使う auto namespace = md5UUID("my.app"); auto id = md5UUID("some-description", namespace);
- pure nothrow @nogc @safe UUID
sha1UUID
(scope const(char)[]name
, scope const UUIDnamespace
= UUID.init);
pure nothrow @nogc @safe UUIDsha1UUID
(scope const(ubyte)[]data
, scope const UUIDnamespace
= UUID.init); - この関数は、名前空間UUIDと名前から名前ベース(バージョン5)のUUIDを生成する。 UUIDと名前から名前ベースのUUIDを生成する。 名前空間UUIDが渡されなかった場合、空のUUIDUUID.init が使用される。
注釈 デフォルトの名前空間(dnsNamespaceこのモジュールで定義されている を使うべきである。
CTFE CTFEはサポートされていない。
注釈: RFC4122は、名前からどのようにUUIDを生成すべきかについてあまり明確にしていない。 異なる実装が異なるUUIDを返す可能性がある。 を返す可能性がある。UTF-8文字列 std.uuid とバイト配列の実装は、Boostの実装と互換性がある。 std.uuid は、この関数への同じ入力がいつでも同じ出力を生成することを保証している。 これは特にエンディアンが関係ないことを意味する)。 は関係ない)。
注釈: この関数はwstringとdstringのオーバーロードを提供しない。 というのも、この関数はwstringとdstringのオーバーロードを提供しないからである。それは string、wstring、dstringの入力は同じ出力を持つべきだと主張することもできる、 文字列とwstringで異なる出力を生成するBoostとは互換性がない。 とは互換性がない。ubyte[]を使うことで、常にwstringとdstringを渡すことができる。 ubyte[]関数のオーバーロードを使うことで、wstringとdstringを渡すことは可能だ(ただしエンディアンの問題に注意!)。
Examples://デフォルトのUUID.init名前空間を使う auto simpleID = sha1UUID("test.uuid.any.string"); //名前ベースのidを名前空間として使う auto namespace = sha1UUID("my.app"); auto id = sha1UUID("some-description", namespace);
- nothrow @nogc @safe UUID
randomUUID
();
UUIDrandomUUID
(RNG)(ref RNGrandomGen
)
if (isInputRange!RNG && isIntegral!(ElementType!RNG)); - この関数は、乱数発生器から乱数ベースのUUIDを生成する。 を生成する。この関数はコンパイル時にはサポートされていない。Parameters:
RNG randomGen
一様RNG See Also:Examples:import std.random : Xorshift192, unpredictableSeed; //単純な呼び出し auto uuid = randomUUID(); //カスタムRNGを提供する。手動でシードする必要がある。 Xorshift192 gen; gen.seed(unpredictableSeed); auto uuid3 = randomUUID(gen);
- UUID
parseUUID
(T)(TuuidString
)
if (isSomeString!T);
UUIDparseUUID
(Range)(ref RangeuuidRange
)
if (isInputRange!Range && isSomeChar!(ElementType!Range)); - これは、UUIDコンストラクタで使用されるパーサーと比べると、それほど厳密なパーサーではない。 UUIDコンストラクタで使われるパーサーと比べると、それほど厳密なパーサーではない。これは以下のルールを強制する:
- 16進数は常に2つの16進数([0-9a-fA-F])である。
- そのようなペアが入力に16個正確に存在しなければならない。
- 2つの16進数のペアの間にはダッシュを1つだけ入れる。
- 16個の16進数ペアを囲む複数の文字があってもよい、 これらの文字が[0-9a-fA-F]を含まない限り、である。
注釈 ほとんどのパーサーと同様、引数を消費する。つまり
string s = "8AB3060E-2CBA-4F23-b74c-B52Db3BDFB46"; parseUUID(s); assert(s == "");
Throws:UUIDParsingException入力が無効な場合CTFE この関数は CTFE コードでサポートされている。コンパイル時に解析された不正なUUIDに起因するエラーメッセージは不可解である。 コンパイル時に解析される不正なUUIDによって引き起こされるエラーメッセージは不可解である、 しかし、エラーはコンパイル時に検出され、報告される。
Examples:auto id = parseUUID("8AB3060E-2CBA-4F23-b74c-B52Db3BDFB46"); //ダッシュなし id = parseUUID("8ab3060e2cba4f23b74cb52db3bdfb46"); //異なる位置のダッシュ id = parseUUID("8a-b3-06-0e2cba4f23b74c-b52db3bdfb-46"); //先行/後続文字 id = parseUUID("{8ab3060e-2cba-4f23-b74c-b52db3bdfb46}"); //unicode id = parseUUID("ü8ab3060e2cba4f23b74cb52db3bdfb46ü"); //複数の末尾/先頭文字 id = parseUUID("///8ab3060e2cba4f23b74cb52db3bdfb46||"); //CTFEでは、例えばUUIDリテラルとしても使用できる: enum ctfeID = parseUUID("8ab3060e-2cba-4f23-b74c-b52db3bdfb46"); //ここでの解析はコンパイル時に行われ、実行時のオーバーヘッドはない!
- enum UUID
dnsNamespace
; - RFC 4122のデフォルト名前空間名前文字列は完全修飾ドメイン名である
- enum UUID
urlNamespace
; - RFC 4122のデフォルト名前空間名前文字列はURLである
- enum UUID
oidNamespace
; - RFC 4122のデフォルトの名前空間名前文字列がISO OIDである
- enum UUID
x500Namespace
; - RFC 4122のデフォルトの名前空間名前文字列はX.500 DN(DERまたはテキスト出力形式)である。
- enum string
uuidRegex
; - テキストからUUIDを抽出するための正規表現文字列。Examples:
import std.algorithm; import std.regex; string test = "Lorem ipsum dolor sit amet, consetetur "~ "6ba7b814-9dad-11d1-80b4-00c04fd430c8 sadipscing \n"~ "elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore \r\n"~ "magna aliquyam erat, sed diam voluptua. "~ "8ab3060e-2cba-4f23-b74c-b52db3bdfb46 At vero eos et accusam et "~ "justo duo dolores et ea rebum."; auto r = regex(uuidRegex, "g"); UUID[] found; foreach (c; match(test, r)) { found ~= UUID(c.hit); } assert(found == [ UUID("6ba7b814-9dad-11d1-80b4-00c04fd430c8"), UUID("8ab3060e-2cba-4f23-b74c-b52db3bdfb46"), ]);
- class
UUIDParsingException
: object.Exception; - この例外は、文字列からUUIDを解析する際にエラーが発生した場合にスローされる。 を文字列から解析する際にエラーが発生した場合にスローされる。Examples:
import std.exception : collectException; const inputUUID = "this-is-an-invalid-uuid"; auto ex = collectException!UUIDParsingException(UUID(inputUUID)); assert(ex !is null); // 例外がスローされたかチェックする writeln(ex.input); // 入力UUID writeln(ex.position); // 0 writeln(ex.reason); // UUIDParsingException.Reason.tooLittle
- enum
Reason
: int;
Reasonreason
; - UUID文字列の解析に失敗した理由(わかっている場合)
unknown
tooLittle
- 渡された入力は正しいが、もっと多くの入力が期待されていた。
tooMuch
- 入力データが長すぎる(データの最初の部分が有効である保証はない)
invalidChar
- 無効な文字に遭遇した
- string
input
; - パースされるはずだった元の入力文字列。
- size_t
position
; - エラーが発生した入力文字列の位置。
DEEPL APIにより翻訳、ところどころ修正。
このページの最新版(英語)
このページの原文(英語)
翻訳時のdmdのバージョン: 2.108.0
ドキュメントのdmdのバージョン: 2.109.1
翻訳日付 :
HTML生成日時:
編集者: dokutoku