亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? class.cpp

?? FastDb是高效的內存數據庫系統
?? CPP
?? 第 1 頁 / 共 4 頁
字號:

  int attr = 0;

  appSize = 0;

  columns = buildFieldsList(table, "", 0, attr);

  *nextFieldLink = NULL;

  db = NULL;

  tableId = 0;

#ifdef AUTOINCREMENT_SUPPORT

  autoincrementCount = table->count;

#endif
}




class _AlignArray : public dbAnyArray
{

protected:
  void*  data;
  size_t allocated;
};

class _AlignReference
{

protected:
  oid_t       oid;
};

union _aligns {

  struct
  {
    char n;
    bool v;
  }

  _abool;

  struct
  {
    char n;
    int1 v;
  }

  _aint1;

  struct
  {
    char n;
    int2 v;
  }

  _aint2;

  struct
  {
    char n;
    int4 v;
  }

  _aint4;

  struct
  {
    char n;
    db_int8 v;
  }

  _aint8;

  struct
  {
    char n;
    real4 v;
  }

  _areal4;

  struct
  {
    char n;
    real8 v;
  }

  _areal8;

  struct
  {
    char n;
    char *v;
  }

  _astring;

  struct
  {
    char n;
    char v[1];
  }

  _arawbinary;

  struct
  {
    char n;
    _AlignReference v;
  }

  _areference;

  struct
  {
    char n;
    _AlignArray v;
  }

  _aarray;
} __aligns;

