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

📄 ndbimpl.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_IMPL_HPP#define NDB_IMPL_HPP#include <ndb_global.h>#include <Ndb.hpp>#include <NdbOut.hpp>#include <NdbError.hpp>#include <NdbCondition.h>#include <NdbReceiver.hpp>#include <NdbOperation.hpp>#include <kernel/ndb_limits.h>#include <NdbTick.h>#include "ndb_cluster_connection_impl.hpp"#include "NdbDictionaryImpl.hpp"#include "ObjectMap.hpp"template <class T>struct Ndb_free_list_t {  Ndb_free_list_t();  ~Ndb_free_list_t();    void fill(Ndb*, Uint32 cnt);  T* seize(Ndb*);  void release(T*);  void clear();  Uint32 get_sizeof() const { return sizeof(T); }  T * m_free_list;  Uint32 m_alloc_cnt, m_free_cnt;};/** * Private parts of the Ndb object (corresponding to Ndb.hpp in public API) */class NdbImpl {public:  NdbImpl(Ndb_cluster_connection *, Ndb&);  ~NdbImpl();  Ndb_cluster_connection_impl &m_ndb_cluster_connection;  NdbDictionaryImpl m_dictionary;  // Ensure good distribution of connects  Uint32 theCurrentConnectIndex;  Ndb_cluster_connection_node_iter m_node_iter;  NdbObjectIdMap theNdbObjectIdMap;  Uint32 theNoOfDBnodes; // The number of DB nodes    Uint8 theDBnodes[MAX_NDB_NODES]; // The node number of the DB nodes // 1 indicates to release all connections to node   Uint32 the_release_ind[MAX_NDB_NODES];  NdbWaiter             theWaiter;  int m_optimized_node_selection;  BaseString m_dbname; // Database name  BaseString m_schemaname; // Schema name  BaseString m_prefix; // Buffer for preformatted internal name <db>/<schema>/  void update_prefix()  {    m_prefix.assfmt("%s%c%s%c", m_dbname.c_str(), table_name_separator,                    m_schemaname.c_str(), table_name_separator);  }  /**   * NOTE free lists must be _after_ theNdbObjectIdMap take   *   assure that destructors are run in correct order   * NOTE these has to be in this specific order to make destructor run in   *      correct order   */  Ndb_free_list_t<NdbRecAttr> theRecAttrIdleList;    Ndb_free_list_t<NdbApiSignal> theSignalIdleList;  Ndb_free_list_t<NdbLabel> theLabelList;  Ndb_free_list_t<NdbBranch> theBranchList;  Ndb_free_list_t<NdbSubroutine> theSubroutineList;  Ndb_free_list_t<NdbCall> theCallList;  Ndb_free_list_t<NdbBlob> theNdbBlobIdleList;  Ndb_free_list_t<NdbReceiver> theScanList;  Ndb_free_list_t<NdbIndexScanOperation> theScanOpIdleList;  Ndb_free_list_t<NdbOperation>  theOpIdleList;    Ndb_free_list_t<NdbIndexOperation> theIndexOpIdleList;  Ndb_free_list_t<NdbTransaction> theConIdleList; };#ifdef VM_TRACE#define TRACE_DEBUG(x) ndbout << x << endl;#else#define TRACE_DEBUG(x)#endif#define CHECK_STATUS_MACRO \   {if (checkInitState() == -1) { theError.code = 4100; return -1;}}#define CHECK_STATUS_MACRO_VOID \   {if (checkInitState() == -1) { theError.code = 4100; return;}}#define CHECK_STATUS_MACRO_ZERO \   {if (checkInitState() == -1) { theError.code = 4100; return 0;}}#define CHECK_STATUS_MACRO_NULL \   {if (checkInitState() == -1) { theError.code = 4100; return NULL;}}inlinevoid *Ndb::int2void(Uint32 val){  return theImpl->theNdbObjectIdMap.getObject(val);}inlineNdbReceiver *Ndb::void2rec(void* val){  return (NdbReceiver*)val;}inlineNdbTransaction *Ndb::void2con(void* val){  return (NdbTransaction*)val;}inlineNdbOperation*Ndb::void2rec_op(void* val){  return (NdbOperation*)(void2rec(val)->getOwner());}inlineNdbIndexOperation*Ndb::void2rec_iop(void* val){  return (NdbIndexOperation*)(void2rec(val)->getOwner());}inline NdbTransaction * NdbReceiver::getTransaction(){   return ((NdbOperation*)m_owner)->theNdbCon;}inlineintNdb::checkInitState(){  theError.code = 0;  if (theInitState != Initialised)    return -1;  return 0;}Uint32 convertEndian(Uint32 Data);enum LockMode {   Read,   Update,  Insert,  Delete };template<class T>inlineNdb_free_list_t<T>::Ndb_free_list_t(){  m_free_list= 0;   m_alloc_cnt= m_free_cnt= 0; }template<class T>inlineNdb_free_list_t<T>::~Ndb_free_list_t(){  clear();}    template<class T>inlinevoidNdb_free_list_t<T>::fill(Ndb* ndb, Uint32 cnt){  if (m_free_list == 0)  {    m_free_cnt++;    m_alloc_cnt++;    m_free_list = new T(ndb);  }  while(m_alloc_cnt < cnt)  {    T* obj= new T(ndb);    if(obj == 0)      return;        obj->next(m_free_list);    m_free_cnt++;    m_alloc_cnt++;    m_free_list = obj;  }}template<class T>inlineT*Ndb_free_list_t<T>::seize(Ndb* ndb){  T* tmp = m_free_list;  if (tmp)  {    m_free_list = (T*)tmp->next();    tmp->next(NULL);    m_free_cnt--;    return tmp;  }    if((tmp = new T(ndb)))  {    m_alloc_cnt++;  }    return tmp;}template<class T>inlinevoidNdb_free_list_t<T>::release(T* obj){  obj->next(m_free_list);  m_free_list = obj;  m_free_cnt++;}template<class T>inlinevoidNdb_free_list_t<T>::clear(){  T* obj = m_free_list;  while(obj)  {    T* curr = obj;    obj = (T*)obj->next();    delete curr;    m_alloc_cnt--;  }}#endif

⌨️ 快捷键说明

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