string: alloc/string.nepl に関する機能を提供するライブラリ
- このモジュールの公開 API を提供します。
- 実装の変更時に最小限の doctest 実行経路を維持します。
- 利用時は各関数の「目的」「注意」「計算量」を確認してください。
#entry main
#target std
fn main <()*>i32> ():
()
0string_alloc_region: 文字列用の領域を確保する
- 先頭 4 バイトの長さヘッダを含む文字列領域を確保します。
alloc_region_bytes<u8>に4 + byte_lenを渡し、文字列レイアウト専用のRegionToken<u8>を返します。
byte_lenは文字列本文のバイト数です。- 失敗時は
Result::Errを返します。
- 確保器に依存します。平均 O(1)、free list 探索時は最悪 O(n) です。
string_region_len_ptr: 文字列領域ヘッダへの型付きポインタを得る
- 文字列領域の長さヘッダを
MemPtr<i32>として扱えるようにします。
region_ptr_at<u8,i32> region 0を利用します。
- 文字列領域レイアウトを前提とする内部ヘルパです。
- O(1)
string_region_data_ptr: 文字列本文先頭への型付きポインタを得る
- 文字列本文の 1 バイト目を
MemPtr<u8>として扱えるようにします。
region_ptr_at<u8,u8> region 4を利用します。
- 先頭 4 バイトが長さヘッダであることを前提にしています。
- O(1)
string_data_ptr: 既存文字列の本文先頭を型付きポインタとして扱う
strの内部表現を直接露出せずに、本文領域へアクセスします。
- 長さヘッダの直後を
MemPtr<u8>として包みます。
- 既存の
str表現に依存する内部ヘルパです。
- O(1)
string_finish: 文字列領域を str として確定する
- 文字列領域へ長さを書き込み、公開型
strに変換します。
- ヘッダへ長さを書き込み、領域先頭アドレスを返します。
- 確定後は領域の所有権を
str側へ移します。 - 書き込み不能な領域は内部不整合として
unreachable扱いです。
- O(1)
len: 主な用途
- len の主な用途と呼び出し方を示します。
- 定義済み処理をそのまま呼び出す薄いラッパで構成されています。
- 引数の値は関数呼び出しで移動するため、再利用時は束縛し直してください。
- 本体処理に準じます。
concat: 主な用途
- concat の主な用途と呼び出し方を示します。
- 定義済み処理をそのまま呼び出す薄いラッパで構成されています。
- 引数の値は関数呼び出しで移動するため、再利用時は束縛し直してください。
- 本体処理に準じます。
concat3: 主な用途
- concat3 の主な用途と呼び出し方を示します。
- 定義済み処理をそのまま呼び出す薄いラッパで構成されています。
- 引数の値は関数呼び出しで移動するため、再利用時は束縛し直してください。
- 本体処理に準じます。
StringBuilder: 構造体の概要
- StringBuilder の主な用途と呼び出し方を示します。
- 定義済み処理をそのまま呼び出す薄いラッパで構成されています。
- 引数の値は関数呼び出しで移動するため、再利用時は束縛し直してください。
- 定義そのものは O(1) です。
string_builder_new: 主な用途
- string_builder_new の主な用途と呼び出し方を示します。
- 定義済み処理をそのまま呼び出す薄いラッパで構成されています。
- 引数の値は関数呼び出しで移動するため、再利用時は束縛し直してください。
- 本体処理に準じます。
sb_append: 主な用途
- sb_append の主な用途と呼び出し方を示します。
- 定義済み処理をそのまま呼び出す薄いラッパで構成されています。
- 引数の値は関数呼び出しで移動するため、再利用時は束縛し直してください。
- 本体処理に準じます。
sb_append_i32: 主な用途
- sb_append_i32 の主な用途と呼び出し方を示します。
- 定義済み処理をそのまま呼び出す薄いラッパで構成されています。
- 引数の値は関数呼び出しで移動するため、再利用時は束縛し直してください。
- 本体処理に準じます。
sb_build: 主な用途
- sb_build の主な用途と呼び出し方を示します。
- 定義済み処理をそのまま呼び出す薄いラッパで構成されています。
- 引数の値は関数呼び出しで移動するため、再利用時は束縛し直してください。
- 本体処理に準じます。
str_eq: 主な用途
- str_eq の主な用途と呼び出し方を示します。
- 定義済み処理をそのまま呼び出す薄いラッパで構成されています。
- 引数の値は関数呼び出しで移動するため、再利用時は束縛し直してください。
- 本体処理に準じます。
str_eq_loop: 主な用途
- str_eq_loop の主な用途と呼び出し方を示します。
- 定義済み処理をそのまま呼び出す薄いラッパで構成されています。
- 引数の値は関数呼び出しで移動するため、再利用時は束縛し直してください。
- 本体処理に準じます。
str_is_space: 主な用途
- str_is_space の主な用途と呼び出し方を示します。
- 定義済み処理をそのまま呼び出す薄いラッパで構成されています。
- 引数の値は関数呼び出しで移動するため、再利用時は束縛し直してください。
- 本体処理に準じます。
str_starts_with: 主な用途
- str_starts_with の主な用途と呼び出し方を示します。
- 定義済み処理をそのまま呼び出す薄いラッパで構成されています。
- 引数の値は関数呼び出しで移動するため、再利用時は束縛し直してください。
- 本体処理に準じます。
str_eq_at: 主な用途
- str_eq_at の主な用途と呼び出し方を示します。
- 定義済み処理をそのまま呼び出す薄いラッパで構成されています。
- 引数の値は関数呼び出しで移動するため、再利用時は束縛し直してください。
- 本体処理に準じます。
str_ends_with: 主な用途
- str_ends_with の主な用途と呼び出し方を示します。
- 定義済み処理をそのまま呼び出す薄いラッパで構成されています。
- 引数の値は関数呼び出しで移動するため、再利用時は束縛し直してください。
- 本体処理に準じます。
str_slice: 主な用途
- str_slice の主な用途と呼び出し方を示します。
- 定義済み処理をそのまま呼び出す薄いラッパで構成されています。
- 引数の値は関数呼び出しで移動するため、再利用時は束縛し直してください。
- 本体処理に準じます。
str_trim: 主な用途
- str_trim の主な用途と呼び出し方を示します。
- 定義済み処理をそのまま呼び出す薄いラッパで構成されています。
- 引数の値は関数呼び出しで移動するため、再利用時は束縛し直してください。
- 本体処理に準じます。
str_match_at: 主な用途
- str_match_at の主な用途と呼び出し方を示します。
- 定義済み処理をそのまま呼び出す薄いラッパで構成されています。
- 引数の値は関数呼び出しで移動するため、再利用時は束縛し直してください。
- 本体処理に準じます。
str_split: 主な用途
- str_split の主な用途と呼び出し方を示します。
- 定義済み処理をそのまま呼び出す薄いラッパで構成されています。
- 引数の値は関数呼び出しで移動するため、再利用時は束縛し直してください。
- 本体処理に準じます。
from_bool: 主な用途
- bool を人間向けの文字列へ変換する使い方を示します。
- true と false を、それぞれ固定文字列へ直接対応付けます。
- 返値は表示や比較には使えますが、bool としては扱えません。
- 分岐 1 回だけなので O(1) です。
#entry main
#target std
#import "std/test" as *
#import "alloc/string" as *
fn main <()*>()> ():
assert_str_eq "true" from_bool true;
assert_str_eq "false" from_bool false;to_bool: 主な用途
- 文字列入力から bool を安全に読む使い方を示します。
- 固定文字列
"true"/"false"との比較で判定します。
- 大文字小文字は区別します。
- 比較は文字列長に比例するため O(n) です。
#entry main
#target std
#import "std/test" as *
#import "core/result" as *
#import "alloc/string" as *
fn main <()*>()> ():
match to_bool "true":
Result::Ok v:
assert_eq_i32 1 cast v;
Result::Err _:
assert_eq_i32 1 0;
match to_bool "false":
Result::Ok v:
assert_eq_i32 0 cast v;
Result::Err _:
assert_eq_i32 1 0;U128DivRem: u128 の小基数除算の結果
from_i32: 主な用途
- 正数と負数の両方を 10 進文字列へ変換する例を示します。
- i64 共通実装へ渡すことで、符号と桁列の処理を重複させません。
- 返値は新しい文字列であり、桁数に応じた確保コストがあります。
- 桁数 d に対して O(d) です。
#entry main
#target std
#import "std/test" as *
#import "alloc/string" as *
fn main <()*>()> ():
assert_str_eq "42" from_i32 42;
assert_str_eq "-42" from_i32 -42;to_i32: 主な用途
- to_i32 の主な用途と呼び出し方を示します。
- 定義済み処理をそのまま呼び出す薄いラッパで構成されています。
- 引数の値は関数呼び出しで移動するため、再利用時は束縛し直してください。
- 本体処理に準じます。
from_i64: 主な用途
i64を 10 進の符号付き文字列へ変換する基本例を示します。
- 本体は
from_i64_radix x 10に委譲し、基数付き実装へ統一しています。
- 負数でも
-42のような符号付き表記を返します。
- 桁数
dに対して O(d) です。
to_i64: 主な用途
- 10 進文字列を
i64として読む基本例を示します。
- 本体は
to_i64_radix s 10に委譲し、基数付き実装へ統一しています。
- 接頭辞は読まず、文字列本体だけを解析します。
- 入力長
nに対して O(n) です。
cast: 主な用途
- cast の主な用途と呼び出し方を示します。
- 定義済み処理をそのまま呼び出す薄いラッパで構成されています。
- 引数の値は関数呼び出しで移動するため、再利用時は束縛し直してください。
- 本体処理に準じます。
from_f64: 主な用途
- from_f64 の主な用途と呼び出し方を示します。
- 定義済み処理をそのまま呼び出す薄いラッパで構成されています。
- 引数の値は関数呼び出しで移動するため、再利用時は束縛し直してください。
- 本体処理に準じます。
cast: 主な用途
- cast の主な用途と呼び出し方を示します。
- 定義済み処理をそのまま呼び出す薄いラッパで構成されています。
- 引数の値は関数呼び出しで移動するため、再利用時は束縛し直してください。
- 本体処理に準じます。
to_f64: 主な用途
- to_f64 の主な用途と呼び出し方を示します。
- 定義済み処理をそのまま呼び出す薄いラッパで構成されています。
- 引数の値は関数呼び出しで移動するため、再利用時は束縛し直してください。
- 本体処理に準じます。
cast: 主な用途
- cast の主な用途と呼び出し方を示します。
- 定義済み処理をそのまま呼び出す薄いラッパで構成されています。
- 引数の値は関数呼び出しで移動するため、再利用時は束縛し直してください。
- 本体処理に準じます。
from_f32: 主な用途
- from_f32 の主な用途と呼び出し方を示します。
- 定義済み処理をそのまま呼び出す薄いラッパで構成されています。
- 引数の値は関数呼び出しで移動するため、再利用時は束縛し直してください。
- 本体処理に準じます。
cast: 主な用途
- cast の主な用途と呼び出し方を示します。
- 定義済み処理をそのまま呼び出す薄いラッパで構成されています。
- 引数の値は関数呼び出しで移動するため、再利用時は束縛し直してください。
- 本体処理に準じます。
to_f32: 主な用途
- to_f32 の主な用途と呼び出し方を示します。
- 定義済み処理をそのまま呼び出す薄いラッパで構成されています。
- 引数の値は関数呼び出しで移動するため、再利用時は束縛し直してください。
- 本体処理に準じます。
find: 主な用途
- find の主な用途と呼び出し方を示します。
- 定義済み処理をそのまま呼び出す薄いラッパで構成されています。
- 引数の値は関数呼び出しで移動するため、再利用時は束縛し直してください。
- 本体処理に準じます。