[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/