Переписываю шаблон C ++ для C - PullRequest
1 голос
/ 03 марта 2011

Может кто-нибудь помочь мне переписать этот код с C ++ на C ... (в нем есть шаблоны ... даааа :)) Спасибо.

template <class T>
void SWAP( T& t1, T& t2 ) 
  { 
    T tmp=t1; 
  t1=t2;
    t2=tmp;
  }

и этот

template <class CMP, class Element>
void sh_qsort( Element* array, uint lo, uint hi )
  {
    some code...
  }

и sh_qsort называется как sh_qsort<TEST>( test_file, 0, 255 ) где TEST равно

struct TEST {

static int  c( uint* A, int x, int y ) 
{
  uint px = A[x];
  uint py = A[y];
  int r,s;
  s = (px<py) ? SWAP(px,py),0x80000000 : 0;
  byte* p = &f_buf[px]; 
  byte* th = &f_buf[blocksize];
  byte* q = &f_buf[py];
  for(; (r=1,p<th) && ((r=(*p)-(*q))==0); p++,q++ );
  return r^s;
}

static void s( uint* A, int x, int y )
  {
    SWAP( A[x], A[y] );
  }
};

и как переписать эту структуру в c.

Просто и аккуратно ... ПОМОГИТЕ :)

Спасибо!

Ответы [ 2 ]

1 голос
/ 03 марта 2011

Извините, ребята, это результат http://encode.ru/threads/1230-On-compressing-series-of-ones-and-zeroes., и я написал программу, которую он пытается перевести.В любом случае, в http://ctxmodel.net/files/BWT.cpp

есть более C-подобная реализация
1 голос
/ 03 марта 2011

Предполагая, что sh_qsort() на самом деле является реализацией быстрой сортировки, все, что вам нужно сделать, это преобразовать TEST::c() в функцию сравнения, как этого ожидают qsort() из stdlib.h.

Переход от универсального кода времени компиляции через шаблоны к универсальному коду времени исполнения через void * обычно влечет за собой снижение производительности, от которого можно избавиться, используя так называемые «X-макросы» для имитации шаблонов с препроцессором. , Однако, вероятно, нет необходимости беспокоиться: так как TEST::c() достаточно сложен, он, вероятно, не будет встроен в любом случае, и вам нужно только заплатить за использование обобщенных во время выполнения свопов, выполняемых qsort().

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...