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-heap.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-heap.h,v 1.1 2004/02/02 16:39:15 navaraf Exp $
00040 */
00041 
00042 #ifndef __priorityq_heap_h_
00043 #define __priorityq_heap_h_
00044 
00045 /* Use #define's so that another heap implementation can use this one */
00046 
00047 #define PQkey           PQHeapKey
00048 #define PQhandle        PQHeapHandle
00049 #define PriorityQ       PriorityQHeap
00050 
00051 #define pqNewPriorityQ(leq) __gl_pqHeapNewPriorityQ(leq)
00052 #define pqDeletePriorityQ(pq)   __gl_pqHeapDeletePriorityQ(pq)
00053 
00054 /* The basic operations are insertion of a new key (pqInsert),
00055  * and examination/extraction of a key whose value is minimum
00056  * (pqMinimum/pqExtractMin).  Deletion is also allowed (pqDelete);
00057  * for this purpose pqInsert returns a "handle" which is supplied
00058  * as the argument.
00059  *
00060  * An initial heap may be created efficiently by calling pqInsert
00061  * repeatedly, then calling pqInit.  In any case pqInit must be called
00062  * before any operations other than pqInsert are used.
00063  *
00064  * If the heap is empty, pqMinimum/pqExtractMin will return a NULL key.
00065  * This may also be tested with pqIsEmpty.
00066  */
00067 #define pqInit(pq)      __gl_pqHeapInit(pq)
00068 #define pqInsert(pq,key)    __gl_pqHeapInsert(pq,key)
00069 #define pqMinimum(pq)       __gl_pqHeapMinimum(pq)
00070 #define pqExtractMin(pq)    __gl_pqHeapExtractMin(pq)
00071 #define pqDelete(pq,handle) __gl_pqHeapDelete(pq,handle)
00072 #define pqIsEmpty(pq)       __gl_pqHeapIsEmpty(pq)
00073 
00074 
00075 /* Since we support deletion the data structure is a little more
00076  * complicated than an ordinary heap.  "nodes" is the heap itself;
00077  * active nodes are stored in the range 1..pq->size.  When the
00078  * heap exceeds its allocated size (pq->max), its size doubles.
00079  * The children of node i are nodes 2i and 2i+1.
00080  *
00081  * Each node stores an index into an array "handles".  Each handle
00082  * stores a key, plus a pointer back to the node which currently
00083  * represents that key (ie. nodes[handles[i].node].handle == i).
00084  */
00085 
00086 typedef void *PQkey;
00087 typedef long PQhandle;
00088 typedef struct PriorityQ PriorityQ;
00089 
00090 typedef struct { PQhandle handle; } PQnode;
00091 typedef struct { PQkey key; PQhandle node; } PQhandleElem;
00092 
00093 struct PriorityQ {
00094   PQnode    *nodes;
00095   PQhandleElem  *handles;
00096   long      size, max;
00097   PQhandle  freeList;
00098   int       initialized;
00099   int       (*leq)(PQkey key1, PQkey key2);
00100 };
00101 
00102 PriorityQ   *pqNewPriorityQ( int (*leq)(PQkey key1, PQkey key2) );
00103 void        pqDeletePriorityQ( PriorityQ *pq );
00104 
00105 void        pqInit( PriorityQ *pq );
00106 PQhandle    pqInsert( PriorityQ *pq, PQkey key );
00107 PQkey       pqExtractMin( PriorityQ *pq );
00108 void        pqDelete( PriorityQ *pq, PQhandle handle );
00109 
00110 
00111 #define __gl_pqHeapMinimum(pq)  ((pq)->handles[(pq)->nodes[1].handle].key)
00112 #define __gl_pqHeapIsEmpty(pq)  ((pq)->size == 0)
00113 
00114 #endif

Generated on Sun May 27 2012 04:23:50 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.