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

📄 pc.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 PC_H#define PC_H#include "Emulator.hpp"#include <NdbOut.hpp>#include <ndb_limits.h>#ifdef NO_EMULATED_JAM#define jam()#define jamLine(line)#define jamEntry()#define jamEntryLine(line)#else#ifdef NDB_WIN32#define jam() { \  Uint32 tEmulatedJamIndex = theEmulatedJamIndex; \  *(Uint32*)(theEmulatedJam + tEmulatedJamIndex) = __LINE__; \  theEmulatedJamIndex = (tEmulatedJamIndex + 4) & JAM_MASK; }#define jamLine(line) { \  Uint32 tEmulatedJamIndex = theEmulatedJamIndex; \  *(Uint32*)(theEmulatedJam + tEmulatedJamIndex) = line; \  theEmulatedJamIndex = (tEmulatedJamIndex + 4) & JAM_MASK; }#define jamEntry() { \  theEmulatedJamBlockNumber = number(); \  Uint32 tEmulatedJamIndex = theEmulatedJamIndex; \  *(Uint32*)(theEmulatedJam + tEmulatedJamIndex) = \    ((theEmulatedJamBlockNumber << 20) | __LINE__); \  theEmulatedJamIndex = (tEmulatedJamIndex + 4) & JAM_MASK; }#define jamEntryLine(line) { \  theEmulatedJamBlockNumber = number(); \  Uint32 tEmulatedJamIndex = theEmulatedJamIndex; \  *(Uint32*)(theEmulatedJam + tEmulatedJamIndex) = \    ((theEmulatedJamBlockNumber << 20) | line); \  theEmulatedJamIndex = (tEmulatedJamIndex + 4) & JAM_MASK; }#else#define jam() { \  Uint32 tEmulatedJamIndex = theEmulatedJamIndex; \  *(Uint32*)((UintPtr)theEmulatedJam + (Uint32)tEmulatedJamIndex) = __LINE__; \  theEmulatedJamIndex = (tEmulatedJamIndex + 4) & JAM_MASK; }#define jamLine(line) { \  Uint32 tEmulatedJamIndex = theEmulatedJamIndex; \  *(Uint32*)((UintPtr)theEmulatedJam + (Uint32)tEmulatedJamIndex) = line; \  theEmulatedJamIndex = (tEmulatedJamIndex + 4) & JAM_MASK; }#define jamEntry() { \  theEmulatedJamBlockNumber = number(); \  Uint32 tEmulatedJamIndex = theEmulatedJamIndex; \  *(Uint32*)((UintPtr)theEmulatedJam + (Uint32)tEmulatedJamIndex) = \    ((theEmulatedJamBlockNumber << 20) | __LINE__); \  theEmulatedJamIndex = (tEmulatedJamIndex + 4) & JAM_MASK; }#define jamEntryLine(line) { \  theEmulatedJamBlockNumber = number(); \  Uint32 tEmulatedJamIndex = theEmulatedJamIndex; \  *(Uint32*)((UintPtr)theEmulatedJam + (Uint32)tEmulatedJamIndex) = \    ((theEmulatedJamBlockNumber << 20) | line); \  theEmulatedJamIndex = (tEmulatedJamIndex + 4) & JAM_MASK; }#endif#endif#ifndef NDB_OPT#define ptrCheck(ptr, limit, rec) if (ptr.i < (limit)) ptr.p = &rec[ptr.i]; else ptr.p = NULL/** * Sets the p-value of a ptr-struct to be a pointer to record no i   * (where i is the i-value of the ptr-struct) * * @param ptr    ptr-struct with a set i-value  (the p-value in this gets set) * @param limit  max no of records in rec * @param rec    pointer to first record in an array of records */#define ptrCheckGuardErr(ptr, limit, rec, error) {\  UintR TxxzLimit; \  TxxzLimit = (limit); \  UintR TxxxPtr; \  TxxxPtr = ptr.i; \  ptr.p = &rec[TxxxPtr]; \  if (TxxxPtr < (TxxzLimit)) { \    ; \  } else { \    progError(__LINE__, error, __FILE__); \  }}#define ptrAss(ptr, rec) ptr.p = &rec[ptr.i]#define ptrNull(ptr) ptr.p = NULL#define ptrGuardErr(ptr, error) if (ptr.p == NULL) \    progError(__LINE__, error, __FILE__)#define arrGuardErr(ind, size, error) if ((ind) >= (size)) \    progError(__LINE__, error, __FILE__)#else#define ptrCheck(ptr, limit, rec) ptr.p = &rec[ptr.i]#define ptrCheckGuardErr(ptr, limit, rec, error) ptr.p = &rec[ptr.i]#define ptrAss(ptr, rec) ptr.p = &rec[ptr.i]#define ptrNull(ptr) ptr.p = NULL#define ptrGuardErr(ptr, error)#define arrGuardErr(ind, size, error)#endif#define ptrCheckGuard(ptr, limit, rec) \  ptrCheckGuardErr(ptr, limit, rec, NDBD_EXIT_POINTER_NOTINRANGE)#define ptrGuard(ptr) ptrGuardErr(ptr, NDBD_EXIT_POINTER_NOTINRANGE)#define arrGuard(ind, size) arrGuardErr(ind, size, NDBD_EXIT_INDEX_NOTINRANGE)// -------- ERROR INSERT MACROS -------#ifdef ERROR_INSERT#define ERROR_INSERT_VARIABLE UintR cerrorInsert#define ERROR_INSERTED(x) (cerrorInsert == (x))#define SET_ERROR_INSERT_VALUE(x) cerrorInsert = x#define CLEAR_ERROR_INSERT_VALUE cerrorInsert = 0#else#define ERROR_INSERT_VARIABLE typedef void * cerrorInsert // Will generate compiler error if used#define ERROR_INSERTED(x) false#define SET_ERROR_INSERT_VALUE(x)#define CLEAR_ERROR_INSERT_VALUE#endif/* ------------------------------------------------------------------------- *//*       COMMONLY USED CONSTANTS.                                            *//* ------------------------------------------------------------------------- */#define ZFALSE 0#define ZTRUE 1#define ZSET 1#define ZOK 0#define ZNOT_OK 1#define ZCLOSE_FILE 2#define ZNIL 0xffff#define Z8NIL 255/* ------------------------------------------------------------------------- */// Number of fragments stored per node. Should be settable on a table basis// in future version since small tables want small value and large tables// need large value./* ------------------------------------------------------------------------- */#define NO_OF_FRAG_PER_NODE 1#define MAX_FRAG_PER_NODE 8/*** DIH allocates fragments in chunk for fast find of fragment record.* These parameters define chunk size and log of chunk size.*/#define NO_OF_FRAGS_PER_CHUNK 4#define LOG_NO_OF_FRAGS_PER_CHUNK 2/* ---------------------------------------------------------------- */// To avoid synching too big chunks at a time we synch after writing// a certain number of data/UNDO pages. (e.g. 2 MBytes)./* ---------------------------------------------------------------- */#define MAX_PAGES_WITHOUT_SYNCH 64#define MAX_REDO_PAGES_WITHOUT_SYNCH 32/* ------------------------------------------------------------------ */// We have these constants to ensure that we can easily change the// parallelism of node recovery and the amount of scan // operations needed for node recoovery./* ------------------------------------------------------------------ */#define MAX_NO_WORDS_OUTSTANDING_COPY_FRAGMENT 6000#define MAGIC_CONSTANT 56#define NODE_RECOVERY_SCAN_OP_RECORDS \         (4 + ((4*MAX_NO_WORDS_OUTSTANDING_COPY_FRAGMENT)/ \         ((MAGIC_CONSTANT + 2) * 5)))#ifdef NO_CHECKPOINT#define NO_LCP#define NO_GCP#endif/** * Ndb kernel blocks assertion handling * * Two type of assertions: * - ndbassert  - Only used when compiling VM_TRACE * - ndbrequire - Always checked * * If a ndbassert/ndbrequire fails, the system will  * shutdown and generate an error log * * * NOTE these may only be used within blocks */#if defined VM_TRACE#define ndbassert(check) \  if((check)){ \  } else {     \    progError(__LINE__, NDBD_EXIT_NDBASSERT, __FILE__); \  }#else#define ndbassert(check)#endif#define ndbrequireErr(check, error) \  if((check)){ \  } else {     \    progError(__LINE__, error, __FILE__); \  }#define ndbrequire(check) \  ndbrequireErr(check, NDBD_EXIT_NDBREQUIRE)#define CRASH_INSERTION(errorType) \  if (!ERROR_INSERTED((errorType))) { \  } else { \    progError(__LINE__, NDBD_EXIT_ERROR_INSERT, __FILE__); \  }#define CRASH_INSERTION2(errorNum, condition) \  if (!(ERROR_INSERTED(errorNum) && condition)) { \  } else { \    progError(__LINE__, NDBD_EXIT_ERROR_INSERT, __FILE__); \  }#define MEMCOPY_PAGE(to, from, page_size_in_bytes) \  memcpy((void*)(to), (void*)(from), (size_t)(page_size_in_bytes));#define MEMCOPY_NO_WORDS(to, from, no_of_words) \  memcpy((to), (void*)(from), (size_t)(no_of_words << 2));template <class T>struct Ptr {  T * p;  Uint32 i;  inline bool isNull() const { return i == RNIL; }  inline void setNull() { i = RNIL; }};template <class T>struct ConstPtr {  const T * p;  Uint32 i;  inline bool isNull() const { return i == RNIL; }  inline void setNull() { i = RNIL; }};#endif

⌨️ 快捷键说明

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