cartesianheap.h

来自「hoard内存管理器」· C头文件 代码 · 共 60 行

H
60
字号
#ifndef _CARTESIANHEAP_H_#define _CARTESIANHEAP_H_//#include "heaplayers.h"//#include "treap.h"// NB: All objects are rounded up to at least the size of a treap node// (around 24 bytes on a 32-bit architecture).template <class SuperHeap>class CartesianHeap : public SuperHeap {  // Provide a freelist wrapper for treap nodes.  class MyTreap : public Treap<size_t, void *> {  public:    // class Node : public PerClassHeap<Treap<size_t, void *>::Node, FreelistHeap<SuperHeap> > {};  };public:  ~CartesianHeap (void) {    // FIX ME    // free everything from the treap.  }  void * malloc (size_t sz) {    // Round sz up.    sz = (sz < sizeof(MyTreap::Node)) ? sizeof(MyTreap::Node) : sz;    MyTreap::Node * n = (MyTreap::Node *) treap.lookupGreater (sz);    if (n != NULL) {      assert (n->getValue() == (void *) n);      void * ptr = n->getValue();      treap.remove (n);      // delete n; // onto a freelist      return ptr;    } else {      return SuperHeap::malloc (sz);    }  }  void free (void * ptr) {    // MyTreap::Node * n = new MyTreap::Node; // from a freelist    // cout << "n = " << (void *) n << endl;    MyTreap::Node * n = (MyTreap::Node *) ptr;    treap.insert (n, getSize(ptr), ptr, (unsigned int) ptr);  }  // Removes a pointer from the treap.  void remove (void * ptr) {    treap.remove ((MyTreap::Node *) ptr);  }    private:  MyTreap treap;};#endif // _CARTESIANHEAP_H_

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?