⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 array.hpp

📁 mysql-5.0.22.tar.gz源码包
💻 HPP
字号:
/* Copyright (C) 2003 MySQL AB   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 ARRAY_HPP#define ARRAY_HPP#include "ArrayPool.hpp"#include <pc.hpp>#include <ErrorReporter.hpp>/** * Template class used for implementing an *   array of object retreived from a pool */template <class T>class Array {public:  Array(ArrayPool<T> & thePool);  /**   * Allocate an <b>n</b> objects from pool   *   These can now be addressed with 0 <= ptr.i < n   */  bool seize(Uint32 i);  /**   * Release all object from array   */  void release();  /**   * Return current size of array   */  Uint32 getSize() const;  /**   * empty   */  inline bool empty() const { return sz == 0;}  /**   *  Update i & p value according to <b>i</b>   */  void getPtr(Ptr<T> &, Uint32 i) const;  /**   * Update p value for ptr according to i value    */  void getPtr(Ptr<T> &) const ;    /**   * Get pointer for i value   */  T * getPtr(Uint32 i) const;  private:  Uint32 base, sz;  ArrayPool<T> & thePool;};  template<class T>inlineArray<T>::Array(ArrayPool<T> & _pool)  :  thePool(_pool){  sz = 0;  base = RNIL;}template<class T>inlineboolArray<T>::seize(Uint32 n){  if(base == RNIL && n > 0){    base = thePool.seizeN(n);    if(base != RNIL){      sz = n;      return true;    }    return false;  }  ErrorReporter::handleAssert("Array<T>::seize failed", __FILE__, __LINE__);  return false;}template<class T>inlinevoid Array<T>::release(){  if(base != RNIL){    thePool.releaseN(base, sz);    sz = 0;    base = RNIL;    return;  }}template<class T>inlineUint32 Array<T>::getSize() const {  return sz;}template <class T>inlinevoid Array<T>::getPtr(Ptr<T> & p, Uint32 i) const {  p.i = i;#ifdef ARRAY_GUARD  if(i < sz && base != RNIL){    p.p = thePool.getPtr(i + base);    return;  } else {  ErrorReporter::handleAssert("Array::getPtr failed", __FILE__, __LINE__);  }#endif  p.p = thePool.getPtr(i + base);}template<class T>inlinevoidArray<T>::getPtr(Ptr<T> & ptr) const {#ifdef ARRAY_GUARD  if(ptr.i < sz && base != RNIL){    ptr.p = thePool.getPtr(ptr.i + base);    return;  } else {    ErrorReporter::handleAssert("Array<T>::getPtr failed", __FILE__, __LINE__);  }#endif  ptr.p = thePool.getPtr(ptr.i + base);}template<class T>inlineT * Array<T>::getPtr(Uint32 i) const {#ifdef ARRAY_GUARD  if(i < sz && base != RNIL){    return thePool.getPtr(i + base);  } else {    ErrorReporter::handleAssert("Array<T>::getPtr failed", __FILE__, __LINE__);  }#endif  return thePool.getPtr(i + base);}#endif

⌨️ 快捷键说明

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