SltVA
の編集
https://khfdpl.osask.jp:443/wiki/?SltVA
[
トップ
] [
編集
|
差分
|
バックアップ
|
添付
|
リロード
] [
新規
|
一覧
|
単語検索
|
最終更新
|
ヘルプ
]
-- 雛形とするページ --
2016_10
2016_11
2016_12
BracketName
Essen
Essen0
Essen1
Essen2
Essen3
Essen4
EssenMemo0001
EssenMemo0002
EssenMemo0003
EssenMemo0004
EssenMemo0005
EssenMemo0006
EssenMemo0007
EssenMemo0008
EssenMemo0009
EssenMemo0010
EssenMemo0011
EssenR2
EssenR2_ess03f
EssenR2_ess03h
EssenR2_ess03i
EssenR2_ideas
EssenR2_jit00
EssenR2_jit01
FormattingRules
FrontPage
Help
IP
InterWiki
InterWikiName
InterWikiSandBox
K
KHPC
KHPC_v000doc01
KHPC_v001doc01
KHPC_v002doc01
KHPC_v003doc01
MenuBar
OSC
OSC20181027
OSC20190222
OSC20191123
OSC20230401
OSC20230528
OSC20231021
OSC20240310
OSC20241026
PHP
PukiWiki
PukiWiki/1.4
PukiWiki/1.4/Manual
PukiWiki/1.4/Manual/Plugin
PukiWiki/1.4/Manual/Plugin/A-D
PukiWiki/1.4/Manual/Plugin/E-G
PukiWiki/1.4/Manual/Plugin/H-K
PukiWiki/1.4/Manual/Plugin/L-N
PukiWiki/1.4/Manual/Plugin/O-R
PukiWiki/1.4/Manual/Plugin/S-U
PukiWiki/1.4/Manual/Plugin/V-Z
RecentDeleted
SandBox
SltVA
VariableArray
WikiEngines
WikiName
YukiWiki
advcal20161205
advcal20161206
advcal20161209
advcal20161210
advcal20161215
eoml0001
eoml0002
essen_ex01_0001
impressions
kcl_malloc
khfdpl_result1
members
memo0001
memo0002
note0001
note0002
note0003
note0004
note0005
note0006
oldworks
oldworks00
oldworks06
oldworks12
oldworks13
osaskjp_index
persistent_C
populars
pr20161105
pr20161105b
scsc
seccamp2017
spam_test
uxf
uxf_01
uxf_02
uxp
* SltVAライブラリのメモ -(by [[K]], 2017.10.27) ** 関数の一覧(スロット基本編) -void Slt_init(); --スロットライブラリを使うときはとにもかくにもまずこれをやる。 -void Slt_rsv(int s0, int n); --スロット番号を連番でリザーブする。スロット番号を#defineで管理するのはダサイので以下のようにするのがいいと思う。 enum { slt_ess = 0, slt_ti, slt_vq, slt_glb, slt_scp, slt_n }; Slt_rsv(0, slt_n); --alcを使わないのならリザーブしないで使い始めても平気。 -int Slt_alc(); --空いているスロット番号が得られる。 -void Slt_fre(int s); --使っていたスロット番号を解放できる。なお、destし忘れていれば気を利かせてdestしてからfreしてくれる。 -void Slt_dest(int s); --使っていたスロットのリソースを解放する。でもスロット番号はリザーブされたままになる。 -void Slt_dump(void *fp); --fpにstdoutを指定すれば、現在のスロット状態が全部見える。超便利。 ** 関数の一覧(VA基本編) -void SltVA_init(int s, int es, const char *nam); --sはスロット番号。esはelementSizeで1以上。namは適当な名前。NULLにしてもいい。namはdump以外では使わない。 --最初はn=0になる。 --もしsが他の用途に使われていたら、destしてからinitする。だから結構安全。 -void *SltVA_p(int s, int i); --i番目の要素へのポインタを取得する。サイズを変更するまでは有効。 -int SltVA_n(int s); --現在設定されている配列の長さを返す。 -void *SltVA_size(int s, int n); --配列の長さをnに設定する。realloc回数を減らすために必要に応じてマージンも付けるが、それはnには反映されない。 //--ひとまず現在の仕様では、サイズが小さくなる分にはreallocは一切やらない。(一番大きかったn+マージン)を維持する。例外はsizeFix。 --関数は変更後の SltVA_p(s, 0) を返す。 -void *SltVA_sizeFix(int s, int n); --配列の長さをnに設定する。マージンは付けない。n=-1にすると、現在のnのままマージンだけを捨てる。 --sizeFixで確保すれば普通のmalloc/reallocみたいなものであり、サイズを変更しない用途でも十分に使える。dumpで確認できるためだけに使うのだって十分アリ。それくらいdumpは便利。 ** 関数の一覧(VA応用編1) -基本的な説明 --elementSizeが sizeof (int) 以上であれば使える。 --要素の最初の unsigned int 部分に、1以上のシリアルナンバーを付けて、使用中か未使用かを区別する。 -int SltVA_alc(int s); --未使用な要素を一つ持ってくる。 -void SltVA_fre(int s, int i); --要素を未使用に状態に戻す。未使用だったものをfreしても問題はない。 -void SltVA_rsv(int s, int i0, int n); --要素を連番でリザーブする。指定された範囲に既に使用中な部分があってもおかまいなしでシリアルナンバーを付け直す。 -int SltVA_sch(int s, unsigned int sn0); --sn0以上のシリアルナンバーを持つ要素のうち、最小のシリアルナンバーのものを返す。 ** 関数の一覧(VA応用編2) -基本的な説明 --elementSizeが sizeof (int) 以上であれば使える。 --要素の最初の int 部分をキーとして、データを登録管理するイメージ。 --データの歯抜けは想定していない。だから0~(n-1)までびっしり詰まっている。消すときには末尾から一つ持ってきて隙間を埋める想定。 -int SltVA_schKeyInt(int s, int ki); --キーがkiに等しいものを探す。もし見つからなければ SltVA_n(s) を返す。 -int SltVA_schKeyInt1(int s, int ki, void *pp, int *pi); --キーがkiに等しいものを探す。*ppには SltVA_p(s, 0) を返す。*piには SltVA_schKeyInt() の結果を返す。 --ppは本当は void ** というべきものなのだが、C言語の仕様として、void **と書いても型チェックでエラーになるので、void *としている。 --関数の戻り値としては、見つかった場合は0を、見つからなかった場合は0以外を返す。 -int SltVA_schKeyInt2(int s, int ki, void *pp, int *pi); --SltVA_schKeyInt1() とほぼ同じ挙動だが、見つからなかった場合は、勝手にサイズを1増やして、その増えた要素の先頭にkiを代入した状態にしてくれる。 * こめんと欄 #comment
タイムスタンプを変更しない
* SltVAライブラリのメモ -(by [[K]], 2017.10.27) ** 関数の一覧(スロット基本編) -void Slt_init(); --スロットライブラリを使うときはとにもかくにもまずこれをやる。 -void Slt_rsv(int s0, int n); --スロット番号を連番でリザーブする。スロット番号を#defineで管理するのはダサイので以下のようにするのがいいと思う。 enum { slt_ess = 0, slt_ti, slt_vq, slt_glb, slt_scp, slt_n }; Slt_rsv(0, slt_n); --alcを使わないのならリザーブしないで使い始めても平気。 -int Slt_alc(); --空いているスロット番号が得られる。 -void Slt_fre(int s); --使っていたスロット番号を解放できる。なお、destし忘れていれば気を利かせてdestしてからfreしてくれる。 -void Slt_dest(int s); --使っていたスロットのリソースを解放する。でもスロット番号はリザーブされたままになる。 -void Slt_dump(void *fp); --fpにstdoutを指定すれば、現在のスロット状態が全部見える。超便利。 ** 関数の一覧(VA基本編) -void SltVA_init(int s, int es, const char *nam); --sはスロット番号。esはelementSizeで1以上。namは適当な名前。NULLにしてもいい。namはdump以外では使わない。 --最初はn=0になる。 --もしsが他の用途に使われていたら、destしてからinitする。だから結構安全。 -void *SltVA_p(int s, int i); --i番目の要素へのポインタを取得する。サイズを変更するまでは有効。 -int SltVA_n(int s); --現在設定されている配列の長さを返す。 -void *SltVA_size(int s, int n); --配列の長さをnに設定する。realloc回数を減らすために必要に応じてマージンも付けるが、それはnには反映されない。 //--ひとまず現在の仕様では、サイズが小さくなる分にはreallocは一切やらない。(一番大きかったn+マージン)を維持する。例外はsizeFix。 --関数は変更後の SltVA_p(s, 0) を返す。 -void *SltVA_sizeFix(int s, int n); --配列の長さをnに設定する。マージンは付けない。n=-1にすると、現在のnのままマージンだけを捨てる。 --sizeFixで確保すれば普通のmalloc/reallocみたいなものであり、サイズを変更しない用途でも十分に使える。dumpで確認できるためだけに使うのだって十分アリ。それくらいdumpは便利。 ** 関数の一覧(VA応用編1) -基本的な説明 --elementSizeが sizeof (int) 以上であれば使える。 --要素の最初の unsigned int 部分に、1以上のシリアルナンバーを付けて、使用中か未使用かを区別する。 -int SltVA_alc(int s); --未使用な要素を一つ持ってくる。 -void SltVA_fre(int s, int i); --要素を未使用に状態に戻す。未使用だったものをfreしても問題はない。 -void SltVA_rsv(int s, int i0, int n); --要素を連番でリザーブする。指定された範囲に既に使用中な部分があってもおかまいなしでシリアルナンバーを付け直す。 -int SltVA_sch(int s, unsigned int sn0); --sn0以上のシリアルナンバーを持つ要素のうち、最小のシリアルナンバーのものを返す。 ** 関数の一覧(VA応用編2) -基本的な説明 --elementSizeが sizeof (int) 以上であれば使える。 --要素の最初の int 部分をキーとして、データを登録管理するイメージ。 --データの歯抜けは想定していない。だから0~(n-1)までびっしり詰まっている。消すときには末尾から一つ持ってきて隙間を埋める想定。 -int SltVA_schKeyInt(int s, int ki); --キーがkiに等しいものを探す。もし見つからなければ SltVA_n(s) を返す。 -int SltVA_schKeyInt1(int s, int ki, void *pp, int *pi); --キーがkiに等しいものを探す。*ppには SltVA_p(s, 0) を返す。*piには SltVA_schKeyInt() の結果を返す。 --ppは本当は void ** というべきものなのだが、C言語の仕様として、void **と書いても型チェックでエラーになるので、void *としている。 --関数の戻り値としては、見つかった場合は0を、見つからなかった場合は0以外を返す。 -int SltVA_schKeyInt2(int s, int ki, void *pp, int *pi); --SltVA_schKeyInt1() とほぼ同じ挙動だが、見つからなかった場合は、勝手にサイズを1増やして、その増えた要素の先頭にkiを代入した状態にしてくれる。 * こめんと欄 #comment
テキスト整形のルールを表示する