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

📄 class.cpp

📁 fastdb-2.92的源码
💻 CPP
📖 第 1 页 / 共 4 页
字号:
                            }              break;          case dbField::tpReference:            *(oid_t*)(dst+fd->dbsOffs) =                 ((dbAnyReference*)(src+fd->appOffs))->oid;            break;          case dbField::tpStructure:            offs = fd->components->storeRecordFields(dst, src+fd->appOffs, offs, insert);            break;          default:            return offs;        }    } while ((fd = fd->next) != this);    return offs;}void dbFieldDescriptor::markUpdatedFields(byte* dst, byte* src){    dbFieldDescriptor* fd = this;    do {         if (fd->indexType & (HASHED|INDEXED)) {             switch (fd->appType) {               case dbField::tpBool:                if (*(bool*)(dst+fd->dbsOffs) != *(bool*)(src+fd->appOffs)) {                     fd->attr |= Updated;                }                break;              case dbField::tpInt1:                if (*(int1*)(dst+fd->dbsOffs) != *(int1*)(src+fd->appOffs)) {                    fd->attr |= Updated;                }                break;              case dbField::tpInt2:                if (*(int2*)(dst+fd->dbsOffs) != *(int2*)(src+fd->appOffs)) {                    fd->attr |= Updated;                }                break;              case dbField::tpInt4:                if (*(int4*)(dst+fd->dbsOffs) != *(int4*)(src+fd->appOffs)) {                    fd->attr |= Updated;                }                break;              case dbField::tpInt8:                if (*(db_int8*)(dst+fd->dbsOffs) != *(db_int8*)(src+fd->appOffs)) {                    fd->attr |= Updated;                }                break;              case dbField::tpReference:                if (*(oid_t*)(dst+fd->dbsOffs) != *(oid_t*)(src+fd->appOffs)) {                    fd->attr |= Updated;                }                break;              case dbField::tpReal4:                if (*(real4*)(dst+fd->dbsOffs) != *(real4*)(src+fd->appOffs)) {                    fd->attr |= Updated;                }                break;              case dbField::tpReal8:                if (*(real8*)(dst+fd->dbsOffs) != *(real8*)(src+fd->appOffs)) {                    fd->attr |= Updated;                }                break;                case dbField::tpRawBinary:                if (memcmp(dst+fd->dbsOffs, src+fd->appOffs, fd->dbsSize) != 0) {                    fd->attr |= Updated;                }                break;                case dbField::tpString:                if (strcmp((char*)dst + ((dbVarying*)(dst+fd->dbsOffs))->offs,                           *(char**)(src + fd->appOffs)) != 0)                 {                    fd->attr |= Updated;                }                break;#ifdef USE_STD_STRING              case dbField::tpStdString:                if (*(std::string*)(src + fd->appOffs) != (char*)(dst + ((dbVarying*)(dst+fd->dbsOffs))->offs)) {                    fd->attr |= Updated;                }                break;#endif                        case dbField::tpStructure:                fd->components->markUpdatedFields(dst, src+fd->appOffs);                break;              case dbField::tpArray:                break;              default:                return;            }        }    } while ((fd = fd->next) != this);}size_t dbFieldDescriptor::convertRecord(byte* dst, byte* src, size_t offs){    dbFieldDescriptor* fd = this;    int1  i1;    int2  i2;    int4  i4;    db_int8  i8;    real4 f4;    real8 f8;    bool  b;    do {         switch (fd->type) {           case dbField::tpBool:            switch (fd->oldDbsType) {               case dbField::tpBool:                b = *(bool*)(src + fd->oldDbsOffs);                break;              case dbField::tpInt1:                b = *(int1*)(src + fd->oldDbsOffs) != 0;                break;              case dbField::tpInt2:                b = *(int2*)(src + fd->oldDbsOffs) != 0;                break;              case dbField::tpInt4:                b = *(int4*)(src + fd->oldDbsOffs) != 0;                break;              case dbField::tpInt8:                b = *(db_int8*)(src + fd->oldDbsOffs) != 0;                break;              case dbField::tpReal4:                b = *(real4*)(src + fd->oldDbsOffs) != 0;                break;              case dbField::tpReal8:                b = *(real8*)(src + fd->oldDbsOffs) != 0;                break;              default:                b = false;            }            *(bool*)(dst + fd->dbsOffs) = b;            break;          case dbField::tpInt1:            switch (fd->oldDbsType) {               case dbField::tpBool:                i1 = *(bool*)(src + fd->oldDbsOffs);                break;              case dbField::tpInt1:                i1 = *(int1*)(src + fd->oldDbsOffs);                break;              case dbField::tpInt2:                i1 = (int1)*(int2*)(src + fd->oldDbsOffs);                break;              case dbField::tpInt4:                i1 = (int1)*(int4*)(src + fd->oldDbsOffs);                break;              case dbField::tpInt8:                i1 = (int1)*(db_int8*)(src + fd->oldDbsOffs);                break;              case dbField::tpReal4:                i1 = (int1)*(real4*)(src + fd->oldDbsOffs);                break;              case dbField::tpReal8:                i1 = (int1)*(real8*)(src + fd->oldDbsOffs);                break;              default:                i1 = 0;            }            *(int1*)(dst + fd->dbsOffs) = i1;            break;          case dbField::tpInt2:            switch (fd->oldDbsType) {               case dbField::tpBool:                i2 = *(bool*)(src + fd->oldDbsOffs);                break;              case dbField::tpInt1:                i2 = *(int1*)(src + fd->oldDbsOffs);                break;              case dbField::tpInt2:                i2 = *(int2*)(src + fd->oldDbsOffs);                break;              case dbField::tpInt4:                i2 = (int2)*(int4*)(src + fd->oldDbsOffs);                break;              case dbField::tpInt8:                i2 = (int2)*(db_int8*)(src + fd->oldDbsOffs);                break;              case dbField::tpReal4:                i2 = (int2)*(real4*)(src + fd->oldDbsOffs);                break;              case dbField::tpReal8:                i2 = (int2)*(real8*)(src + fd->oldDbsOffs);                break;              default:                i2 = 0;            }            *(int2*)(dst + fd->dbsOffs) = i2;            break;          case dbField::tpInt4:            switch (fd->oldDbsType) {               case dbField::tpBool:                i4 = *(bool*)(src + fd->oldDbsOffs);                break;              case dbField::tpInt1:                i4 = *(int1*)(src + fd->oldDbsOffs);                break;              case dbField::tpInt2:                i4 = *(int2*)(src + fd->oldDbsOffs);                break;              case dbField::tpInt4:                i4 = *(int4*)(src + fd->oldDbsOffs);                break;              case dbField::tpInt8:                i4 = (int4)*(db_int8*)(src + fd->oldDbsOffs);                break;              case dbField::tpReal4:                i4 = (int4)*(real4*)(src + fd->oldDbsOffs);                break;              case dbField::tpReal8:                i4 = (int4)*(real8*)(src + fd->oldDbsOffs);                break;              default:                i4 = 0;            }            *(int4*)(dst + fd->dbsOffs) = i4;            break;          case dbField::tpInt8:            switch (fd->oldDbsType) {               case dbField::tpBool:                i8 = *(bool*)(src + fd->oldDbsOffs);                break;              case dbField::tpInt1:                i8 = *(int1*)(src + fd->oldDbsOffs);                break;              case dbField::tpInt2:                i8 = *(int2*)(src + fd->oldDbsOffs);                break;              case dbField::tpInt4:                i8 = *(int4*)(src + fd->oldDbsOffs);                break;              case dbField::tpInt8:                i8 = *(db_int8*)(src + fd->oldDbsOffs);                break;              case dbField::tpReal4:                i8 = (db_int8)*(real4*)(src + fd->oldDbsOffs);                break;              case dbField::tpReal8:                i8 = (db_int8)*(real8*)(src + fd->oldDbsOffs);                break;              default:                i8 = 0;            }            *(db_int8*)(dst + fd->dbsOffs) = i8;            break;          case dbField::tpReal4:            switch (fd->oldDbsType) {               case dbField::tpBool:                f4 = (real4)*(bool*)(src + fd->oldDbsOffs);                break;              case dbField::tpInt1:                f4 = (real4)*(int1*)(src + fd->oldDbsOffs);                break;              case dbField::tpInt2:                f4 = (real4)*(int2*)(src + fd->oldDbsOffs);                break;              case dbField::tpInt4:                f4 = (real4)*(int4*)(src + fd->oldDbsOffs);                break;              case dbField::tpInt8:                f4 = (real4)*(db_int8*)(src + fd->oldDbsOffs);                break;              case dbField::tpReal4:                f4 = *(real4*)(src + fd->oldDbsOffs);                break;              case dbField::tpReal8:                f4 = (real4)*(real8*)(src + fd->oldDbsOffs);                break;              default:                f4 = 0;            }            *(real4*)(dst + fd->dbsOffs) = f4;            break;          case dbField::tpReal8:            switch (fd->oldDbsType) {               case dbField::tpBool:                f8 = (real8)*(bool*)(src + fd->oldDbsOffs);                break;              case dbField::tpInt1:                f8 = (real8)*(int1*)(src + fd->oldDbsOffs);                break;              case dbField::tpInt2:                f8 = (real8)*(int2*)(src + fd->oldDbsOffs);                break;              case dbField::tpInt4:                f8 = (real8)*(int4*)(src + fd->oldDbsOffs);                break;              case dbField::tpInt8:                f8 = (real8)*(db_int8*)(src + fd->oldDbsOffs);                break;              case dbField::tpReal4:                f8 = *(real4*)(src + fd->oldDbsOffs);                break;              case dbField::tpReal8:                f8 = *(real8*)(src + fd->oldDbsOffs);                break;              default:                f8 = 0;            }            *(real8*)(dst + fd->dbsOffs) = f8;            break;          case dbField::tpRawBinary:            if (fd->oldDbsType == dbField::tpRawBinary) {                memcpy(dst + fd->dbsOffs, src + fd->oldDbsOffs,                        size_t(fd->oldDbsSize) < fd->dbsSize                        ? size_t(fd->oldDbsSize) : fd->dbsSize);            }             break;          case dbField::tpString:            if (fd->oldDbsType == dbField::tpUnknown) {                 ((dbVarying*)(dst + fd->dbsOffs))->size = 1;                ((dbVarying*)(dst + fd->dbsOffs))->offs = offs;                *(char*)(dst + offs++) = '\0';            } else {                 size_t len =                     ((dbVarying*)(src + fd->oldDbsOffs))->size;                ((dbVarying*)(dst + fd->dbsOffs))->size = len;                ((dbVarying*)(dst + fd->dbsOffs))->offs = offs;                memcpy(dst + offs,                        src + ((dbVarying*)(src+fd->oldDbsOffs))->offs, len);                offs += len;            }            break;          case dbField::tpArray:            if (fd->oldDbsType == dbField::tpUnknown) {                 ((dbVarying*)(dst + fd->dbsOffs))->size = 0;                ((dbVarying*)(dst + fd->dbsOffs))->offs = 0;            } else {                 int len = ((dbVarying*)(src+fd->oldDbsOffs))->size;                byte* srcElem = src + ((dbVarying*)(src+fd->oldDbsOffs))->offs;                ((dbVarying*)(dst + fd->dbsOffs))->size = len;                offs = DOALIGN(offs, fd->components->alignment);                byte* dstElem = dst+offs;                ((dbVarying*)(dst+fd->dbsOffs))->offs = offs;                size_t offsElem = len*fd->components->dbsSize;                 offs += offsElem;                while (--len >= 0) {                     offsElem = fd->components->convertRecord(dstElem, srcElem,                                                             offsElem);                    offsElem -= fd->components->dbsSize;                    dstElem += fd->components->dbsSize;                    srcElem += fd->components->oldDbsSize;                }                offs += offsElem;            }            break;          case dbField::tpStructure:            offs = fd->components->convertRecord(dst, src, offs);            break;          case dbField::tpReference:            if (fd->oldDbsType == dbField::tpUnknown) {                 *(oid_t*)(dst + fd->dbsOffs) = 0;            } else {                 *(oid_t*)(dst + fd->dbsOffs) = *(oid_t*)(src + fd->oldDbsOffs);            }            break;          default:            return offs;        }    } while ((fd = fd->next) != this);    return offs;}int dbTableDescriptor::initialAutoincrementCount;dbTableDescriptor::dbTableDescriptor(char*              tableName,                                      dbDatabase*        database,                                     size_t             objSize,                                      describeFunc       func,                                     dbTableDescriptor* original)

⌨️ 快捷键说明

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