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

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

?? file.cpp

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

    status = GetLastError();

    if (cmh == NULL)
    {
      CloseHandle(cfh);
      return status;
    }

    diskUpdateCount = (int*)MapViewOfFile(cmh, FILE_MAP_ALL_ACCESS,
                                          0, 0, 0);

    if (diskUpdateCount == NULL)
    {
      status = GetLastError();
      CloseHandle(cmh);
      CloseHandle(cfh);
      return status;
    }

    rootPage = dbMalloc(pageSize);
    int maxCount = 0;

    for (int i = 0; i < nPages; i++)
    {
      int count = diskUpdateCount[i];
      currUpdateCount[i] = count;

      if (count > maxCount)
      {
        maxCount = count;
      }
    }

    updateCounter = maxCount;
    nRecovered = 0;
    recoveredEvent.open(true);
    syncEvent.open();
    startSync();
  }

#endif
  return ok;
}

#if defined(REPLICATION_SUPPORT)
void dbFile::syncToDisk()
{
  syncThread.setPriority(dbThread::THR_PRI_LOW);
  dbCriticalSection cs(syncCS);

  while (doSync)
  {
    int i, j, k;
    int maxUpdated = 0;

    for (i = 0; i < int(mmapSize >> dbModMapBlockBits);)
    {
      int updateCounters[dbMaxSyncSegmentSize];

      for (j=i; j < int(mmapSize >> dbModMapBlockBits) && j-i < dbMaxSyncSegmentSize
           && currUpdateCount[j] > diskUpdateCount[j]; j++)
      {
        updateCounters[j-i] = currUpdateCount[j];
      }

      if (i != j)
      {
        size_t pos = (i << dbModMapBlockBits) & ~(pageSize-1);
        size_t size = (((j-i) << dbModMapBlockBits) + pageSize - 1) & ~(pageSize-1);
#ifdef NO_MMAP

        DWORD written;

        if (SetFilePointer(fh, pos, NULL, FILE_BEGIN) != pos ||
            !WriteFile(fh, mmapAddr + pos, size, &written, NULL)
            || written != (DWORD)size)
        {
          dbTrace("Failed to save page to the disk, position=%ld, size=%ld, error=%d\n",
                  (long)pos, (long)size, GetLastError());
        }

#else
        FlushViewOfFile(mmapAddr + pos, size);

#endif

        for (k = 0; i < j; k++, i++)
        {
          diskUpdateCount[i] = updateCounters[k];
        }

        maxUpdated = i;
      }
      else
      {
        i += 1;
      }

      if (!doSync)
      {
        return;
      }
    }

    if (maxUpdated != 0)
    {
      FlushViewOfFile(diskUpdateCount, maxUpdated*sizeof(int));
    }

    if (closing && maxUpdated == 0)
    {
      return;
    }
    else
    {
      syncEvent.wait(syncCS, dbSyncTimeout);
    }
  }
}

#endif

int dbFile::create(const char* name, bool noBuffering)
{
  fh = CreateFile(name, GENERIC_READ|GENERIC_WRITE, 0, FASTDB_SECURITY_ATTRIBUTES, CREATE_ALWAYS,
                  (noBuffering ? FILE_FLAG_NO_BUFFERING : 0)|FILE_FLAG_SEQUENTIAL_SCAN, NULL);

  if (fh == INVALID_HANDLE_VALUE)
  {
    return GetLastError();
  }

  mh = NULL;
  mmapAddr = NULL;
  sharedName = NULL;
  return ok;
}

int dbFile::read(void* buf, size_t& readBytes, size_t size)
{
  DWORD count;

  if (ReadFile(fh, buf, size, &count, NULL))
  {
    readBytes = count;
    return ok;
  }
  else
  {
    readBytes = 0;
    return GetLastError();
  }
}

int dbFile::write(void const* buf, size_t& writtenBytes, size_t size)
{
  DWORD count;

  if (WriteFile(fh, buf, size, &count, NULL))
  {
    writtenBytes = count;
    return ok;
  }
  else
  {
    writtenBytes = 0;
    return GetLastError();
  }
}


