CArray.hpp
上传用户:romrleung
上传日期:2022-05-23
资源大小:18897k
文件大小:3k
源码类别:

MySQL数据库

开发平台:

Visual C++

  1. /* Copyright (C) 2003 MySQL AB
  2.    This program is free software; you can redistribute it and/or modify
  3.    it under the terms of the GNU General Public License as published by
  4.    the Free Software Foundation; either version 2 of the License, or
  5.    (at your option) any later version.
  6.    This program is distributed in the hope that it will be useful,
  7.    but WITHOUT ANY WARRANTY; without even the implied warranty of
  8.    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  9.    GNU General Public License for more details.
  10.    You should have received a copy of the GNU General Public License
  11.    along with this program; if not, write to the Free Software
  12.    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA */
  13. #ifndef CARRAY_HPP
  14. #define CARRAY_HPP
  15. /**
  16.  * Template class used for implementing an c - array
  17.  */
  18. template <class T>
  19. class CArray {
  20. public:
  21.   CArray();
  22.   ~CArray();
  23.   
  24.   /**
  25.    * Set the size of the pool
  26.    *
  27.    * Note, can currently only be called once
  28.    */
  29.   bool setSize(Uint32 noOfElements);
  30.   /**
  31.    * Get size
  32.    */
  33.   Uint32 getSize() const;
  34.   
  35.   /**
  36.    * Update p value for ptr according to i value 
  37.    */
  38.   void getPtr(Ptr<T> &) const;
  39.   
  40.   /**
  41.    * Get pointer for i value
  42.    */
  43.   T * getPtr(Uint32 i) const;
  44.   /**
  45.    * Update p & i value for ptr according to <b>i</b> value 
  46.    */
  47.   void getPtr(Ptr<T> &, Uint32 i) const;
  48. private:
  49.   Uint32 size;
  50.   T * theArray;
  51. };
  52. template <class T>
  53. inline
  54. CArray<T>::CArray(){
  55.   size = 0;
  56.   theArray = 0;
  57. }
  58. template <class T>
  59. inline
  60. CArray<T>::~CArray(){
  61.   if(theArray != 0){
  62.     NdbMem_Free(theArray);
  63.     theArray = 0;
  64.   }
  65. }
  66. /**
  67.  * Set the size of the pool
  68.  *
  69.  * Note, can currently only be called once
  70.  */
  71. template <class T>
  72. inline
  73. bool
  74. CArray<T>::setSize(Uint32 noOfElements){
  75.   if(size == noOfElements)
  76.     return true;
  77.   
  78.   theArray = (T *)NdbMem_Allocate(noOfElements * sizeof(T));
  79.   if(theArray == 0)
  80.     return false;
  81.   size = noOfElements;
  82.   return true;
  83. }
  84. template<class T>
  85. inline
  86. Uint32
  87. CArray<T>::getSize() const {
  88.   return size;
  89. }
  90. template <class T>
  91. inline
  92. void
  93. CArray<T>::getPtr(Ptr<T> & ptr) const {
  94.   const Uint32 i = ptr.i;
  95.   if(i < size){
  96.     ptr.p = &theArray[i];
  97.     return;
  98.   } else {
  99.     ErrorReporter::handleAssert("CArray<T>::getPtr", __FILE__, __LINE__);
  100.   }
  101. }
  102.   
  103. template <class T>
  104. inline
  105. T * 
  106. CArray<T>::getPtr(Uint32 i) const {
  107.   if(i < size){
  108.     return &theArray[i];
  109.   } else {
  110.     ErrorReporter::handleAssert("CArray<T>::getPtr", __FILE__, __LINE__);
  111.     return 0;
  112.   }
  113. }
  114. template <class T>
  115. inline
  116. void
  117. CArray<T>::getPtr(Ptr<T> & ptr, Uint32 i) const {
  118.   ptr.i = i;
  119.   if(i < size){
  120.     ptr.p = &theArray[i];
  121.     return;
  122.   } else {
  123.     ErrorReporter::handleAssert("CArray<T>::getPtr", __FILE__, __LINE__);
  124.   }
  125. }
  126. #endif