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

Back to archive index

Kouhei Sutou kou****@cozmi*****
2008年 8月 18日 (月) 15:46:28 JST


須藤です。

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 メーリングリストの案内
Back to archive index