Embedded Artistry Framework
Embedded Systems C++ Framework
Macros | Functions
heapsort.c File Reference
#include <stddef.h>
#include <stdlib.h>
Include dependency graph for heapsort.c:

Macros

#define SWAP(a, b, count, size, tmp)
 
#define COPY(a, b, count, size, tmp1, tmp2)
 
#define CREATE(initval, nmemb, par_i, child_i, par, child, size, count, tmp)
 
#define SELECT(par_i, child_i, nmemb, par, child, size, k, count, tmp1, tmp2)
 

Functions

int heapsort (void *vbase, size_t nmemb, size_t size, int *compar)
 

Macro Definition Documentation

◆ COPY

#define COPY (   a,
  b,
  count,
  size,
  tmp1,
  tmp2 
)
Value:
{ \
count = size; \
tmp1 = a; \
tmp2 = b; \
do \
{ \
*tmp1++ = *tmp2++; \
} while(--count); \
}
double b[ARR_LEN]
Definition: libm-bench.cpp:75
double a[ARR_LEN]
Definition: libm-bench.cpp:74

◆ CREATE

#define CREATE (   initval,
  nmemb,
  par_i,
  child_i,
  par,
  child,
  size,
  count,
  tmp 
)
Value:
{ \
for(par_i = initval; (child_i = par_i * 2) <= nmemb; par_i = child_i) \
{ \
child = base + child_i * size; \
if(child_i < nmemb && compar(child, child + size) < 0) \
{ \
child += size; \
++child_i; \
} \
par = base + par_i * size; \
if(compar(child, par) <= 0) \
break; \
SWAP(par, child, count, size, tmp); \
} \
}

◆ SELECT

#define SELECT (   par_i,
  child_i,
  nmemb,
  par,
  child,
  size,
  k,
  count,
  tmp1,
  tmp2 
)
Value:
{ \
for(par_i = 1; (child_i = par_i * 2) <= nmemb; par_i = child_i) \
{ \
child = base + child_i * size; \
if(child_i < nmemb && compar(child, child + size) < 0) \
{ \
child += size; \
++child_i; \
} \
par = base + par_i * size; \
COPY(par, child, count, size, tmp1, tmp2); \
} \
for(;;) \
{ \
child_i = par_i; \
par_i = child_i / 2; \
child = base + child_i * size; \
par = base + par_i * size; \
if(child_i == 1 || compar(k, par) < 0) \
{ \
COPY(child, k, count, size, tmp1, tmp2); \
break; \
} \
COPY(child, par, count, size, tmp1, tmp2); \
} \
}
static const u_int32_t k
Definition: k_exp.c:35

◆ SWAP

#define SWAP (   a,
  b,
  count,
  size,
  tmp 
)
Value:
{ \
count = size; \
do \
{ \
tmp = *a; \
*a++ = *b; \
*b++ = tmp; \
} while(--count); \
}
double b[ARR_LEN]
Definition: libm-bench.cpp:75
double a[ARR_LEN]
Definition: libm-bench.cpp:74

Function Documentation

◆ heapsort()

int heapsort ( void*  vbase,
size_t  nmemb,
size_t  size,
int *  compar 
)