int dbFile::flush(bool physical)
{
#if defined(REPLICATION_SUPPORT)
  dbCriticalSection cs(replCS);

  if (db == NULL)
  {
    physical = true;
  }

  if (!physical)
  {
    updateCounter += 1;
  }

#endif
#if defined(REPLICATION_SUPPORT) || (defined(NO_MMAP) && !defined(DISKLESS_CONFIGURATION))
  int* map = pageMap;

  for (int i = 0, n = pageMapSize; i < n; i++)
  {
    if (map[i] != 0)
    {
      size_t pos = (size_t)i << (dbModMapBlockBits + 5);
      unsigned mask = map[i];
      int count = 0;

      do
      {
        int size = 0;

        while ((mask & 1) == 0)
        {
          pos += dbModMapBlockSize;
          mask >>= 1;
          count += 1;
        }

        while (true)
        {
          do
          {
#ifdef REPLICATION_SUPPORT

            if (!physical)
            {
              currUpdateCount[(pos + size) >> dbModMapBlockBits] = updateCounter;
            }

#endif
            size += dbModMapBlockSize;

            mask >>= 1;

            count += 1;
          }
          while ((mask & 1) != 0);

          if (i+1 < n && count == 32 && size < dbMaxSyncSegmentSize*dbModMapBlockSize
              && (map[i+1] & 1) != 0)
          {
            map[i] = 0;
            mask = map[++i];
            count = 0;
          }
          else
          {
            break;
          }
        }

#if defined(REPLICATION_SUPPORT)
        if (db != NULL)
        {
          if (!physical)
          {
            for (int j = db->nServers; --j >= 0;)
            {
              if (db->con[j].status == dbReplicatedDatabase::ST_STANDBY)
              {
                ReplicationRequest rr;
                rr.op = ReplicationRequest::RR_UPDATE_PAGE;
                rr.nodeId = db->id;
                rr.page.updateCount = updateCounter;
                rr.page.offs = pos;
                rr.size = size;
                db->writeReq(j, rr, mmapAddr + pos, size);
              }
            }
          }

          pos += size;
          continue;
        }

#endif
#ifndef DISKLESS_CONFIGURATION
        DWORD written;

        if (SetFilePointer(fh, pos, NULL, FILE_BEGIN) != pos ||
            !WriteFile(fh, mmapAddr + pos, size, &written, NULL)
            || written != (DWORD)size)
        {
          return GetLastError();
        }

#endif
        pos += size;
      }
      while (mask != 0);

      map[i] = 0;
    }
  }

#endif
#if !defined(NO_MMAP) && !defined(DISKLESS_CONFIGURATION) && !defined(REPLICATION_SUPPORT)
  if (!FlushViewOfFile(mmapAddr, mmapSize))
  {
    return GetLastError();
  }

#endif
  return ok;
}

