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

priorityq-sort.h
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 ** Author: Eric Veach, July 1994.
00037 **
00038 ** $Date: 2007-10-19 23:21:45 +0000 (Fri, 19 Oct 2007) $ $Revision: 1.1 $
00039 ** $Header: /cygdrive/c/RCVS/CVS/ReactOS/reactos/lib/glu32/libtess/priorityq-sort.h,v 1.1 2004/02/02 16:39:15 navaraf Exp $
00040 */
00041 
00042 #ifndef __priorityq_sort_h_
00043 #define __priorityq_sort_h_
00044 
00045 #include "priorityq-heap.h"
00046 
00047 #undef PQkey
00048 #undef PQhandle
00049 #undef PriorityQ
00050 #undef pqNewPriorityQ
00051 #undef pqDeletePriorityQ
00052 #undef pqInit
00053 #undef pqInsert
00054 #undef pqMinimum
00055 #undef pqExtractMin
00056 #undef pqDelete
00057 #undef pqIsEmpty
00058 
00059 /* Use #define's so that another heap implementation can use this one */
00060 
00061 #define PQkey           PQSortKey
00062 #define PQhandle        PQSortHandle
00063 #define PriorityQ       PriorityQSort
00064 
00065 #define pqNewPriorityQ(leq) __gl_pqSortNewPriorityQ(leq)
00066 #define pqDeletePriorityQ(pq)   __gl_pqSortDeletePriorityQ(pq)
00067 
00068 /* The basic operations are insertion of a new key (pqInsert),
00069  * and examination/extraction of a key whose value is minimum
00070  * (pqMinimum/pqExtractMin).  Deletion is also allowed (pqDelete);
00071  * for this purpose pqInsert returns a "handle" which is supplied
00072  * as the argument.
00073  *
00074  * An initial heap may be created efficiently by calling pqInsert
00075  * repeatedly, then calling pqInit.  In any case pqInit must be called
00076  * before any operations other than pqInsert are used.
00077  *
00078  * If the heap is empty, pqMinimum/pqExtractMin will return a NULL key.
00079  * This may also be tested with pqIsEmpty.
00080  */
00081 #define pqInit(pq)      __gl_pqSortInit(pq)
00082 #define pqInsert(pq,key)    __gl_pqSortInsert(pq,key)
00083 #define pqMinimum(pq)       __gl_pqSortMinimum(pq)
00084 #define pqExtractMin(pq)    __gl_pqSortExtractMin(pq)
00085 #define pqDelete(pq,handle) __gl_pqSortDelete(pq,handle)
00086 #define pqIsEmpty(pq)       __gl_pqSortIsEmpty(pq)
00087 
00088 
00089 /* Since we support deletion the data structure is a little more
00090  * complicated than an ordinary heap.  "nodes" is the heap itself;
00091  * active nodes are stored in the range 1..pq->size.  When the
00092  * heap exceeds its allocated size (pq->max), its size doubles.
00093  * The children of node i are nodes 2i and 2i+1.
00094  *
00095  * Each node stores an index into an array "handles".  Each handle
00096  * stores a key, plus a pointer back to the node which currently
00097  * represents that key (ie. nodes[handles[i].node].handle == i).
00098  */
00099 
00100 typedef PQHeapKey PQkey;
00101 typedef PQHeapHandle PQhandle;
00102 typedef struct PriorityQ PriorityQ;
00103 
00104 struct PriorityQ {
00105   PriorityQHeap *heap;
00106   PQkey     *keys;
00107   PQkey     **order;
00108   PQhandle  size, max;
00109   int       initialized;
00110   int       (*leq)(PQkey key1, PQkey key2);
00111 };
00112 
00113 PriorityQ   *pqNewPriorityQ( int (*leq)(PQkey key1, PQkey key2) );
00114 void        pqDeletePriorityQ( PriorityQ *pq );
00115 
00116 int     pqInit( PriorityQ *pq );
00117 PQhandle    pqInsert( PriorityQ *pq, PQkey key );
00118 PQkey       pqExtractMin( PriorityQ *pq );
00119 void        pqDelete( PriorityQ *pq, PQhandle handle );
00120 
00121 PQkey       pqMinimum( PriorityQ *pq );
00122 int     pqIsEmpty( PriorityQ *pq );
00123 
00124 #endif

Generated on Sat May 26 2012 04:22:20 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.