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

📄 attributedescriptor.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 ATTRIBUTE_DESCRIPTOR_HPP#define ATTRIBUTE_DESCRIPTOR_HPPclass AttributeDescriptor {  friend class Dbdict;  friend class Dbtc;  friend class Dbacc;  friend class Dbtup;  friend class Dbtux;  friend class SimulatedBlock;private:  static void setType(Uint32 &, Uint32 type);  static void setSize(Uint32 &, Uint32 size);  static void setArray(Uint32 &, Uint32 arraySize);  static void setNullable(Uint32 &, Uint32 nullable);  static void setDKey(Uint32 &, Uint32 dkey);  static void setPrimaryKey(Uint32 &, Uint32 dkey);  static void setDynamic(Uint32 &, Uint32 dynamicInd);    static Uint32 getType(const Uint32 &);  static Uint32 getSize(const Uint32 &);  static Uint32 getSizeInBytes(const Uint32 &);  static Uint32 getSizeInWords(const Uint32 &);  static Uint32 getArrayType(const Uint32 &);  static Uint32 getArraySize(const Uint32 &);  static Uint32 getNullable(const Uint32 &);  static Uint32 getDKey(const Uint32 &);  static Uint32 getPrimaryKey(const Uint32 &);  static Uint32 getDynamic(const Uint32 &);};/** * * a = Array type            - 2  Bits -> Max 3  (Bit 0-1) * t = Attribute type        - 5  Bits -> Max 31  (Bit 2-6) * s = Attribute size        - 3  Bits -> Max 7  (Bit 8-10) * d = Disk based            - 1  Bit 11 * n = Nullable              - 1  Bit 12 * k = Distribution Key Ind  - 1  Bit 13 * p = Primary key attribute - 1  Bit 14 * y = Dynamic attribute     - 1  Bit 15 * z = Array size            - 16 Bits -> Max 65535 (Bit 16-31) * *           1111111111222222222233 * 01234567890123456789012345678901 * aattttt sssdnkpyzzzzzzzzzzzzzzzz * aattsss n d k pyzzzzzzzzzzzzzzzz  [ old format ] *                */#define AD_ARRAY_TYPE_SHIFT (0)#define AD_ARRAY_TYPE_MASK  (3)#define AD_TYPE_SHIFT       (2)#define AD_TYPE_MASK        (31)#define AD_SIZE_SHIFT       (8)#define AD_SIZE_MASK        (7)#define AD_SIZE_IN_BYTES_SHIFT (3)#define AD_SIZE_IN_WORDS_OFFSET (31)#define AD_SIZE_IN_WORDS_SHIFT  (5)#define AD_NULLABLE_SHIFT    (12)#define AD_DISTR_KEY_SHIFT   (13)#define AD_PRIMARY_KEY       (14)#define AD_DYNAMIC           (15)#define AD_ARRAY_SIZE_SHIFT  (16)#define AD_ARRAY_SIZE_MASK   (65535)inlinevoidAttributeDescriptor::setType(Uint32 & desc, Uint32 type){  ASSERT_MAX(type, AD_TYPE_MASK, "AttributeDescriptor::setType");  desc |= (type << AD_TYPE_SHIFT);}inlinevoidAttributeDescriptor::setSize(Uint32 & desc, Uint32 size){  ASSERT_MAX(size, AD_SIZE_MASK, "AttributeDescriptor::setSize");  desc |= (size << AD_SIZE_SHIFT);}inlinevoidAttributeDescriptor::setArray(Uint32 & desc, Uint32 size){  ASSERT_MAX(size, AD_ARRAY_SIZE_MASK, "AttributeDescriptor::setArray");  desc |= (size << AD_ARRAY_SIZE_SHIFT);  if(size <= 1){    desc |= (size << AD_ARRAY_TYPE_SHIFT);  } else {    desc |= (2 << AD_ARRAY_TYPE_SHIFT);  }}inlinevoidAttributeDescriptor::setNullable(Uint32 & desc, Uint32 nullable){  ASSERT_BOOL(nullable, "AttributeDescriptor::setNullable");  desc |= (nullable << AD_NULLABLE_SHIFT);}inlinevoidAttributeDescriptor::setDKey(Uint32 & desc, Uint32 dkey){  ASSERT_BOOL(dkey, "AttributeDescriptor::setDKey");  desc |= (dkey << AD_DISTR_KEY_SHIFT);}inlinevoidAttributeDescriptor::setPrimaryKey(Uint32 & desc, Uint32 dkey){  ASSERT_BOOL(dkey, "AttributeDescriptor::setPrimaryKey");  desc |= (dkey << AD_PRIMARY_KEY);}inlinevoidAttributeDescriptor::setDynamic(Uint32 & desc, Uint32 dynamic){  ASSERT_BOOL(dynamic, "AttributeDescriptor::setDynamic");  desc |= (dynamic << AD_DYNAMIC);}/** * Getters */inlineUint32AttributeDescriptor::getType(const Uint32 & desc){  return (desc >> AD_TYPE_SHIFT) & AD_TYPE_MASK;}inlineUint32AttributeDescriptor::getSize(const Uint32 & desc){  return (desc >> AD_SIZE_SHIFT) & AD_SIZE_MASK;}inlineUint32AttributeDescriptor::getSizeInBytes(const Uint32 & desc){  return (getArraySize(desc) << getSize(desc))                             >> AD_SIZE_IN_BYTES_SHIFT;}inlineUint32AttributeDescriptor::getSizeInWords(const Uint32 & desc){  return ((getArraySize(desc) << getSize(desc))           + AD_SIZE_IN_WORDS_OFFSET)                               >> AD_SIZE_IN_WORDS_SHIFT;}inlineUint32AttributeDescriptor::getArrayType(const Uint32 & desc){  return (desc >> AD_ARRAY_TYPE_SHIFT) & AD_ARRAY_TYPE_MASK;}inlineUint32AttributeDescriptor::getArraySize(const Uint32 & desc){  return (desc >> AD_ARRAY_SIZE_SHIFT) & AD_ARRAY_SIZE_MASK;}inlineUint32AttributeDescriptor::getNullable(const Uint32 & desc){  return (desc >> AD_NULLABLE_SHIFT) & 1;}inlineUint32AttributeDescriptor::getDKey(const Uint32 & desc){  return (desc >> AD_DISTR_KEY_SHIFT) & 1;}inlineUint32AttributeDescriptor::getPrimaryKey(const Uint32 & desc){  return (desc >> AD_PRIMARY_KEY) & 1;}inlineUint32AttributeDescriptor::getDynamic(const Uint32 & desc){  return (desc >> AD_DYNAMIC) & 1;}#endif

⌨️ 快捷键说明

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