[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][TOP]
Re: g_hash_table_destroy ()の説明に誤訳
赤星です。
> ついでに同じページでg_hash_table_insert ()とg_hash_table_replace ()
> の違いが分かり難いのですが、原文ではkeyの扱いについて次のような記述の違
> いがあるようです。
(中略)
> イメージ的には、前者がkeyは元々確保されていた物を利用してvalueのみ置き
> 換える、後者がkeyとvalueとも置き換えるという役割の様な気がするのですが、
> 実際の所、keyの扱いがどうなるのかよく分かりません。
> # passedとoldは意図的に使い分けられているのでしょうか?
> # ソースも追って見たいと思います。
既存のキーがあった場合の動作についてglib-2.4.6の該当部分を見てみると
g_hash_table_insert ():
/* free the passed key */
if (hash_table->key_destroy_func)
hash_table->key_destroy_func (key);
if (hash_table->value_destroy_func)
hash_table->value_destroy_func ((*node)->value);
(*node)->value = value;
g_hash_table_replace ():
if (hash_table->key_destroy_func)
hash_table->key_destroy_func ((*node)->key);
if (hash_table->value_destroy_func)
hash_table->value_destroy_func ((*node)->value);
(*node)->key = key;
(*node)->value = value;
となっており、前者がg_hash_table_insertに渡されたkeyを解放しようとするの
に対し、後者が既存のnodeのkeyを解放するという違いがあり、それがthe
passed keyとthe old keyの違いになっているようです。その辺の違いが訳文に
出ていない様ですので明確にした方が良さそうです。文案としては、
g_hash_table_insert ():
…GHashTable を生成する際に key_destroy_func を指定した場合、その関数を
使って(g_hash_table_insertに)渡されたkeyを解放します。
g_hash_table_replace ():
…GHashTable を生成する際に key_destroy_func を指定した場合、その関数を
使って古いキーを解放します。
の様な感じでしょうか。
--
Yasumichi Akahoshi
http://win2linux.sourceforge.jp/
http://vinedocs.sourceforge.jp/
http://cxplorer.sourceforge.jp/