/* макрорасширения для сортировок */
#ifndef SortPH
#define SortPH

typedef int (*fptr)(const void*, const void*);
typedef int (*fptr_diff)(const void*, const void*, const void*);

#define   WCCHAR  (unsigned int)sizeof(char)
#define   WSHORT  (unsigned int)sizeof(short)
#define   WINT  (unsigned int)sizeof(int)
#define   WLONG  (unsigned int)sizeof(long)
#define   WDOUBLE (unsigned int)sizeof(double)
#define   WCONT (unsigned int)sizeof(CONT)

#define   SCHAR  WCCHAR,(fptr)cmpc
#define   SUCHAR  WCCHAR,(fptr)cmpuc
#define   SSHORT  WSHORT,(fptr)cmps
#define   SUSHORT  WSHORT,(fptr)cmpus
#define   SINT  WINT,(fptr)cmpi
#define   SUINT  WINT,(fptr)cmpui
#define   SLONG  WLONG,(fptr)cmpl
#define   SULONG  WLONG,(fptr)cmpul
#define   SDOUBLE WDOUBLE,(fptr)cmpd
#define   SCONT WCONT,(fptr)cmpcont
#define   Wgran  (unsigned int)sizeof(NUM_GRAN)

char* bsearch_diff(char* var, char *diff, char *list, int n, int size, int(*)(const void *, const void *, const void*));
int   qsortk(char*,unsigned int,unsigned int,
      int (*)(const void *, const void *));
int   ssortk(char*,unsigned int,unsigned int,
      int (*)(const void *, const void *));
int   qsortkk(char*, char*,unsigned int,unsigned int,
      int (*)(const void *, const void *),
      unsigned int, int (*)(const void *, const void *));
int   qsortkr(char*, char*,unsigned int,unsigned int,
      int (*)(const void *, const void * ),
      unsigned int);
int   ssortkr(char*, char*,unsigned int,unsigned int,
      int (*)(const void *, const void * ),
      unsigned int);
int cmpf(float*, float*);
// Перестановка элементов вектора int в соответствии со списком
void rep_int(int* list, int* vec, int n);
// Перестановка элементов вектора double в соответствии со списком
void rep_double(int* list, double* vec, int n);
// Перестановка элементов вектора char в соответствии со списком
void rep_char(int* list, char* vec, int n, int size);





#endif



