/* * * Optimal list-merge sorting algorithm with exponential merge schedule. * * From: Software Development International, Winter 1991. * * This implementation by Jeremy Harris jgh@imptld.com * * Adapted into toolkit by Martin Poole mpoole@cix.compulink.co.uk * ** ** WARNING !! WARNING !! WARNING !! WARNING !! WARNING !! WARNING !! ** ** Any changes to be made to this file should first be checked with ** mplib1 source control for library integrity. ** ** mplib1 source control can be reached at mplib1@quatermass.co.uk ** * $Source: /home/cvs/cvsroot/onelan/onelan/src/mplib1/libsrc/lmsort_m.c,v $ * $Author: mpoole $ * $Date: 2002/10/07 09:37:39 $ * $Revision: 1.2 $ * * $Log: lmsort_m.c,v $ * Revision 1.2 2002/10/07 09:37:39 mpoole * Initial checkin of mplib1-3.1.0 * * Revision 1.1 2002/10/07 09:36:57 mpoole * Initial checkin of mplib1-3.1.0 * * ******************************************************************************* */ #ident "$Header: /home/cvs/cvsroot/onelan/onelan/src/mplib1/libsrc/lmsort_m.c,v 1.2 2002/10/07 09:37:39 mpoole Exp $" /* ------------------------------------------------------------------ defines ------------------------------------------------------------------ */ /* ------------------------------------------------------------------ includes ------------------------------------------------------------------ */ #include #include #include #include /* ------------------------------------------------------------------ variables ------------------------------------------------------------------ */ /* ------------------------------------------------------------------ code starts here ------------------------------------------------------------------ */ struct lmsortp * lmsort_init( void* base, size_t nel, size_t width, struct lmsortp *dp ) { struct lmsortp *dp2; int i; if (dp==NULL) dp = malloc( nel * sizeof(struct lmsortp) ); if (dp) { /* we can only sort if there is enough memory */ dp2=dp; for (i=0; inext = dp2+1; dp2->dp = base; dp2++; base = (void *)( ((char *)base) + width ); } dp2--; dp2->next=NULL; } return(dp); } void lmsort_end( struct lmsortp *dp ) { if (dp) { free(dp); } return; } /* -- End of File -- */