heapbuf.h

来自「*** *** *** *** *** *** *** *** *** *** 」· C头文件 代码 · 共 51 行

H
51
字号
#ifndef _WDL_HEAPBUF_H_
#define _WDL_HEAPBUF_H_

class WDL_HeapBuf
{
  public:
    WDL_HeapBuf(int granul=64) : m_granul(granul), m_buf(NULL), m_alloc(0), m_size(0)
    {
    }
    ~WDL_HeapBuf()
    {
      Resize(0);
    }

    void *Get() { return m_buf; }
    int GetSize() { return m_size; }

    void *Resize(int newsize)
    {
      if (!newsize) // special case, free all when resized to 0
      {
        free(m_buf);
        m_buf=NULL;
        m_alloc=0;
      }
      else if (newsize > m_alloc || newsize < m_alloc - (m_granul<<2)) // if we grew over our allocation, or shrunk too far down we should resize down
      {
        int newalloc = (newsize > m_alloc) ? (newsize + m_granul) : newsize;
        void *nbuf=realloc(m_buf,newalloc);
        if (!nbuf) return 0; // ack, error!

        m_buf=nbuf;
        m_alloc=newalloc;
      }

      m_size=newsize;

      return m_buf;
    }


  private:
    void *m_buf;
    int m_alloc;
    int m_size;
    int m_granul;
};


#endif

⌨️ 快捷键说明

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