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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? mitab_indfile.cpp

?? 支持各種柵格圖像和矢量圖像讀取的庫(kù)
?? CPP
?? 第 1 頁(yè) / 共 5 頁(yè)
字號(hào):
 * * Return value: *  - the key's corresponding record number in the .DAT file (greater than 0) *  - 0 if the key was not found *  - or -1 if an error happened **********************************************************************/GInt32 TABINDFile::FindNext(int nIndexNumber, GByte *pKeyValue){    if (ValidateIndexNo(nIndexNumber) != 0)        return -1;    return m_papoIndexRootNodes[nIndexNumber-1]->FindNext(pKeyValue);}/********************************************************************** *                   TABINDFile::CreateIndex() * * Create a new index with the specified field type and size. * Field size applies only to char field type... the other types have a * predefined key length. * * Key length is limited to 128 chars. char fields longer than 128 chars * will have their key truncated to 128 bytes. * * Note that a .IND file can contain only a maximum of 29 indexes. * * Returns the new field index on success (greater than 0), or -1 on error. **********************************************************************/int TABINDFile::CreateIndex(TABFieldType eType, int nFieldSize){    int i, nNewIndexNo = -1;    if (m_fp == NULL ||         (m_eAccessMode != TABWrite && m_eAccessMode != TABReadWrite))        return -1;    /*-----------------------------------------------------------------     * Look for an empty slot in the current array, if there is none     * then extend the array.     *----------------------------------------------------------------*/    for(i=0; m_papoIndexRootNodes && i<m_numIndexes; i++)    {        if (m_papoIndexRootNodes[i] == NULL)        {            nNewIndexNo = i;            break;        }    }    if (nNewIndexNo == -1 && m_numIndexes >= 29)    {        CPLError(CE_Failure, CPLE_AppDefined,                 "Cannot add new index to %s.  A dataset can contain only a "                 "maximum of 29 indexes.", m_pszFname);        return -1;    }    if (nNewIndexNo == -1)    {        /*-------------------------------------------------------------         * Add a slot for new index at the end of the nodes array.         *------------------------------------------------------------*/        m_numIndexes++;        m_papoIndexRootNodes = (TABINDNode**)CPLRealloc( m_papoIndexRootNodes,                                                         m_numIndexes*                                                         sizeof(TABINDNode*));        m_papbyKeyBuffers = (GByte **)CPLRealloc(m_papbyKeyBuffers,                                                 m_numIndexes*sizeof(GByte*));        nNewIndexNo = m_numIndexes-1;    }    /*-----------------------------------------------------------------     * Alloc and init new node     * The call to InitNode() automatically allocates storage space for     * the node in the file.     * New nodes are created with a subtree_depth=1 since they start as     * leaf nodes, i.e. their entries point directly to .DAT records     *----------------------------------------------------------------*/    int nKeyLength = ((eType == TABFInteger)  ? 4:                      (eType == TABFSmallInt) ? 2:                      (eType == TABFFloat)    ? 8:                      (eType == TABFDecimal)  ? 8:                      (eType == TABFDate)     ? 4:                      (eType == TABFLogical)  ? 4: MIN(128,nFieldSize));    m_papoIndexRootNodes[nNewIndexNo] = new TABINDNode(m_eAccessMode);    if (m_papoIndexRootNodes[nNewIndexNo]->InitNode(m_fp, 0, nKeyLength,                                                     1,  // subtree depth=1                                                    FALSE, // not unique                                                    &m_oBlockManager,                                                     NULL, 0, 0)!= 0)    {        // CPLError has already been called        return -1;    }    // Alloc a temporary key buffer for this index.    // This buffer will be used by the BuildKey() method    m_papbyKeyBuffers[nNewIndexNo] = (GByte *)CPLCalloc(nKeyLength+1,                                                        sizeof(GByte));    // Return 1-based index number    return nNewIndexNo+1;}/********************************************************************** *                   TABINDFile::AddEntry() * * Add an .DAT record entry for pKeyValue in the specified index. * * Note that index numbers are positive values starting at 1. * nRecordNo is the .DAT record number, record numbers start at 1. * * Returns 0 on success, -1 on error **********************************************************************/int TABINDFile::AddEntry(int nIndexNumber, GByte *pKeyValue, GInt32 nRecordNo){    if ((m_eAccessMode != TABWrite && m_eAccessMode != TABReadWrite) ||         ValidateIndexNo(nIndexNumber) != 0)        return -1;    return m_papoIndexRootNodes[nIndexNumber-1]->AddEntry(pKeyValue,nRecordNo);}/********************************************************************** *                   TABINDFile::Dump() * * Dump block contents... available only in DEBUG mode. **********************************************************************/#ifdef DEBUGvoid TABINDFile::Dump(FILE *fpOut /*=NULL*/){    if (fpOut == NULL)        fpOut = stdout;    fprintf(fpOut, "----- TABINDFile::Dump() -----\n");    if (m_fp == NULL)    {        fprintf(fpOut, "File is not opened.\n");    }    else    {        fprintf(fpOut, "File is opened: %s\n", m_pszFname);        fprintf(fpOut, "   m_numIndexes   = %d\n", m_numIndexes);        for(int i=0; i<m_numIndexes && m_papoIndexRootNodes; i++)        {            if (m_papoIndexRootNodes[i])            {                fprintf(fpOut, "  ----- Index # %d -----\n", i+1);                m_papoIndexRootNodes[i]->Dump(fpOut);            }        }    }    fflush(fpOut);}#endif // DEBUG/*===================================================================== *                      class TABINDNode *====================================================================*//********************************************************************** *                   TABINDNode::TABINDNode() * * Constructor. **********************************************************************/TABINDNode::TABINDNode(TABAccess eAccessMode /*=TABRead*/){    m_fp = NULL;    m_poCurChildNode = NULL;    m_nSubTreeDepth = 0;    m_nKeyLength = 0;    m_eFieldType = TABFUnknown;    m_poDataBlock = NULL;    m_numEntriesInNode = 0;    m_nCurIndexEntry = 0;    m_nPrevNodePtr = 0;    m_nNextNodePtr = 0;    m_poBlockManagerRef = NULL;    m_poParentNodeRef = NULL;    m_bUnique = FALSE;    m_eAccessMode = eAccessMode;}/********************************************************************** *                   TABINDNode::~TABINDNode() * * Destructor. **********************************************************************/TABINDNode::~TABINDNode(){    if (m_poCurChildNode)        delete m_poCurChildNode;    if (m_poDataBlock)        delete m_poDataBlock;}/********************************************************************** *                   TABINDNode::InitNode() * * Init a node... this function can be used either to initialize a new * node, or to make it point to a new data block in the file. * * By default, this call will read the data from the file at the * specified location if necessary, and leave the object ready to be searched. * * In write access, if the block does not exist (i.e. nBlockPtr=0) then a * new one is created and initialized. * * poParentNode is used in write access in order to update the parent node * when this node becomes full and has to be split. * * Returns 0 on success, -1 on error. **********************************************************************/int TABINDNode::InitNode(FILE *fp, int nBlockPtr,                          int nKeyLength, int nSubTreeDepth,                          GBool bUnique,                         TABBinBlockManager *poBlockMgr /*=NULL*/,                         TABINDNode *poParentNode /*=NULL*/,                         int nPrevNodePtr /*=0*/, int nNextNodePtr /*=0*/){    /*-----------------------------------------------------------------     * If the block already points to the right block, then don't do      * anything here.     *----------------------------------------------------------------*/    if (m_fp == fp && nBlockPtr> 0 && m_nCurDataBlockPtr == nBlockPtr)        return 0;    // Keep track of some info    m_fp = fp;    m_nKeyLength = nKeyLength;    m_nSubTreeDepth = nSubTreeDepth;    m_nCurDataBlockPtr = nBlockPtr;    m_bUnique = bUnique;    // Do not overwrite the following values if we receive NULL (the defaults)    if (poBlockMgr)        m_poBlockManagerRef = poBlockMgr;    if (poParentNode)        m_poParentNodeRef = poParentNode;    // Set some defaults    m_numEntriesInNode = 0;    m_nPrevNodePtr = nPrevNodePtr;    m_nNextNodePtr = nNextNodePtr;    m_nCurIndexEntry = 0;    /*-----------------------------------------------------------------     * Init RawBinBlock     * The node's buffer has to be created with read/write access since     * the index is a very dynamic structure!     *----------------------------------------------------------------*/    if (m_poDataBlock == NULL)        m_poDataBlock = new TABRawBinBlock(TABReadWrite, TRUE);    if ((m_eAccessMode == TABWrite || m_eAccessMode == TABReadWrite) &&         nBlockPtr == 0 && m_poBlockManagerRef)    {        /*-------------------------------------------------------------         * Write access: Create and init a new block         *------------------------------------------------------------*/        m_nCurDataBlockPtr = m_poBlockManagerRef->AllocNewBlock();        m_poDataBlock->InitNewBlock(m_fp, 512, m_nCurDataBlockPtr);        m_poDataBlock->WriteInt32( m_numEntriesInNode );        m_poDataBlock->WriteInt32( m_nPrevNodePtr );        m_poDataBlock->WriteInt32( m_nNextNodePtr );    }    else    {        CPLAssert(m_nCurDataBlockPtr > 0);        /*-------------------------------------------------------------         * Read the data block from the file, applies to read access, or         * to write access (to modify an existing block)         *------------------------------------------------------------*/        if (m_poDataBlock->ReadFromFile(m_fp, m_nCurDataBlockPtr, 512) != 0)        {            // CPLError() has already been called.            return -1;        }        m_poDataBlock->GotoByteInBlock(0);        m_numEntriesInNode = m_poDataBlock->ReadInt32();        m_nPrevNodePtr = m_poDataBlock->ReadInt32();        m_nNextNodePtr = m_poDataBlock->ReadInt32();    }    // m_poDataBlock is now positioned at the beginning of the key entries    return 0;}/********************************************************************** *                   TABINDNode::GotoNodePtr() * * Move to the specified node ptr, and read the new node data from the file. * * This is just a cover funtion on top of InitNode() **********************************************************************/int TABINDNode::GotoNodePtr(GInt32 nNewNodePtr){    // First flush current changes if any.    if ((m_eAccessMode == TABWrite || m_eAccessMode == TABReadWrite) &&         m_poDataBlock && m_poDataBlock->CommitToFile() != 0)        return -1;    CPLAssert(nNewNodePtr % 512 == 0);    // Then move to the requested location.    return InitNode(m_fp, nNewNodePtr, m_nKeyLength, m_nSubTreeDepth,                     m_bUnique);}/********************************************************************** *                   TABINDNode::ReadIndexEntry() * * Read the key value and record/node ptr for the specified index entry * inside the current node data. * * nEntryNo is the 0-based index of the index entry that we are interested * in inside the current node. * * Returns the record/node ptr, and copies the key value inside the * buffer pointed to by *pKeyValue... this assumes that *pKeyValue points * to a buffer big enough to hold the key value (m_nKeyLength bytes). * If pKeyValue == NULL, then this parameter is ignored and the key value * is not copied. **********************************************************************/GInt32 TABINDNode::ReadIndexEntry(int nEntryNo, GByte *pKeyValue){    GInt32 nRecordPtr = 0;

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美激情资源网| 蜜桃av一区二区在线观看| 中文字幕国产精品一区二区| 欧美变态tickling挠脚心| 日韩一区二区三区免费看 | 中文字幕人成不卡一区| 国产女主播在线一区二区| 久久亚洲精品国产精品紫薇| 2020国产精品| 亚洲国产精品99久久久久久久久| 国产欧美精品在线观看| 国产色一区二区| 国产精品福利一区| 最近日韩中文字幕| 亚洲午夜私人影院| 日本少妇一区二区| 精品午夜一区二区三区在线观看| 国产麻豆日韩欧美久久| 成人a级免费电影| 色诱亚洲精品久久久久久| 欧美亚洲国产bt| 91麻豆精品国产91久久久久久| 日韩欧美国产午夜精品| 国产欧美综合在线观看第十页| 国产精品乱子久久久久| 一区二区在线观看免费| 日韩国产欧美三级| 国产精品一线二线三线| 99re在线精品| 欧美肥胖老妇做爰| 久久精品一区四区| 亚洲综合在线免费观看| 美洲天堂一区二卡三卡四卡视频| 国产伦精品一区二区三区免费| 成人a免费在线看| 精品1区2区3区| 久久麻豆一区二区| 亚洲伦在线观看| 97久久人人超碰| 在线免费精品视频| 精品美女被调教视频大全网站| 中文字幕精品三区| 性欧美疯狂xxxxbbbb| 狠狠狠色丁香婷婷综合久久五月| 成人动漫一区二区在线| 欧美精品免费视频| 亚洲国产经典视频| 午夜日韩在线观看| 国产成人在线色| 欧美日韩一区国产| 国产精品免费aⅴ片在线观看| 一区二区三区免费| 激情五月激情综合网| 99热国产精品| 精品成人私密视频| 一区二区三区在线高清| 韩国午夜理伦三级不卡影院| 色综合久久88色综合天天免费| 日韩三级电影网址| 亚洲欧美日韩久久精品| 国产一区视频网站| 欧美美女黄视频| 亚洲图片你懂的| 国产乱码精品1区2区3区| 欧美日本精品一区二区三区| 亚洲国产成人午夜在线一区| 热久久免费视频| 色欧美片视频在线观看在线视频| 亚洲精品在线一区二区| 亚洲成人资源网| 91欧美激情一区二区三区成人| 精品免费日韩av| 日韩激情视频在线观看| 91丨porny丨蝌蚪视频| 精品国产sm最大网站免费看| 亚洲成人先锋电影| 91久久精品一区二区三| 国产日韩精品一区| 国产综合久久久久久鬼色| 在线成人av网站| 亚洲综合免费观看高清在线观看| 成人午夜精品在线| 久久精品一区二区三区不卡| 免费观看在线色综合| 欧美精品三级日韩久久| 亚洲一二三四区不卡| 色狠狠色狠狠综合| 国产精品私人影院| 国产成人午夜视频| 久久精品视频免费观看| 韩国中文字幕2020精品| 欧美成人免费网站| 毛片av中文字幕一区二区| 欧美日韩成人在线一区| 亚洲成人免费观看| 欧美日韩国产精选| 亚洲高清不卡在线观看| 欧美日韩一区二区三区四区五区 | 亚洲精品一二三四区| 99这里都是精品| 日韩理论电影院| 91在线云播放| 一区二区高清视频在线观看| 色综合天天在线| 亚洲日本在线天堂| eeuss鲁片一区二区三区在线观看 eeuss鲁片一区二区三区在线看 | 日韩av电影免费观看高清完整版 | 高潮精品一区videoshd| 欧美激情在线一区二区三区| 国产jizzjizz一区二区| 中文一区在线播放| av动漫一区二区| 亚洲男同1069视频| 日本久久一区二区| 亚洲国产裸拍裸体视频在线观看乱了| 欧美在线免费视屏| 亚洲成av人影院| 制服丝袜中文字幕一区| 午夜欧美在线一二页| 91精品视频网| 九色|91porny| 中国色在线观看另类| 91丝袜高跟美女视频| 亚洲一区二区三区中文字幕| 欧美久久婷婷综合色| 久久 天天综合| 亚洲国产精品传媒在线观看| 97精品电影院| 天天综合日日夜夜精品| 欧美xfplay| 白白色 亚洲乱淫| 亚洲午夜久久久久久久久电影网| 欧美老女人在线| 国产美女精品一区二区三区| 亚洲少妇30p| 7777精品伊人久久久大香线蕉经典版下载 | 91精品久久久久久蜜臀| 国产一区二区精品久久91| 国产精品久久久久影院亚瑟 | 一区二区三区在线观看欧美| 91麻豆精品国产91久久久久久| 韩国一区二区三区| 亚洲视频中文字幕| 欧美日韩免费电影| 国产激情视频一区二区三区欧美| 亚洲欧美一区二区久久| 日韩欧美国产1| 99久久伊人久久99| 日本中文字幕不卡| 一色屋精品亚洲香蕉网站| 制服丝袜国产精品| 成人涩涩免费视频| 日本免费新一区视频| 欧美国产视频在线| 欧美一区二区免费| 97久久超碰精品国产| 久久黄色级2电影| 亚洲另类在线制服丝袜| 精品日产卡一卡二卡麻豆| 色欧美日韩亚洲| 国产精一区二区三区| 日日骚欧美日韩| 亚洲免费大片在线观看| 久久久久久久久久久黄色| 欧美日韩高清一区二区三区| 成人av影院在线| 免费美女久久99| 亚洲一区二区三区小说| 国产精品天干天干在线综合| 欧美大白屁股肥臀xxxxxx| av在线不卡观看免费观看| 久久精品国产在热久久| 亚洲一卡二卡三卡四卡| 国产精品私人影院| 精品久久久久香蕉网| 欧美日韩视频一区二区| 99精品黄色片免费大全| 国产一区二区三区视频在线播放| 亚洲国产精品久久久久婷婷884| 中文字幕av不卡| 久久先锋资源网| 欧美一区二区三区喷汁尤物| 在线免费观看一区| 日韩一区二区在线免费观看| 欧美中文字幕一区二区三区亚洲| 懂色av一区二区三区免费观看| 久久狠狠亚洲综合| 男男gaygay亚洲| 视频一区视频二区中文| 亚洲一线二线三线久久久| 国产精品成人免费| 国产亚洲精品福利| 久久免费看少妇高潮| 欧美成人一区二区三区在线观看| 欧美日本一区二区三区| 欧美三级视频在线观看| 91福利视频在线| 色综合久久综合网欧美综合网| 99视频精品在线| 成人av网站大全|