[Senna-dev 993] Re: sen_table_sort_optarg.comparに値のサイズも渡してほしい

Back to archive index

morita morit****@razil*****
2008年 8月 18日 (月) 22:47:58 JST


森です。

ご指摘ありがとうございます!!
パッチ反映させていただきました。

Kouhei Sutou さんは書きました:
> 須藤です。
> 
> sen_table_sort_optarg.comparは比較するテーブルの要素とテーブル自身を
> 受けとりますが、テーブルの要素のサイズは受けとりません。
> 
> SEN_TYPE_FIXED_SIZEのときは要素のサイズは利用者が既知としてもよ
> いと思いますが、SEN_TYPE_VARIABLE_SIZEのときは受け取った要素毎
> にサイズが異なると思うので、要素のサイズも渡してもらえると嬉しいです。
> 
> --- senna.h	(revision 1032)
> +++ senna.h	(working copy)
> @@ -668,7 +668,9 @@
> 
>  struct _sen_table_sort_optarg {
>    int flags;
> -  int (*compar)(sen_obj *, void *, sen_obj *, void *, void *);
> +  int (*compar)(sen_obj *table1, void *target1, unsigned int target1_size,
> +                sen_obj *table2, void *target2, unsigned int target2_size,
> +                void *compare_arg);
>    void *compar_arg;
>    int offset;
>  };
> Index: lib/hash.c
> ===================================================================
> --- lib/hash.c	(revision 1032)
> +++ lib/hash.c	(working copy)
> @@ -941,8 +941,8 @@
> 
>  #define COMPARE_VAL_(ap,as,bp,bs)\
>    (arg->compar\
> -   ? arg->compar((sen_obj *)hash, (void *)(ap),\
> -                 (sen_obj *)hash, (void *)(bp), arg->compar_arg) \
> +   ? arg->compar((sen_obj *)hash, (void *)(ap), as,\
> +                 (sen_obj *)hash, (void *)(bp), bs, arg->compar_arg)\
>     : ((arg->flags & SEN_TABLE_SORT_AS_NUMBER)\
>        ? ((arg->flags & SEN_TABLE_SORT_AS_UNSIGNED)\
>           ? ((arg->flags & SEN_TABLE_SORT_AS_INT64)\
> @@ -1091,8 +1091,9 @@
> 
>  #define COMPARE_VAL32_(ap,bp) \
>    (arg->compar\
> -   ? arg->compar((sen_obj *)hash, (void *)&(ap)->v,\
> -                 (sen_obj *)hash, (void *)&(bp)->v, arg->compar_arg)\
> +   ? arg->compar((sen_obj *)hash, (void *)&(ap)->v, sizeof(uint32_t),\
> +                 (sen_obj *)hash, (void *)&(bp)->v, sizeof(uint32_t),\
> +                 arg->compar_arg)\
>     : ((arg->flags & SEN_TABLE_SORT_AS_NUMBER)\
>        ? ((arg->flags & SEN_TABLE_SORT_AS_UNSIGNED)\
>           ? *((uint32_t *)&(ap)->v) > *((uint32_t *)&(bp)->v)\
> 
> _______________________________________________
> Senna-dev mailing list
> Senna****@lists*****
> http://lists.sourceforge.jp/mailman/listinfo/senna-dev
> バグ報告方法:http://qwik.jp/senna/bug_report.html
> 




Senna-dev メーリングリストの案内
Back to archive index