Heap.h
上传用户:lin85885
上传日期:2013-04-27
资源大小:796k
文件大小:1k
源码类别:

3D图形编程

开发平台:

Visual C++

  1. #ifndef HEAP_H_INCLUDED // -*- C++ -*-
  2. #define HEAP_H_INCLUDED
  3. #include "Array.h"
  4. #define NOT_IN_HEAP -47
  5. //
  6. //
  7. // This file extracted from Terra
  8. //
  9. //
  10. class Heapable
  11. {
  12. private:
  13.     int token;
  14. public:
  15.     Heapable() { notInHeap(); }
  16. int vert[2];
  17. float cost;
  18. float newposition[3];
  19.     inline int isInHeap() { return token!=NOT_IN_HEAP; }
  20.     inline void notInHeap() { token = NOT_IN_HEAP; }
  21.     inline int getHeapPos() { return token; }
  22.     inline void setHeapPos(int t) { token=t; }
  23. };
  24. class heap_node {
  25. public:
  26.     float import;
  27.     Heapable *obj;
  28.     heap_node() { obj=NULL; import=0.0; }
  29.     heap_node(Heapable *t, float i=0.0) { obj=t; import=i; }
  30.     heap_node(const heap_node& h) { import=h.import; obj=h.obj; }
  31. };
  32. class Heap : public array<heap_node> {
  33.     //
  34.     // The actual size of the heap.  array::length()
  35.     // simply returns the amount of allocated space
  36.     int size;
  37.     void swap(int i, int j);
  38.     int parent(int i) { return (i-1)/2; }
  39.     int left(int i) { return 2*i+1; }
  40.     int right(int i) { return 2*i+2; }
  41.     void upheap(int i);
  42.     void downheap(int i);
  43. public:
  44.     Heap() { size=0; }
  45.     Heap(int s) : array<heap_node>(s) { size=0; }
  46.     void insert(Heapable *, float);
  47.     void update(Heapable *, float);
  48.     heap_node *extract();
  49.     heap_node *top() { return size<1 ? (heap_node *)NULL : &ref(0); }
  50.     heap_node *kill(int i);
  51. };
  52. // HEAP_H_INCLUDED
  53. #endif