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

📄 vector.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 NDB_VECTOR_HPP#define NDB_VECTOR_HPP#include <ndb_global.h>#include <NdbMutex.h>template<class T>struct Vector {public:  Vector(int sz = 10);  ~Vector();  T& operator[](unsigned i);  const T& operator[](unsigned i) const;  unsigned size() const { return m_size; };    void push_back(const T &);  T& back();    void erase(unsigned index);    void clear();    void fill(unsigned new_size, T & obj);  Vector<T>& operator=(const Vector<T>&);  T* getBase() { return m_items;}  const T* getBase() const { return m_items;}private:  T * m_items;  unsigned m_size;  unsigned m_incSize;  unsigned m_arraySize;};template<class T>Vector<T>::Vector(int i){  m_items = new T[i];  m_size = 0;  m_arraySize = i;  m_incSize = 50;}template<class T>Vector<T>::~Vector(){  delete[] m_items;  // safety for placement new usage  m_items = 0;  m_size = 0;  m_arraySize = 0;}template<class T>T &Vector<T>::operator[](unsigned i){  if(i >= m_size)    abort();  return m_items[i];}template<class T>const T &Vector<T>::operator[](unsigned i) const {  if(i >= m_size)    abort();  return m_items[i];}template<class T>T &Vector<T>::back(){  return (* this)[m_size - 1];}template<class T>voidVector<T>::push_back(const T & t){  if(m_size == m_arraySize){    T * tmp = new T [m_arraySize + m_incSize];    for (unsigned k = 0; k < m_size; k++)      tmp[k] = m_items[k];    delete[] m_items;    m_items = tmp;    m_arraySize = m_arraySize + m_incSize;  }  m_items[m_size] = t;  m_size++;}template<class T>voidVector<T>::erase(unsigned i){  if(i >= m_size)    abort();    for (unsigned k = i; k + 1 < m_size; k++)    m_items[k] = m_items[k + 1];  m_size--;}template<class T>voidVector<T>::clear(){  m_size = 0;}template<class T>void Vector<T>::fill(unsigned new_size, T & obj){  while(m_size <= new_size)    push_back(obj);}template<class T>Vector<T>& Vector<T>::operator=(const Vector<T>& obj){  if(this != &obj){    clear();    for(size_t i = 0; i<obj.size(); i++){      push_back(obj[i]);    }  }  return * this;}template<class T>struct MutexVector : public NdbLockable {  MutexVector(int sz = 10);  ~MutexVector();  T& operator[](unsigned i);  const T& operator[](unsigned i) const;  unsigned size() const { return m_size; };    void push_back(const T &);  void push_back(const T &, bool lockMutex);  T& back();    void erase(unsigned index);  void erase(unsigned index, bool lockMutex);  void clear();  void clear(bool lockMutex);  void fill(unsigned new_size, T & obj);private:  T * m_items;  unsigned m_size;  unsigned m_incSize;  unsigned m_arraySize;};template<class T>MutexVector<T>::MutexVector(int i){  m_items = new T[i];  m_size = 0;  m_arraySize = i;  m_incSize = 50;}template<class T>MutexVector<T>::~MutexVector(){  delete[] m_items;  // safety for placement new usage  m_items = 0;  m_size = 0;  m_arraySize = 0;}template<class T>T &MutexVector<T>::operator[](unsigned i){  if(i >= m_size)    abort();  return m_items[i];}template<class T>const T &MutexVector<T>::operator[](unsigned i) const {  if(i >= m_size)    abort();  return m_items[i];}template<class T>T &MutexVector<T>::back(){  return (* this)[m_size - 1];}template<class T>voidMutexVector<T>::push_back(const T & t){  lock();  if(m_size == m_arraySize){    T * tmp = new T [m_arraySize + m_incSize];    for (unsigned k = 0; k < m_size; k++)      tmp[k] = m_items[k];    delete[] m_items;    m_items = tmp;    m_arraySize = m_arraySize + m_incSize;  }  m_items[m_size] = t;  m_size++;  unlock();}template<class T>voidMutexVector<T>::push_back(const T & t, bool lockMutex){  if(lockMutex)     lock();  if(m_size == m_arraySize){    T * tmp = new T [m_arraySize + m_incSize];    for (unsigned k = 0; k < m_size; k++)      tmp[k] = m_items[k];    delete[] m_items;    m_items = tmp;    m_arraySize = m_arraySize + m_incSize;  }  m_items[m_size] = t;  m_size++;  if(lockMutex)    unlock();}template<class T>voidMutexVector<T>::erase(unsigned i){  if(i >= m_size)    abort();    lock();  for (unsigned k = i; k + 1 < m_size; k++)    m_items[k] = m_items[k + 1];  m_size--;  unlock();}template<class T>voidMutexVector<T>::erase(unsigned i, bool _lock){  if(i >= m_size)    abort();    if(_lock)     lock();  for (unsigned k = i; k + 1 < m_size; k++)    m_items[k] = m_items[k + 1];  m_size--;  if(_lock)     unlock();}template<class T>voidMutexVector<T>::clear(){  lock();  m_size = 0;  unlock();}template<class T>voidMutexVector<T>::clear(bool l){  if(l) lock();  m_size = 0;  if(l) unlock();}template<class T>void MutexVector<T>::fill(unsigned new_size, T & obj){  while(m_size <= new_size)    push_back(obj);}#endif

⌨️ 快捷键说明

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