📄 attributedescriptor.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 + -