X-Git-Url: https://git.saurik.com/apple/libc.git/blobdiff_plain/5f4d86c1219d56604890d932a3152b3b5dd15b55..34e8f8296870d0e8695f90e1a54240a589d41312:/stdlib/qsort.3 diff --git a/stdlib/qsort.3 b/stdlib/qsort.3 index 5d6f5c6..b159ffb 100644 --- a/stdlib/qsort.3 +++ b/stdlib/qsort.3 @@ -41,12 +41,19 @@ .Os .Sh NAME .Nm heapsort , +#ifdef UNIFDEF_BLOCKS +.Nm heapsort_b , +#endif .Nm mergesort , +#ifdef UNIFDEF_BLOCKS +.Nm mergesort_b , +#endif .Nm qsort , +#ifdef UNIFDEF_BLOCKS +.Nm qsort_b , +#endif .Nm qsort_r .Nd sort functions -.Sh LIBRARY -.Lb libc .Sh SYNOPSIS .In stdlib.h .Ft int @@ -56,6 +63,15 @@ .Fa "size_t width" .Fa "int \*[lp]*compar\*[rp]\*[lp]const void *, const void *\*[rp]" .Fc +#ifdef UNIFDEF_BLOCKS +.Ft int +.Fo heapsort_b +.Fa "void *base" +.Fa "size_t nel" +.Fa "size_t width" +.Fa "int \*[lp]^compar\*[rp]\*[lp]const void *, const void *\*[rp]" +.Fc +#endif .Ft int .Fo mergesort .Fa "void *base" @@ -63,6 +79,15 @@ .Fa "size_t width" .Fa "int \*[lp]*compar\*[rp]\*[lp]const void *, const void *\*[rp]" .Fc +#ifdef UNIFDEF_BLOCKS +.Ft int +.Fo mergesort_b +.Fa "void *base" +.Fa "size_t nel" +.Fa "size_t width" +.Fa "int \*[lp]^compar\*[rp]\*[lp]const void *, const void *\*[rp]" +.Fc +#endif .Ft void .Fo qsort .Fa "void *base" @@ -70,6 +95,15 @@ .Fa "size_t width" .Fa "int \*[lp]*compar\*[rp]\*[lp]const void *, const void *\*[rp]" .Fc +#ifdef UNIFDEF_BLOCKS +.Ft void +.Fo qsort_b +.Fa "void *base" +.Fa "size_t nel" +.Fa "size_t width" +.Fa "int \*[lp]^compar\*[rp]\*[lp]const void *, const void *\*[rp]" +.Fc +#endif .Ft void .Fo qsort_r .Fa "void *base" @@ -107,7 +141,7 @@ behaves similarly, but .Em requires that .Fa width -be greater than +be greater than or equal to .Dq "sizeof(void *) / 2" . .Pp The contents of the array @@ -203,20 +237,49 @@ which is faster than .Fn heapsort . Memory availability and pre-existing order in the data can make this untrue. +#ifdef UNIFDEF_BLOCKS +.Pp +The +.Fn heapsort_b , +.Fn mergesort_b , +and +.Fn qsort_b +routines are like the corresponding routines without the _b suffix, expect +that the +.Fa compar +callback is a block pointer instead of a function pointer. +#endif .Sh RETURN VALUES The +#ifdef UNIFDEF_BLOCKS +.Fn qsort , +.Fn qsort_b +#else .Fn qsort +#endif and .Fn qsort_r functions return no value. .Pp -.Rv -std heapsort mergesort +#ifdef UNIFDEF_BLOCKS +.ds HEAPSORT_B heapsort_b +.ds MERGESORT_B mergesort_b +#endif +.Rv -std heapsort \*[HEAPSORT_B] mergesort \*[MERGESORT_B] .Sh ERRORS The +#ifdef UNIFDEF_BLOCKS +.Fn heapsort , +.Fn heapsort_b , +.Fn mergesort +and +.Fn mergesort_b +#else .Fn heapsort and .Fn mergesort +#endif functions succeed unless: .Bl -tag -width Er .It Bq Er EINVAL @@ -227,13 +290,25 @@ the .Fa width argument to .Fn mergesort +#ifdef UNIFDEF_BLOCKS +or +.Fn mergesort_b +#endif is less than .Dq "sizeof(void *) / 2" . .It Bq Er ENOMEM The +#ifdef UNIFDEF_BLOCKS +.Fn heapsort , +.Fn heapsort_b , +.Fn mergesort +and +.Fn mergesort_b +#else .Fn heapsort -or +and .Fn mergesort +#endif functions were unable to allocate memory. .El