int dbFile::setSize(size_t size, char const* sharedName, bool initialize)
{
#if defined(REPLICATION_SUPPORT)
  dbCriticalSection cs1(syncCS);
  dbCriticalSection cs2(replCS);
#endif
#ifdef DISKLESS_CONFIGURATION

  assert(false);
#else
#ifdef NO_MMAP

  char* newBuf = (char*)VirtualAlloc(NULL, size, MEM_COMMIT|MEM_RESERVE, PAGE_READWRITE);

  if (newBuf == NULL)
  {
    return GetLastError();
  }

  if (SetFilePointer(fh, size, NULL, FILE_BEGIN) != size || !SetEndOfFile(fh))
  {
    return GetLastError();
  }

  memcpy(newBuf, mmapAddr, mmapSize);
  VirtualFree(mmapAddr, 0, MEM_RELEASE);
  mmapAddr = newBuf;
  mmapSize = size;
#else

  if (!UnmapViewOfFile(mmapAddr) || !CloseHandle(mh))
  {
    return GetLastError();
  }

  mh = CreateFileMapping(fh, FASTDB_SECURITY_ATTRIBUTES, PAGE_READWRITE, 0, size, sharedName);
  int status = GetLastError();

  if (mh == NULL)
  {
    printf("CreateFileMapping failed: %d\n", status);
    return status;
  }

  mmapAddr = (char*)MapViewOfFile(mh, FILE_MAP_ALL_ACCESS, 0, 0, 0);

  if (mmapAddr == NULL)
  {
    return GetLastError();
  }

  if (initialize && status != ERROR_ALREADY_EXISTS)
    //&& osinfo.dwPlatformId != VER_PLATFORM_WIN32_NT)
  {
    // Windows 95 doesn't initialize pages
    memset(mmapAddr+mmapSize, 0, size - mmapSize);
  }

  mmapSize = size;
#endif
#if defined(NO_MMAP) || defined(REPLICATION_SUPPORT)

  int newPageMapSize = (size + dbModMapBlockSize*32 - 1) >> (dbModMapBlockBits + 5);
  int* newPageMap = new int[newPageMapSize];
  memcpy(newPageMap, pageMap, pageMapSize*sizeof(int));
  memset(newPageMap + pageMapSize, 0,
         (newPageMapSize-pageMapSize)*sizeof(int));
  delete[] pageMap;
  pageMapSize = newPageMapSize;
  pageMap = newPageMap;
#endif

#endif

  return ok;
}

int dbFile::close()
{
  delete[] sharedName;
#if defined(REPLICATION_SUPPORT)

  if (db != NULL)
  {
    closing = true;
    stopSync();
    {
      dbCriticalSection cs(replCS);

      if (nRecovered != 0)
      {
        recoveredEvent.wait(replCS);
      }
    }

    syncEvent.close();
    recoveredEvent.close();
    UnmapViewOfFile(diskUpdateCount);
    CloseHandle(cmh);
    CloseHandle(cfh);
  }

  delete[] currUpdateCount;
  currUpdateCount = NULL;
  dbFree(rootPage);
  rootPage = NULL;
#endif

  if (mmapAddr != NULL)
  {
#if defined(NO_MMAP)
    int rc = flush();

    if (rc != ok)
    {
      return rc;
    }

    VirtualFree(mmapAddr, 0, MEM_RELEASE);
    delete[] pageMap;
#else

    if (!UnmapViewOfFile(mmapAddr))
    {
      return GetLastError();
    }

#if defined(REPLICATION_SUPPORT)
    delete[] pageMap;

#endif
#endif

  }

  if (mh != NULL)
  {
    if (!CloseHandle(mh))
    {
      return GetLastError();
    }
  }

  return fh == INVALID_HANDLE_VALUE || CloseHandle(fh) ? ok : GetLastError();
}

char* dbFile::errorText(int code, char* buf, size_t bufSize)
{
#ifndef PHAR_LAP
  int len = FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM,
                          NULL,
                          code,
                          0,
                          buf,
                          bufSize,
                          NULL);

  if (len == 0)
  {
    char errcode[64];
    sprintf(errcode, "unknown error code %u", code);
    strncpy(buf, errcode, bufSize);
  }

#else
  char errcode[64];

  sprintf(errcode, "unknown error code %u", code);

  strncpy(buf, errcode, bufSize);

#endif

  return buf;
}

#else // Unix

#include <unistd.h>
#include <fcntl.h>
#include <errno.h>
#include <sys/stat.h>
#ifndef NO_MMAP
#include <sys/mman.h>
#endif

#ifndef O_SYNC
#define O_SYNC O_FSYNC
#endif

#ifndef O_DSYNC
#define O_DSYNC O_SYNC
#endif


