ReactOS Fundraising Campaign 2012
 
€ 4,410 / € 30,000

Information | Donate

Home | Info | Community | Development | myReactOS | Contact Us

  1. Home
  2. Community
  3. Development
  4. myReactOS
  5. Fundraiser 2012

  1. Main Page
  2. Alphabetical List
  3. Data Structures
  4. Directories
  5. File List
  6. Data Fields
  7. Globals
  8. Related Pages

ReactOS Development > Doxygen

sorter.cc
Go to the documentation of this file.
00001 /*
00002 ** License Applicability. Except to the extent portions of this file are
00003 ** made subject to an alternative license as permitted in the SGI Free
00004 ** Software License B, Version 1.1 (the "License"), the contents of this
00005 ** file are subject only to the provisions of the License. You may not use
00006 ** this file except in compliance with the License. You may obtain a copy
00007 ** of the License at Silicon Graphics, Inc., attn: Legal Services, 1600
00008 ** Amphitheatre Parkway, Mountain View, CA 94043-1351, or at:
00009 **
00010 ** http://oss.sgi.com/projects/FreeB
00011 **
00012 ** Note that, as provided in the License, the Software is distributed on an
00013 ** "AS IS" basis, with ALL EXPRESS AND IMPLIED WARRANTIES AND CONDITIONS
00014 ** DISCLAIMED, INCLUDING, WITHOUT LIMITATION, ANY IMPLIED WARRANTIES AND
00015 ** CONDITIONS OF MERCHANTABILITY, SATISFACTORY QUALITY, FITNESS FOR A
00016 ** PARTICULAR PURPOSE, AND NON-INFRINGEMENT.
00017 **
00018 ** Original Code. The Original Code is: OpenGL Sample Implementation,
00019 ** Version 1.2.1, released January 26, 2000, developed by Silicon Graphics,
00020 ** Inc. The Original Code is Copyright (c) 1991-2000 Silicon Graphics, Inc.
00021 ** Copyright in any portions created by third parties is as indicated
00022 ** elsewhere herein. All Rights Reserved.
00023 **
00024 ** Additional Notice Provisions: The application programming interfaces
00025 ** established by SGI in conjunction with the Original Code are The
00026 ** OpenGL(R) Graphics System: A Specification (Version 1.2.1), released
00027 ** April 1, 1999; The OpenGL(R) Graphics System Utility Library (Version
00028 ** 1.3), released November 4, 1998; and OpenGL(R) Graphics with the X
00029 ** Window System(R) (Version 1.3), released October 19, 1998. This software
00030 ** was created using the OpenGL(R) version 1.2.1 Sample Implementation
00031 ** published by SGI, but has not been independently verified as being
00032 ** compliant with the OpenGL(R) version 1.2.1 Specification.
00033 */
00034 
00035 /*
00036  * sorter.c++
00037  *
00038  * $Date: 2006-03-12 00:07:02 +0000 (Sun, 12 Mar 2006) $ $Revision: 1.1 $
00039  * $Header: /cygdrive/c/RCVS/CVS/ReactOS/reactos/lib/glu32/libnurbs/internals/sorter.cc,v 1.1 2004/02/02 16:39:12 navaraf Exp $
00040  */
00041 
00042 #include "glimports.h"
00043 #include "sorter.h"
00044 #include "mystdio.h"
00045 
00046 Sorter::Sorter( int _es )
00047 {
00048     es = _es;
00049 }
00050 
00051 void
00052 Sorter::qsort( void *a, int n )
00053 {
00054     qs1( (char *)a, ((char *)a)+n*es);
00055 }
00056 
00057 int
00058 Sorter::qscmp( char *, char * )
00059 {
00060     dprintf( "Sorter::qscmp: pure virtual called\n" );
00061     return 0;
00062 }
00063 
00064 
00065 void
00066 Sorter::qsexc( char *, char * )
00067 {
00068     dprintf( "Sorter::qsexc: pure virtual called\n" );
00069 }
00070 
00071 
00072 void
00073 Sorter::qstexc( char *, char *, char * )
00074 {
00075     dprintf( "Sorter::qstexc: pure virtual called\n" );
00076 }
00077 
00078 void
00079 Sorter::qs1( char *a,  char *l )
00080 {
00081     char *i, *j;
00082     char    *lp, *hp;
00083     int c;
00084     unsigned int n;
00085 
00086 start:
00087     if((n=l-a) <= (unsigned int)es)
00088         return;
00089     n = es * (n / (2*es));
00090     hp = lp = a+n;
00091     i = a;
00092     j = l-es;
00093     while(1) {
00094     if(i < lp) {
00095         if((c = qscmp(i, lp)) == 0) {
00096         qsexc(i, lp -= es);
00097         continue;
00098         }
00099         if(c < 0) {
00100         i += es;
00101         continue;
00102         }
00103     }
00104 
00105 loop:
00106     if(j > hp) {
00107         if((c = qscmp(hp, j)) == 0) {
00108         qsexc(hp += es, j);
00109         goto loop;
00110         }
00111         if(c > 0) {
00112         if(i == lp) {
00113             qstexc(i, hp += es, j);
00114             i = lp += es;
00115             goto loop;
00116         }
00117         qsexc(i, j);
00118         j -= es;
00119         i += es;
00120         continue;
00121         }
00122         j -= es;
00123         goto loop;
00124     }
00125 
00126     if(i == lp) {
00127         if(lp-a >= l-hp) {
00128         qs1(hp+es, l);
00129         l = lp;
00130         } else {
00131         qs1(a, lp);
00132         a = hp+es;
00133         }
00134         goto start;
00135     }
00136 
00137     qstexc(j, lp -= es, i);
00138     j = hp -= es;
00139     }
00140 }
00141 

Generated on Sat May 26 2012 04:22:18 for ReactOS by doxygen 1.7.6.1

ReactOS is a registered trademark or a trademark of ReactOS Foundation in the United States and other countries.