#define COMPUTE_ALIGNED_SIZE(type) \
 (((char *)&(((union _aligns *)0)->_a##type.v)) - ((char *)&(((union _aligns *)0)->_a##type.n)))



dbFieldDescriptor* dbTableDescriptor::buildFieldsList(dbTable*    table,
    char const* prefix,
    int         prefixLen,
    int&        attr)
{
  dbFieldDescriptor* components = NULL;
  dbField* field = (dbField*)((char*)table+table->fields.offs) + nFields;

  while (nFields < table->fields.size
         && strncmp((char*)field + field->name.offs, prefix, prefixLen) == 0)
  {
    char* longName = (char*)field + field->name.offs;
    char* name = longName + prefixLen;

    if (*name == '.')
    {
      name += 1;
    }
    else if (prefixLen != 0 && *name != '[')
    {
      break;
    }

    dbSymbolTable::add
      (name, tkn_ident, true);

    dbFieldDescriptor* fd = new dbFieldDescriptor(name);

    fd->dbsOffs = field->offset;

    fd->alignment = fd->dbsSize = field->size;

    fd->longName = new char[strlen(longName)+1];

    strcpy(fd->longName, longName);

    fd->type = fd->appType = field->type;

    int appFieldSize, appAlignedFieldSize;

    switch (field->type)
    {

    case dbField::tpBool:
      appAlignedFieldSize = COMPUTE_ALIGNED_SIZE(bool);
      appFieldSize = sizeof(bool);
      break;

    case dbField::tpInt1:
      appAlignedFieldSize = COMPUTE_ALIGNED_SIZE(int1);
      appFieldSize = sizeof(int1);
      break;

    case dbField::tpInt2:
      appAlignedFieldSize = COMPUTE_ALIGNED_SIZE(int2);
      appFieldSize = sizeof(int2);
      break;

    case dbField::tpInt4:
      appAlignedFieldSize = COMPUTE_ALIGNED_SIZE(int4);
      appFieldSize = sizeof(int4);
      break;

    case dbField::tpInt8:
      appAlignedFieldSize = COMPUTE_ALIGNED_SIZE(int8);
      appFieldSize = sizeof(db_int8);
      break;

    case dbField::tpReal4:
      appAlignedFieldSize = COMPUTE_ALIGNED_SIZE(real4);
      appFieldSize = sizeof(real4);
      break;

    case dbField::tpReal8:
      appAlignedFieldSize = COMPUTE_ALIGNED_SIZE(real8);
      appFieldSize = sizeof(real8);
      break;

    case dbField::tpString:
      appAlignedFieldSize = COMPUTE_ALIGNED_SIZE(string);
      appFieldSize = sizeof(char *);
      break;

    case dbField::tpRawBinary:
      appAlignedFieldSize = COMPUTE_ALIGNED_SIZE(rawbinary);
      appFieldSize = field->size;
      break;

    case dbField::tpReference:
      appAlignedFieldSize = COMPUTE_ALIGNED_SIZE(reference);
      appFieldSize = sizeof(dbAnyReference);
      break;

    case dbField::tpArray:
      appAlignedFieldSize = COMPUTE_ALIGNED_SIZE(array);
      appFieldSize = sizeof(_AlignArray);
      break;

    default:
      appAlignedFieldSize = 1;
      appFieldSize = 0;
    }

    fd->appOffs = appSize = DOALIGN(appSize, appAlignedFieldSize);
    appSize += fd->appSize = appFieldSize;

    if ((fd->hashTable = field->hashTable) != 0)
    {
      fd->nextHashedField = hashedFields;
      hashedFields = fd;
    }

    if ((fd->tTree = field->tTree) != 0)
    {
      fd->nextIndexedField = indexedFields;
      indexedFields = fd;
    }

    fd->fieldNo = nFields++;
    fd->defTable = this;
    fd->refTable = NULL;
    fd->refTableName = NULL;

    if (field->hashTable != 0)
    {
      fd->indexType |= HASHED;
    }

    if (field->tTree != 0)
    {
      fd->indexType |= INDEXED;
    }

    if (field->tableName.size > 1)
    {
      fd->refTableName = (char*)field + field->tableName.offs;

      dbSymbolTable::add
        (fd->refTableName, tkn_ident, true);
    }

    fd->inverseRefName = NULL;

    if (field->inverse.size > 1)
    {
      fd->nextInverseField = inverseFields;
      inverseFields = fd;
      fd->inverseRefName = (char*)field + field->inverse.offs;

      dbSymbolTable::add
        (fd->inverseRefName, tkn_ident, true);
    }

    fd->attr = (attr & dbFieldDescriptor::ComponentOfArray) | dbFieldDescriptor::OneToOneMapping;

    *nextFieldLink = fd;
    nextFieldLink = &fd->nextField;

    if (prefixLen == 0)
    {
      nColumns += 1;
    }

    if (components == NULL)
    {
      components = fd;
    }
    else
    {
      fd->next = components;
      fd->prev = components->prev;
      components->prev->next = fd;
      components->prev = fd;
    }

    if (fd->type == dbField::tpArray || fd->type == dbField::tpString)
    {
      attr |= dbFieldDescriptor::HasArrayComponents;
      fd->attr |= dbFieldDescriptor::ComponentOfArray;
      fd->alignment = 4;
    }

    if (fd->type == dbField::tpArray || fd->type == dbField::tpStructure)
    {
      int saveAppSize = appSize;

      if (fd->type == dbField::tpArray)
      {
        appSize = 0;
      }

      fd->components =
        buildFieldsList(table, longName, strlen(longName), fd->attr);

      if (fd->type == dbField::tpArray)
      {
        appSize = saveAppSize;
      }

      attr |= fd->attr & dbFieldDescriptor::HasArrayComponents;
      field = (dbField*)((char*)table + table->fields.offs) + nFields;

      if (fd->type == dbField::tpStructure)
      {
        size_t alignment = 1;
        dbFieldDescriptor* component = fd->components;

        do
        {
          if (component->alignment > alignment)
          {
            alignment = component->alignment;
          }
        }
        while ((component = component->next) != fd->components);

        fd->alignment = alignment;
      }
      else
      {
        if (fd->components->type == dbField::tpString)
        {
          fd->arrayAllocator = &dbArray<char*>::arrayAllocator;
          fd->attr &= ~dbFieldDescriptor::OneToOneMapping;
        }
        else
        {
          fd->arrayAllocator = &dbAnyArray::arrayAllocator;
        }
      }
    }
    else
    {
      if (fd->type == dbField::tpString)
      {
        fd->components = new dbFieldDescriptor("[]");
        fd->components->type = fd->components->appType = dbField::tpInt1;
        fd->components->dbsSize = fd->components->appSize = 1;
        fd->components->alignment = 1;
      }

      field += 1;
    }
  }

  return components;
}


size_t dbTableDescriptor::totalNamesLength()
{
  dbFieldDescriptor* fd;
  size_t len = strlen(name) + 1;

  for (fd = firstField; fd != NULL; fd = fd->nextField)
  {
    if (fd->name != NULL)
    {
      len += strlen(fd->longName) + 3;

      if (fd->inverseRefName != NULL)
      {
        len += strlen(fd->inverseRefName);
      }

      if (fd->refTable != NULL)
      {
        len += strlen(fd->refTable->name);
      }
    }
  }

  return len;
}


dbTableDescriptor* dbTableDescriptor::clone()
{
  return new dbTableDescriptor(name,
                               DETACHED_TABLE,
                               appSize,
                               describeComponentsFunc,
                               this);
}

dbTableDescriptor::~dbTableDescriptor()
{
  if (cloneOf == NULL)
  {
    dbTableDescriptor **tpp;

    for (tpp = &chain; *tpp != this; tpp = &(*tpp)->next)

      ;
    *tpp = next;
  }

  dbFieldDescriptor* last = columns->prev;

  while (last->method != NULL)
  {
    dbFieldDescriptor* prev = last->prev;
    delete last->method;
    delete last;

    if (last == columns)
    {
      break;
    }

    last = prev;
  }

  dbFieldDescriptor *field, *nextField;

  for (field = firstField; field != NULL; field = nextField)
  {
    nextField = field->nextField;
    delete field;
  }
}


void dbTableDescriptor::cleanup()
{
  dbTableDescriptor* next, *desc;

  for (desc = chain; desc != NULL; desc = next)
  {
    next = desc->next;

    if (!desc->isStatic)
    {
      delete desc;
    }
  }
}


void dbTableDescriptor::storeInDatabase(dbTable* table)
{
  int offs = sizeof(dbTable) + sizeof(dbField)*nFields;
  table->name.offs = offs;
  table->name.size = strlen(name)+1;
  strcpy((char*)table + offs, name);
  offs += table->name.size;
  table->fields.offs = sizeof(dbTable);
  table->fields.size = nFields;
  table->nRows = 0;
  table->nColumns = nColumns;
  table->fixedSize = fixedSize;
  table->firstRow = 0;
  table->lastRow = 0;
#ifdef AUTOINCREMENT_SUPPORT

  table->count = autoincrementCount;
#endif

  dbFieldDescriptor* fd;
  dbField* field = (dbField*)((char*)table + table->fields.offs);
  offs -= sizeof(dbTable);

  for (fd = firstField; fd != NULL; fd = fd->nextField)
  {
    field->name.offs = offs;
    field->name.size = strlen(fd->longName) + 1;
    strcpy((char*)field + offs, fd->longName);
    offs += field->name.size;
    field->tableName.offs = offs;

    if (fd->refTable != NULL)
    {
      field->tableName.size = strlen(fd->refTable->name) + 1;
      strcpy((char*)field + offs, fd->refTable->name);
    }
    else
    {
      field->tableName.size = 1;
      *((char*)field + offs) = '\0';
    }

    offs += field->tableName.size;

    field->inverse.offs = offs;

    if (fd->inverseRefName != NULL)
    {
      field->inverse.size = strlen(fd->inverseRefName) + 1;
      strcpy((char*)field + offs, fd->inverseRefName);
    }
    else
    {
      field->inverse.size = 1;
      *((char*)field + offs) = '\0';
    }

    offs += field->inverse.size;

    field->tTree = fd->tTree;
    field->hashTable = fd->hashTable;
    field->type = fd->type;
    field->size = fd->dbsSize;
    field->offset = fd->dbsOffs;
    field += 1;
    offs -= sizeof(dbField);
  }
}

void* dbAnyMethodTrampoline::operator new(size_t size EXTRA_DEBUG_NEW_PARAMS)
{
  return dbMalloc(size);
}

void  dbAnyMethodTrampoline::operator delete(void* p EXTRA_DEBUG_NEW_PARAMS)
{
  dbFree(p);
}

dbAnyMethodTrampoline::~dbAnyMethodTrampoline()
{}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产一区二区三区久久久| 久久精品二区亚洲w码| 国产精品福利一区| 亚洲午夜视频在线| 911精品国产一区二区在线| 亚洲福利电影网| 99精品欧美一区二区蜜桃免费| 欧美不卡一区二区三区四区| 亚洲精品va在线观看| 欧美日韩视频专区在线播放| 日韩电影在线一区二区| 日韩三区在线观看| 成人美女视频在线观看| 亚洲最大成人综合| 久久久久综合网| 日本道在线观看一区二区| 日本在线不卡视频| 日韩视频一区二区三区| 成人av综合一区| 日韩电影免费在线看| 中文一区二区完整视频在线观看| av一区二区三区在线| 捆绑调教一区二区三区| 亚洲黄色av一区| 国产精品久久久久久久久久免费看| 在线观看精品一区| 国产一区二区三区| 午夜国产精品影院在线观看| 久久免费电影网| 精品91自产拍在线观看一区| 一本色道a无线码一区v| a级高清视频欧美日韩| 国产在线精品一区二区夜色| 1024成人网| 中文字幕一区二区三| 国产日韩精品久久久| 欧美本精品男人aⅴ天堂| 欧美日韩国产免费| 欧美三区在线观看| 色94色欧美sute亚洲13| 国产99久久久国产精品| 91蜜桃在线免费视频| 99国产欧美另类久久久精品| 成人精品小蝌蚪| 美女一区二区三区在线观看| 激情丁香综合五月| 久久精品999| 懂色av一区二区三区免费观看| 国产aⅴ综合色| 91啪亚洲精品| 欧美体内she精视频| 成人av先锋影音| 欧美在线综合视频| 日韩欧美一区在线观看| 久久久精品国产99久久精品芒果 | 一区二区三区av电影| 亚洲不卡av一区二区三区| 亚洲中国最大av网站| 免费成人av在线| 欧美丝袜自拍制服另类| 日韩免费一区二区三区在线播放| 91麻豆精品国产综合久久久久久 | 国产精品麻豆一区二区 | 久久美女艺术照精彩视频福利播放 | 91精品国产免费| 亚洲精品日产精品乱码不卡| 一区二区三区四区在线播放 | 亚洲国产精品一区二区久久| 成人中文字幕在线| 欧美一级二级在线观看| 一区二区三区在线看| 国产精品一区二区在线观看不卡| 欧美久久久久免费| 亚洲成人激情综合网| 99久久婷婷国产| 日韩欧美国产小视频| 一区2区3区在线看| 成人动漫视频在线| 一区二区视频免费在线观看| 国产在线看一区| 宅男噜噜噜66一区二区66| 亚洲国产欧美在线人成| 色哟哟国产精品| 午夜精品久久一牛影视| 91.com视频| 国产成人亚洲精品狼色在线| 国产精品网站一区| 欧美三日本三级三级在线播放| 日韩电影在线看| 国产精品天干天干在观线| 成人免费va视频| 麻豆视频一区二区| 国产精品久久久久7777按摩| 在线视频国内一区二区| 免费高清在线一区| 亚洲免费成人av| 国产偷v国产偷v亚洲高清| 欧美乱熟臀69xxxxxx| 国产麻豆一精品一av一免费| 亚洲成a人片在线不卡一二三区| 欧美日本一道本在线视频| 国产91在线|亚洲| 国产一区二区中文字幕| 亚洲激情成人在线| 国产精品麻豆一区二区| 日韩欧美视频在线| 精品污污网站免费看| 不卡免费追剧大全电视剧网站| 青草国产精品久久久久久| 亚洲在线视频免费观看| 国产精品伦一区二区三级视频| 久久女同性恋中文字幕| 日韩欧美一区电影| 欧美一区二区精品久久911| 在线观看精品一区| 一本色道久久综合亚洲91 | 最新日韩在线视频| 亚洲国产精品激情在线观看| 国产精品私人影院| 轻轻草成人在线| 欧美亚洲综合色| 日韩美女视频19| 日本最新不卡在线| www.99精品| 国产欧美日韩另类一区| 亚洲二区在线视频| 成人免费毛片嘿嘿连载视频| 欧美精品在线观看一区二区| 亚洲欧美自拍偷拍| 精品视频一区 二区 三区| 在线看国产一区| 欧美成人video| 亚洲欧洲美洲综合色网| 日韩国产在线观看一区| 国产91精品一区二区麻豆亚洲| 色哟哟欧美精品| 久久一夜天堂av一区二区三区| 亚洲精品久久久久久国产精华液| 日韩激情一二三区| 99麻豆久久久国产精品免费| 制服视频三区第一页精品| 日本一二三四高清不卡| 免费在线观看日韩欧美| 色综合 综合色| 亚洲色图欧洲色图婷婷| 老司机精品视频导航| 欧美三级韩国三级日本三斤| 国产欧美综合在线观看第十页 | 久久婷婷国产综合国色天香| 亚洲精品亚洲人成人网| 白白色 亚洲乱淫| 国产欧美在线观看一区| 激情五月激情综合网| 这里只有精品免费| 美国三级日本三级久久99| 欧美久久久久中文字幕| 日韩中文字幕一区二区三区| 91蝌蚪porny| 亚洲已满18点击进入久久| 色老汉av一区二区三区| 午夜精品久久久久久久99水蜜桃 | 欧美本精品男人aⅴ天堂| 在线成人高清不卡| 欧美国产一区二区| 麻豆精品在线看| 在线电影国产精品| 一区二区三区产品免费精品久久75| 日本欧美在线看| 欧美日韩高清在线| 天天av天天翘天天综合网| 欧美日韩亚洲综合| 日韩国产欧美在线播放| 欧美一级高清片| 国产精品自产自拍| 亚洲欧美日韩人成在线播放| 91在线视频播放| 亚洲高清在线视频| 日韩一区二区免费在线观看| 国产精品2024| 亚洲国产wwwccc36天堂| 欧美成人女星排名| 91捆绑美女网站| 久久 天天综合| 亚洲第一福利一区| 国产精品三级视频| 欧美成人a∨高清免费观看| 91免费国产在线观看| 老鸭窝一区二区久久精品| 亚洲精品欧美激情| 精品国产一区二区三区av性色| 91片黄在线观看| 99久久国产综合精品女不卡| 日本不卡一区二区| 综合久久久久久| 中文字幕av免费专区久久| 欧美成人午夜电影| 日韩一级在线观看| 欧美肥大bbwbbw高潮| 欧美亚洲一区二区三区四区| 99精品黄色片免费大全|