summaryrefslogtreecommitdiff
path: root/src/compression/merge_sort.c
diff options
context:
space:
mode:
authorMagnus Lundborg <lundborg.magnus@gmail.com>2013-10-21 07:31:05 (GMT)
committerMagnus Lundborg <lundborg.magnus@gmail.com>2013-10-21 07:31:05 (GMT)
commitbeaa92cb293a4147aef8ed03027500804535ed96 (patch)
treec8427746983418476a99b5c61847e0b4eeca5f1d /src/compression/merge_sort.c
parent885f2782f9f48b69bc229612b0734b4de48b890b (diff)
Fixed compiler warnings and linking errors in MSVC.
Changed tabs to spaces in tng_compression functions.
Diffstat (limited to 'src/compression/merge_sort.c')
-rw-r--r--src/compression/merge_sort.c96
1 files changed, 48 insertions, 48 deletions
diff --git a/src/compression/merge_sort.c b/src/compression/merge_sort.c
index 204243b..1d49903 100644
--- a/src/compression/merge_sort.c
+++ b/src/compression/merge_sort.c
@@ -18,12 +18,12 @@
#include "compression/merge_sort.h"
static void ms_inner(void *base, size_t size,
- size_t start, size_t end,
- int (*compar)(const void *v1,const void *v2,const void *private),
- const void *private,
- char *workarray)
+ size_t start, size_t end,
+ int (*compar)(const void *v1,const void *v2,const void *private),
+ const void *private,
+ char *workarray)
{
- int middle;
+ size_t middle;
if ((end-start)>1)
{
char *cbase=(char *)base;
@@ -32,59 +32,59 @@ static void ms_inner(void *base, size_t size,
printf("For start %d end %d obtained new middle: %d\n",start,end,middle);
#endif
ms_inner(base,size,
- start,middle,
- compar,private,workarray);
+ start,middle,
+ compar,private,workarray);
ms_inner(base,size,
- middle,end,
- compar,private,workarray);
+ middle,end,
+ compar,private,workarray);
#if 0
printf("For start %d end %d Before merge: Comparing element %d with %d\n",start,end,middle-1,middle);
#endif
if (compar(cbase+(middle-1)*size,cbase+middle*size,private)>0)
- {
- /* Merge to work array. */
- int i, n=end-start;
- int ileft=start;
- int iright=middle;
- for (i=0; i<n; i++)
- {
- if (ileft==middle)
- {
- memcpy(workarray+i*size,cbase+iright*size,size);
- iright++;
- }
- else if (iright==end)
- {
- memcpy(workarray+i*size,cbase+ileft*size,size);
- ileft++;
- }
- else
- {
-#if 0
- printf("For start %d end %d In merge: Comparing element %d with %d\n",start,end,ileft,iright);
-#endif
- if (compar(cbase+ileft*size,cbase+iright*size,private)>0)
- {
- memcpy(workarray+i*size,cbase+iright*size,size);
- iright++;
- }
- else
- {
- memcpy(workarray+i*size,cbase+ileft*size,size);
- ileft++;
- }
- }
- }
- /* Copy result back. */
- memcpy(cbase+start*size,workarray,(end-start)*size);
- }
+ {
+ /* Merge to work array. */
+ size_t i, n=end-start;
+ size_t ileft=start;
+ size_t iright=middle;
+ for (i=0; i<n; i++)
+ {
+ if (ileft==middle)
+ {
+ memcpy(workarray+i*size,cbase+iright*size,size);
+ iright++;
+ }
+ else if (iright==end)
+ {
+ memcpy(workarray+i*size,cbase+ileft*size,size);
+ ileft++;
+ }
+ else
+ {
+ #if 0
+ printf("For start %d end %d In merge: Comparing element %d with %d\n",start,end,ileft,iright);
+ #endif
+ if (compar(cbase+ileft*size,cbase+iright*size,private)>0)
+ {
+ memcpy(workarray+i*size,cbase+iright*size,size);
+ iright++;
+ }
+ else
+ {
+ memcpy(workarray+i*size,cbase+ileft*size,size);
+ ileft++;
+ }
+ }
+ }
+ /* Copy result back. */
+ memcpy(cbase+start*size,workarray,(end-start)*size);
+ }
}
}
void Ptngc_merge_sort(void *base, size_t nmemb, size_t size,
- int (*compar)(const void *v1,const void *v2,const void *private),
- void *private)
+ int (*compar)(const void *v1,const void *v2,const void *private),
+ void *private)
{
char *warr=warnmalloc(nmemb*size);
ms_inner(base,size,0,nmemb,compar,private,warr);
contact: Jan Huwald // Impressum