mirror of
https://github.com/MariaDB/server.git
synced 2025-12-13 20:03:16 +03:00
branches/zip: UT_SORT_FUNCTION_BODY(): Add the parameter CTX, which will be
needed in row0merge.c for merge sorting the small blocks in main memory. Pass CTX also to SORT_FUN. Adjust all users.
This commit is contained in:
@@ -24,16 +24,17 @@ The sort function uses mergesort and must be defined separately
|
|||||||
for each type of array.
|
for each type of array.
|
||||||
Also the comparison function has to be defined individually
|
Also the comparison function has to be defined individually
|
||||||
for each array cell type. SORT_FUN is the sort function name.
|
for each array cell type. SORT_FUN is the sort function name.
|
||||||
|
CTX is extra context passed as the first parameter of SORT_FUN.
|
||||||
The function takes the array to be sorted (ARR),
|
The function takes the array to be sorted (ARR),
|
||||||
the array of auxiliary space (AUX_ARR) of same size,
|
the array of auxiliary space (AUX_ARR) of same size,
|
||||||
and the low (LOW), inclusive, and high (HIGH), noninclusive,
|
and the low (LOW), inclusive, and high (HIGH), noninclusive,
|
||||||
limits for the sort interval as arguments.
|
limits for the sort interval as arguments.
|
||||||
CMP_FUN is the comparison function name. It takes as arguments
|
CMP_FUN is the comparison function name. It takes as arguments CTX and
|
||||||
two elements from the array and returns 1, if the first is bigger,
|
two elements from the array and returns 1, if the first is bigger,
|
||||||
0 if equal, and -1 if the second bigger. For an eaxmaple of use
|
0 if equal, and -1 if the second bigger. For an eaxmaple of use
|
||||||
see test program in tsut.c. */
|
see test program in tsut.c. */
|
||||||
|
|
||||||
#define UT_SORT_FUNCTION_BODY(SORT_FUN, ARR, AUX_ARR, LOW, HIGH, CMP_FUN)\
|
#define UT_SORT_FUNCTION_BODY(SORT_FUN, CTX, ARR, AUX_ARR, LOW, HIGH, CMP_FUN)\
|
||||||
{\
|
{\
|
||||||
ulint ut_sort_mid77;\
|
ulint ut_sort_mid77;\
|
||||||
ulint ut_sort_i77;\
|
ulint ut_sort_i77;\
|
||||||
@@ -47,7 +48,7 @@ see test program in tsut.c. */
|
|||||||
if ((LOW) == (HIGH) - 1) {\
|
if ((LOW) == (HIGH) - 1) {\
|
||||||
return;\
|
return;\
|
||||||
} else if ((LOW) == (HIGH) - 2) {\
|
} else if ((LOW) == (HIGH) - 2) {\
|
||||||
if (CMP_FUN((ARR)[LOW], (ARR)[(HIGH) - 1]) > 0) {\
|
if (CMP_FUN(CTX, (ARR)[LOW], (ARR)[(HIGH) - 1]) > 0) {\
|
||||||
(AUX_ARR)[LOW] = (ARR)[LOW];\
|
(AUX_ARR)[LOW] = (ARR)[LOW];\
|
||||||
(ARR)[LOW] = (ARR)[(HIGH) - 1];\
|
(ARR)[LOW] = (ARR)[(HIGH) - 1];\
|
||||||
(ARR)[(HIGH) - 1] = (AUX_ARR)[LOW];\
|
(ARR)[(HIGH) - 1] = (AUX_ARR)[LOW];\
|
||||||
@@ -57,8 +58,8 @@ see test program in tsut.c. */
|
|||||||
\
|
\
|
||||||
ut_sort_mid77 = ((LOW) + (HIGH)) / 2;\
|
ut_sort_mid77 = ((LOW) + (HIGH)) / 2;\
|
||||||
\
|
\
|
||||||
SORT_FUN((ARR), (AUX_ARR), (LOW), ut_sort_mid77);\
|
SORT_FUN(CTX, (ARR), (AUX_ARR), (LOW), ut_sort_mid77);\
|
||||||
SORT_FUN((ARR), (AUX_ARR), ut_sort_mid77, (HIGH));\
|
SORT_FUN(CTX, (ARR), (AUX_ARR), ut_sort_mid77, (HIGH));\
|
||||||
\
|
\
|
||||||
ut_sort_low77 = (LOW);\
|
ut_sort_low77 = (LOW);\
|
||||||
ut_sort_high77 = ut_sort_mid77;\
|
ut_sort_high77 = ut_sort_mid77;\
|
||||||
@@ -71,7 +72,7 @@ see test program in tsut.c. */
|
|||||||
} else if (ut_sort_high77 >= (HIGH)) {\
|
} else if (ut_sort_high77 >= (HIGH)) {\
|
||||||
(AUX_ARR)[ut_sort_i77] = (ARR)[ut_sort_low77];\
|
(AUX_ARR)[ut_sort_i77] = (ARR)[ut_sort_low77];\
|
||||||
ut_sort_low77++;\
|
ut_sort_low77++;\
|
||||||
} else if (CMP_FUN((ARR)[ut_sort_low77],\
|
} else if (CMP_FUN(CTX, (ARR)[ut_sort_low77],\
|
||||||
(ARR)[ut_sort_high77]) > 0) {\
|
(ARR)[ut_sort_high77]) > 0) {\
|
||||||
(AUX_ARR)[ut_sort_i77] = (ARR)[ut_sort_high77];\
|
(AUX_ARR)[ut_sort_i77] = (ARR)[ut_sort_high77];\
|
||||||
ut_sort_high77++;\
|
ut_sort_high77++;\
|
||||||
|
|||||||
@@ -1261,8 +1261,11 @@ page_zip_dir_sort(
|
|||||||
ulint low, /* in: lower bound of the sorting area, inclusive */
|
ulint low, /* in: lower bound of the sorting area, inclusive */
|
||||||
ulint high) /* in: upper bound of the sorting area, exclusive */
|
ulint high) /* in: upper bound of the sorting area, exclusive */
|
||||||
{
|
{
|
||||||
UT_SORT_FUNCTION_BODY(page_zip_dir_sort, arr, aux_arr, low, high,
|
#define page_zip_dir_sort_ctx(c,a,aux,lo,hi) page_zip_dir_sort(a,aux,lo,hi)
|
||||||
page_zip_dir_cmp);
|
#define page_zip_dir_cmp_ctx(c,a,b) page_zip_dir_cmp(a,b)
|
||||||
|
|
||||||
|
UT_SORT_FUNCTION_BODY(page_zip_dir_sort_ctx,, arr, aux_arr, low, high,
|
||||||
|
page_zip_dir_cmp_ctx);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**************************************************************************
|
/**************************************************************************
|
||||||
|
|||||||
@@ -27,7 +27,10 @@ void
|
|||||||
ut_dulint_sort(dulint* arr, dulint* aux_arr, ulint low, ulint high)
|
ut_dulint_sort(dulint* arr, dulint* aux_arr, ulint low, ulint high)
|
||||||
/*===============================================================*/
|
/*===============================================================*/
|
||||||
{
|
{
|
||||||
UT_SORT_FUNCTION_BODY(ut_dulint_sort, arr, aux_arr, low, high,
|
#define ut_dulint_sort_ctx(c,a,aux,lo,hi) ut_dulint_sort(a,aux,lo,hi)
|
||||||
ut_dulint_cmp);
|
#define ut_dulint_cmp_ctx(c,a,b) ut_dulint_cmp(a,b)
|
||||||
|
|
||||||
|
UT_SORT_FUNCTION_BODY(ut_dulint_sort_ctx,, arr, aux_arr, low, high,
|
||||||
|
ut_dulint_cmp_ctx);
|
||||||
}
|
}
|
||||||
#endif /* notdefined */
|
#endif /* notdefined */
|
||||||
|
|||||||
@@ -376,8 +376,11 @@ void
|
|||||||
ut_ulint_sort(ulint* arr, ulint* aux_arr, ulint low, ulint high)
|
ut_ulint_sort(ulint* arr, ulint* aux_arr, ulint low, ulint high)
|
||||||
/*============================================================*/
|
/*============================================================*/
|
||||||
{
|
{
|
||||||
UT_SORT_FUNCTION_BODY(ut_ulint_sort, arr, aux_arr, low, high,
|
#define ut_ulint_sort_ctx(c,a,aux,lo,hi) ut_ulint_sort(a,aux,lo,hi)
|
||||||
ut_ulint_cmp);
|
#define ut_ulint_cmp_ctx(c,a,b) ut_ulint_cmp(a,b)
|
||||||
|
|
||||||
|
UT_SORT_FUNCTION_BODY(ut_ulint_sort_ctx,, arr, aux_arr, low, high,
|
||||||
|
ut_ulint_cmp_ctx);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*****************************************************************
|
/*****************************************************************
|
||||||
|
|||||||
Reference in New Issue
Block a user