pool.hpp

来自「基于sip协议的网络电话源码」· HPP 代码 · 共 279 行

HPP
279
字号
/* $Id: pool.hpp 127 2006-01-30 18:40:05Z bennylp $ *//*  * Copyright (C)2003-2006 Benny Prijono <benny@prijono.org> * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA  */#ifndef __PJPP_POOL_HPP__#define __PJPP_POOL_HPP__#include <pj/pool.h>class Pj_Pool;class Pj_Caching_Pool;//// Base class for all Pjlib objects//class Pj_Object{public:    void *operator new(unsigned int class_size, Pj_Pool *pool);    void *operator new(unsigned int class_size, Pj_Pool &pool);    void operator delete(void*)    {    }    void operator delete(void*, Pj_Pool*)    {    }    void operator delete(void*, Pj_Pool&)    {    }    //    // Inline implementations at the end of this file.    //private:    // Can not use normal new operator; must use pool.    // e.g.:    //   obj = new(pool) Pj_The_Object(pool, ...);    //    void *operator new(unsigned int)    {}};//// Pool.//class Pj_Pool : public Pj_Object{public:    //    // Default constructor, initializes internal pool to NULL.    // Application must call attach() some time later.    //    Pj_Pool()        : p_(NULL)    {    }    //    // Create pool.    //    Pj_Pool(Pj_Caching_Pool &caching_pool,            pj_size_t initial_size,             pj_size_t increment_size,             const char *name = NULL,             pj_pool_callback *callback = NULL);    //    // Construct from existing pool.    //    explicit Pj_Pool(pj_pool_t *pool)        : p_(pool)    {    }    //    // Attach existing pool.    //    void attach(pj_pool_t *pool)    {        p_ = pool;    }    //    // Destructor.    //    // Release pool back to factory. Remember: if you delete pool, then     // make sure that all objects that have been allocated from this pool    // have been properly destroyed.    //    // This is where C++ is trickier than plain C!!    //    ~Pj_Pool()    {        if (p_)	    pj_pool_release(p_);    }    //    // Get name.    //    const char *getobjname() const    {	return pj_pool_getobjname(p_);    }    //    // You can cast Pj_Pool to pj_pool_t*    //    operator pj_pool_t*()    {	return p_;    }    //    // Get pjlib compatible pool object.    //    pj_pool_t *pool_()    {	return p_;    }    //    // Get pjlib compatible pool object.    //    const pj_pool_t *pool_() const    {	return p_;    }    //    // Get pjlib compatible pool object.    //    pj_pool_t *pj_pool_t_()    {	return p_;    }    //    // Reset pool.    //    void reset()    {	pj_pool_reset(p_);    }    //    // Get current capacity.    //    pj_size_t get_capacity()    {	pj_pool_get_capacity(p_);    }    //    // Get current total bytes allocated from the pool.    //    pj_size_t get_used_size()    {	pj_pool_get_used_size(p_);    }    //    // Allocate.    //    void *alloc(pj_size_t size)    {	return pj_pool_alloc(p_, size);    }    //    // Allocate elements and zero fill the memory.    //    void *calloc(pj_size_t count, pj_size_t elem)    {	return pj_pool_calloc(p_, count, elem);    }    //    // Allocate and zero fill memory.    //    void *zalloc(pj_size_t size)    {        return pj_pool_zalloc(p_, size);    }private:    pj_pool_t *p_;};//// Caching pool.//class Pj_Caching_Pool{public:    //    // Construct caching pool.    //    Pj_Caching_Pool( pj_size_t cache_capacity = 0,	             const pj_pool_factory_policy *pol=&pj_pool_factory_default_policy)    {	pj_caching_pool_init(&cp_, pol, cache_capacity);    }    //    // Destroy caching pool.    //    ~Pj_Caching_Pool()    {	pj_caching_pool_destroy(&cp_);    }    //    // Create pool.    //    pj_pool_t *create_pool( pj_size_t initial_size,                             pj_size_t increment_size,                             const char *name = NULL,                             pj_pool_callback *callback = NULL)    {	return (pj_pool_t*)(*cp_.factory.create_pool)(&cp_.factory, name,                                                      initial_size,                                                      increment_size,                                                      callback);    }private:    pj_caching_pool cp_;};//// Inlines for Pj_Object//inline void *Pj_Object::operator new(unsigned int class_size, Pj_Pool *pool){    return pool->alloc(class_size);}inline void *Pj_Object::operator new(unsigned int class_size, Pj_Pool &pool){    return pool.alloc(class_size);}//// Inlines for Pj_Pool//inline Pj_Pool::Pj_Pool( Pj_Caching_Pool &caching_pool,                         pj_size_t initial_size,                          pj_size_t increment_size,                          const char *name,                          pj_pool_callback *callback){    p_ = caching_pool.create_pool(initial_size, increment_size, name,                                  callback);}#endif	/* __PJPP_POOL_HPP__ */

⌨️ 快捷键说明

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