int dbFile::open(char const* name, char const*, bool readonly, size_t initSize, bool replicationSupport)
{
#if defined(USE_SYSV_SHARED_MEMORY) && defined(DISKLESS_CONFIGURATION)

  if (!shmem.open(name, initSize))
  {
    return errno;
  }

  mmapSize = initSize;
  mmapAddr = shmem.get_base();
  fd = -1;
#else
#ifndef NO_MMAP

int mmap_attr = MAP_SHARED;
#endif

int status;
#ifdef DISKLESS_CONFIGURATION
#ifndef MAP_ANONYMOUS

fd = ::open("/dev/zero", O_RDWR, 0);
#else

fd = -1;
mmap_attr |= MAP_ANONYMOUS;
#endif // MAP_ANONYMOUS

mmapSize = initSize;
#else // DISKLESS_CONFIGURATION

fd = ::open(name, readonly ? O_RDONLY : O_RDWR/*|O_DSYNC*/|O_CREAT, 0666);

if (fd < 0)
{
  return errno;
}

mmapSize = lseek(fd, 0, SEEK_END);

if (!readonly && mmapSize < initSize)
{
  mmapSize = initSize;

  if (ftruncate(fd, mmapSize) != ok)
  {
    status = errno;

    if (fd >= 0)
    {
      ::close(fd);
    }

    return status;
  }
}

#endif // DISKLESS_CONFIGURATION
#ifdef NO_MMAP
size_t fileSize = mmapSize;

if (!readonly && mmapSize < initSize)
{
  mmapSize = initSize;

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲图片欧美一区| 一区二区三区中文在线观看| 亚洲韩国一区二区三区| 福利91精品一区二区三区| 欧美精品乱人伦久久久久久| 国产精品麻豆欧美日韩ww| 久久国产人妖系列| 欧美精品少妇一区二区三区| 亚洲人成精品久久久久| 国产成人啪免费观看软件 | 亚洲午夜精品17c| 国产成人午夜高潮毛片| 日韩亚洲欧美一区| 午夜精品福利一区二区三区av| 成人国产一区二区三区精品| 精品国产乱码久久久久久图片| 亚洲一区二区精品视频| 99久久er热在这里只有精品15 | 91精品国产品国语在线不卡| 亚洲黄色免费电影| 成人av免费网站| 国产婷婷色一区二区三区四区 | 激情五月播播久久久精品| 欧美日本精品一区二区三区| 国产白丝精品91爽爽久久 | 国产午夜精品久久久久久久 | 亚洲福利电影网| 99久久精品99国产精品| 亚洲国产精品传媒在线观看| 激情五月激情综合网| 欧美综合在线视频| 99久久综合狠狠综合久久| 久久久精品国产免大香伊| 蜜桃免费网站一区二区三区 | 国内精品在线播放| 精品久久久久一区| 狠狠色丁香久久婷婷综| 日韩美女主播在线视频一区二区三区| 亚洲成人精品一区| 欧美日韩成人综合在线一区二区| 亚洲精品视频一区二区| 欧洲精品中文字幕| 亚洲一区二区三区中文字幕 | 99精品视频一区| 亚洲丝袜精品丝袜在线| 色综合中文综合网| 成人永久aaa| 中文无字幕一区二区三区| 成人中文字幕电影| 亚洲欧洲国产日本综合| 99久久精品久久久久久清纯| 亚洲三级在线播放| 欧美亚洲国产bt| 午夜av一区二区三区| 日韩欧美色综合网站| 久久精品99久久久| 国产亚洲精品bt天堂精选| 国产精品一区二区三区四区 | 7777精品伊人久久久大香线蕉| 午夜精彩视频在线观看不卡| 制服丝袜中文字幕亚洲| 久久爱另类一区二区小说| 日韩午夜在线播放| 国产精品小仙女| 亚洲女厕所小便bbb| 欧美网站一区二区| 久久精品国产精品亚洲红杏| 国产日韩欧美精品在线| 色综合久久久久久久久久久| 亚洲福利国产精品| 欧美大度的电影原声| 成人一区二区视频| 亚洲一级二级在线| 日韩精品一区二| 99麻豆久久久国产精品免费优播| 亚洲一级片在线观看| 精品免费国产二区三区| 成人短视频下载| 亚洲大片在线观看| 国产色综合久久| 一本久久综合亚洲鲁鲁五月天| 午夜精品在线看| 久久精品人人做人人爽97| 色婷婷亚洲一区二区三区| 日本美女一区二区| 国产精品视频一二三| 欧美日本一道本在线视频| 国产成人高清在线| 天堂精品中文字幕在线| 欧美激情一区二区三区蜜桃视频| 91精品办公室少妇高潮对白| 蜜桃av噜噜一区二区三区小说| 国产精品高潮呻吟| 欧美一卡2卡3卡4卡| 不卡区在线中文字幕| 日本欧美在线看| 自拍偷拍国产精品| 在线播放视频一区| 91丨porny丨最新| 久久99久久久久| 洋洋成人永久网站入口| 国产日韩三级在线| 欧美一区二区免费| 日本韩国精品一区二区在线观看| 麻豆精品新av中文字幕| 一区二区三区四区不卡在线 | 国产精品午夜在线| 欧美一二三区在线观看| 91网上在线视频| 精品一区二区综合| 偷拍一区二区三区| 中文字幕一区二区5566日韩| 日韩视频永久免费| 欧美影院一区二区三区| 国产不卡在线一区| 久久精品国产精品亚洲红杏| 亚洲一区视频在线| 中文字幕中文字幕一区| 久久天堂av综合合色蜜桃网| 欧美日韩视频不卡| 91福利视频网站| av电影天堂一区二区在线| 国产综合久久久久久久久久久久| 日韩中文字幕不卡| 亚洲午夜在线观看视频在线| 国产精品美女久久久久aⅴ | 色视频欧美一区二区三区| 久久er99精品| 悠悠色在线精品| 久久精子c满五个校花| 精品视频一区三区九区| www.色精品| 狠狠色丁香久久婷婷综合_中| 一二三区精品视频| 国产精品美女久久福利网站| 日韩欧美一区二区不卡| 日本乱码高清不卡字幕| 粉嫩av一区二区三区| 免费美女久久99| 亚洲一区在线观看视频| 国产精品久久久久久久久果冻传媒| 69p69国产精品| 91黄视频在线| 成人一区二区视频| 精品影院一区二区久久久| 亚洲成人av免费| 亚洲三级免费观看| 中文字幕精品综合| 国产亚洲欧美日韩日本| 日韩免费一区二区| 欧美日韩在线观看一区二区| 99久久久国产精品| 国产乱子轮精品视频| 免费成人深夜小野草| 亚洲chinese男男1069| 亚洲成人自拍网| 午夜a成v人精品| 日本aⅴ亚洲精品中文乱码| 日韩高清电影一区| 欧美a级一区二区| 久久99日本精品| 国产精品一区二区你懂的| 国产精品888| av电影天堂一区二区在线观看| 99视频一区二区| 色欧美日韩亚洲| 欧美年轻男男videosbes| 91精品国产一区二区三区| 91精品国产欧美一区二区成人| 日韩欧美国产精品一区| 欧美tk丨vk视频| 国产午夜精品美女毛片视频| 国产精品久久一卡二卡| 亚洲蜜臀av乱码久久精品 | 国产免费成人在线视频| 国产精品美女久久久久久久久| 亚洲欧美一区二区久久| 亚洲综合偷拍欧美一区色| 日本欧美一区二区| 激情综合网激情| 成人国产精品免费观看视频| 一本到三区不卡视频| 欧美日韩精品一区二区三区四区 | 日韩视频免费观看高清完整版在线观看 | 蜜桃视频在线观看一区| 久久免费电影网| 亚洲成人动漫av| 午夜欧美视频在线观看| 欧美aⅴ一区二区三区视频| 国产福利精品导航| 在线影视一区二区三区| 欧美一区2区视频在线观看| 国产欧美精品区一区二区三区| 亚洲视频狠狠干| 日韩成人精品视频| 大尺度一区二区| 欧美日韩精品三区| 久久久天堂av| 亚洲综合久久av| 狠狠狠色丁香婷婷综合激情 |