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

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

?? mitab_indfile.cpp

?? 支持各種柵格圖像和矢量圖像讀取的庫
?? CPP
?? 第 1 頁 / 共 5 頁
字號:
    /* First index def. starts at byte 48 */    poHeaderBlock->GotoByteInBlock(48);    for(int iIndex=0; iIndex<m_numIndexes; iIndex++)    {        /*-------------------------------------------------------------         * Read next index definition         *------------------------------------------------------------*/        GInt32 nRootNodePtr = poHeaderBlock->ReadInt32();        poHeaderBlock->ReadInt16();   // skip... max. num of entries per node        int nTreeDepth = poHeaderBlock->ReadByte();        int nKeyLength = poHeaderBlock->ReadByte();        poHeaderBlock->GotoByteRel(8); // skip next 8 bytes;        /*-------------------------------------------------------------         * And init root node for this index.         * Note that if nRootNodePtr==0 then this means that the          * corresponding index does not exist (i.e. has been deleted?)         * so we simply do not allocate the root node in this case.         * An error will be produced if the user tries to access this index         * later during execution.         *------------------------------------------------------------*/        if (nRootNodePtr > 0)        {            m_papoIndexRootNodes[iIndex] = new TABINDNode(m_eAccessMode);            if (m_papoIndexRootNodes[iIndex]->InitNode(m_fp, nRootNodePtr,                                                       nKeyLength, nTreeDepth,                                                       FALSE,                                                       &m_oBlockManager)!= 0)            {                // CPLError has already been called                delete poHeaderBlock;                return -1;            }            // Alloc a temporary key buffer for this index.            // This buffer will be used by the BuildKey() method            m_papbyKeyBuffers[iIndex] = (GByte *)CPLCalloc(nKeyLength+1,                                                            sizeof(GByte));        }        else        {            m_papoIndexRootNodes[iIndex] = NULL;            m_papbyKeyBuffers[iIndex] = NULL;        }    }    /*-----------------------------------------------------------------     * OK, we won't need the header block any more... free it.     *----------------------------------------------------------------*/    delete poHeaderBlock;    return 0;}/********************************************************************** *                   TABINDFile::WriteHeader() * * (private method) * Write the header block based on current index information. * * Returns 0 on success, -1 on error. **********************************************************************/int TABINDFile::WriteHeader(){    CPLAssert(m_fp);    CPLAssert(m_eAccessMode == TABWrite || m_eAccessMode == TABReadWrite);    /*-----------------------------------------------------------------     * Write the 48 bytes of file header     *----------------------------------------------------------------*/    TABRawBinBlock *poHeaderBlock;    poHeaderBlock = new TABRawBinBlock(m_eAccessMode, TRUE);    poHeaderBlock->InitNewBlock(m_fp, 512, 0);    poHeaderBlock->WriteInt32( IND_MAGIC_COOKIE );    poHeaderBlock->WriteInt16( 100 );   // ???    poHeaderBlock->WriteInt16( 512 );   // ???    poHeaderBlock->WriteInt32( 0 );     // ???    poHeaderBlock->WriteInt16( m_numIndexes );    poHeaderBlock->WriteInt16( 0x15e7); // ???    poHeaderBlock->WriteInt16( 10 );    // ???    poHeaderBlock->WriteInt16( 0x611d); // ???    poHeaderBlock->WriteZeros( 28 );    /*-----------------------------------------------------------------     * The first index definition starts at byte 48     *----------------------------------------------------------------*/    for(int iIndex=0; iIndex<m_numIndexes; iIndex++)    {        TABINDNode *poRootNode = m_papoIndexRootNodes[iIndex];        if (poRootNode)        {            /*---------------------------------------------------------             * Write next index definition             *--------------------------------------------------------*/            poHeaderBlock->WriteInt32(poRootNode->GetNodeBlockPtr());            poHeaderBlock->WriteInt16(poRootNode->GetMaxNumEntries());            poHeaderBlock->WriteByte( poRootNode->GetSubTreeDepth());            poHeaderBlock->WriteByte( poRootNode->GetKeyLength());            poHeaderBlock->WriteZeros( 8 );            /*---------------------------------------------------------             * Look for overflow of the SubTreeDepth field (byte)             *--------------------------------------------------------*/            if (poRootNode->GetSubTreeDepth() > 255)            {                CPLError(CE_Failure, CPLE_AssertionFailed,                         "Index no %d is too large and will not be useable. "                         "(SubTreeDepth = %d, cannot exceed 255).",                         iIndex+1, poRootNode->GetSubTreeDepth());                return -1;            }        }        else        {            /*---------------------------------------------------------             * NULL Root Node: This index has likely been deleted             *--------------------------------------------------------*/            poHeaderBlock->WriteZeros( 16 );        }    }    /*-----------------------------------------------------------------     * OK, we won't need the header block any more... write and free it.     *----------------------------------------------------------------*/    if (poHeaderBlock->CommitToFile() != 0)        return -1;    delete poHeaderBlock;    return 0;}/********************************************************************** *                   TABINDFile::ValidateIndexNo() * * Private method to validate the index no parameter of some methods... * returns 0 if index no. is OK, or produces an error ands returns -1 * if index no is not valid.  **********************************************************************/int TABINDFile::ValidateIndexNo(int nIndexNumber){    if (m_fp == NULL)    {        CPLError(CE_Failure, CPLE_AssertionFailed,                 "TABINDFile: File has not been opened yet!");        return -1;    }    if (nIndexNumber < 1 || nIndexNumber > m_numIndexes ||        m_papoIndexRootNodes == NULL ||         m_papoIndexRootNodes[nIndexNumber-1] == NULL)    {        CPLError(CE_Failure, CPLE_AssertionFailed,                 "No field index number %d in %s: Valid range is [1..%d].",                 nIndexNumber, m_pszFname, m_numIndexes);        return -1;    }    return 0;  // Index seems valid}/********************************************************************** *                   TABINDFile::SetIndexFieldType() * * Sets the field type for the specified index. * This information will then be used in building the key values, etc. * * Returns 0 on success, -1 on error. **********************************************************************/int TABINDFile::SetIndexFieldType(int nIndexNumber, TABFieldType eType){    if (ValidateIndexNo(nIndexNumber) != 0)        return -1;    return m_papoIndexRootNodes[nIndexNumber-1]->SetFieldType(eType);}/********************************************************************** *                   TABINDFile::SetIndexUnique() * * Indicate that an index's keys are unique.  This allows for some  * optimization with read access.  By default, an index is treated as if * its keys could have duplicates. * * Returns 0 on success, -1 on error. **********************************************************************/int TABINDFile::SetIndexUnique(int nIndexNumber, GBool bUnique/*=TRUE*/){    if (ValidateIndexNo(nIndexNumber) != 0)        return -1;    m_papoIndexRootNodes[nIndexNumber-1]->SetUnique(bUnique);    return 0;}/********************************************************************** *                   TABINDFile::BuildKey() * * Encode a field value in the form required to be compared with index * keys in the specified index. *  * Note that index numbers are positive values starting at 1. * * Returns a reference to an internal buffer that is valid only until the * next call to BuildKey().  (should not be freed by the caller). * Returns NULL if field index is invalid. * * The first flavour of the function handles integer type of values, this * corresponds to MapInfo types: integer, smallint, logical and date **********************************************************************/GByte *TABINDFile::BuildKey(int nIndexNumber, GInt32 nValue){    if (ValidateIndexNo(nIndexNumber) != 0)        return NULL;    int nKeyLength = m_papoIndexRootNodes[nIndexNumber-1]->GetKeyLength();        /*-----------------------------------------------------------------     * Convert all int values to MSB using the right number of bytes     * Note:     * The most significant bit has to be unset for negative values,     * and to be set for positive ones... that's the reverse of what it     * should usually be.  Adding 0x80 to the MSB byte will do the job.     *----------------------------------------------------------------*/    switch(nKeyLength)    {      case 1:        m_papbyKeyBuffers[nIndexNumber-1][0] = (GByte)(nValue & 0xff)+0x80;        break;      case 2:        m_papbyKeyBuffers[nIndexNumber-1][0] =                                        (GByte)(nValue/0x100 & 0xff)+0x80;        m_papbyKeyBuffers[nIndexNumber-1][1] = (GByte)(nValue & 0xff);        break;      case 4:        m_papbyKeyBuffers[nIndexNumber-1][0] =                                        (GByte)(nValue/0x1000000 &0xff)+0x80;        m_papbyKeyBuffers[nIndexNumber-1][1] = (GByte)(nValue/0x10000 & 0xff);        m_papbyKeyBuffers[nIndexNumber-1][2] = (GByte)(nValue/0x100 &0xff);        m_papbyKeyBuffers[nIndexNumber-1][3] = (GByte)(nValue & 0xff);        break;      default:        CPLError(CE_Failure, CPLE_AssertionFailed,                 "BuildKey(): %d bytes integer key length not supported",                 nKeyLength);        break;    }    return m_papbyKeyBuffers[nIndexNumber-1];}/********************************************************************** *                   TABINDFile::BuildKey() * * BuildKey() for string fields **********************************************************************/GByte *TABINDFile::BuildKey(int nIndexNumber, const char *pszStr){    if (ValidateIndexNo(nIndexNumber) != 0 || pszStr == NULL)        return NULL;    int nKeyLength = m_papoIndexRootNodes[nIndexNumber-1]->GetKeyLength();    /*-----------------------------------------------------------------     * Strings keys are all in uppercase, and padded with '\0'     *----------------------------------------------------------------*/    int i=0;    for (i=0; i<nKeyLength && pszStr[i] != '\0'; i++)    {        m_papbyKeyBuffers[nIndexNumber-1][i] = (GByte)toupper(pszStr[i]);    }    /* Pad the end of the buffer with '\0' */    for( ; i<nKeyLength; i++)    {           m_papbyKeyBuffers[nIndexNumber-1][i] = '\0';    }            return m_papbyKeyBuffers[nIndexNumber-1];}/********************************************************************** *                   TABINDFile::BuildKey() * * BuildKey() for float and decimal fields **********************************************************************/GByte *TABINDFile::BuildKey(int nIndexNumber, double dValue){    if (ValidateIndexNo(nIndexNumber) != 0)        return NULL;    int nKeyLength = m_papoIndexRootNodes[nIndexNumber-1]->GetKeyLength();    CPLAssert(nKeyLength == 8 && sizeof(double) == 8);    /*-----------------------------------------------------------------     * Convert double and decimal values...      * Reverse the sign of the value, and convert to MSB     *----------------------------------------------------------------*/    dValue = -dValue;#ifndef CPL_MSB    CPL_SWAPDOUBLE(&dValue);#endif    memcpy(m_papbyKeyBuffers[nIndexNumber-1], (GByte*)(&dValue), nKeyLength);    return m_papbyKeyBuffers[nIndexNumber-1];}/********************************************************************** *                   TABINDFile::FindFirst() * * Search one of the indexes for a key value.   * * Note that index numbers are positive values starting at 1. * * 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::FindFirst(int nIndexNumber, GByte *pKeyValue){    if (ValidateIndexNo(nIndexNumber) != 0)        return -1;    return m_papoIndexRootNodes[nIndexNumber-1]->FindFirst(pKeyValue);}/********************************************************************** *                   TABINDFile::FindNext() * * Continue the Search for pKeyValue previously initiated by FindFirst().   * NOTE: FindFirst() MUST have been previously called for this call to *       work... * * Note that index numbers are positive values starting at 1.

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
在线成人av影院| 成人av电影在线观看| 中文字幕成人网| 3d成人动漫网站| 色综合一个色综合亚洲| 久久99精品久久久久久久久久久久| 国产精品国产自产拍高清av| 日韩精品一区二区三区在线观看| 91亚洲精品乱码久久久久久蜜桃 | 国产欧美视频在线观看| 欧美日韩精品欧美日韩精品一| 成人精品小蝌蚪| 奇米一区二区三区av| 亚洲欧美一区二区久久| 欧美国产一区二区在线观看| 日韩午夜av电影| 在线一区二区三区| 99久久精品免费看| 国产大陆亚洲精品国产| 六月丁香婷婷色狠狠久久| 亚洲一区二区三区国产| 日韩美女视频19| 国产精品视频一二三区| 久久久久国产精品麻豆ai换脸| 欧美一区二区三区四区五区| 欧美日韩视频在线一区二区| 97久久超碰精品国产| 丁香网亚洲国际| 国产一区在线精品| 麻豆精品国产传媒mv男同| 性欧美疯狂xxxxbbbb| 亚洲一本大道在线| 伊人婷婷欧美激情| 一区二区在线观看视频在线观看| 日韩美女啊v在线免费观看| 欧洲一区二区三区在线| 亚洲国产欧美在线| 欧美日韩国产一区二区三区地区| 亚洲手机成人高清视频| 国产精品伦理一区二区| 久久亚洲一级片| 日韩免费高清av| 日韩欧美一区电影| 日韩一级片网站| 日韩女优av电影| 亚洲精品一区二区三区福利| 日韩午夜三级在线| 亚洲精品在线观| 久久免费视频色| 中文字幕的久久| 国产精品每日更新在线播放网址| 中文字幕在线视频一区| 亚洲欧美自拍偷拍| 一区二区三区鲁丝不卡| 亚洲欧美日韩在线播放| 亚洲一区在线观看免费观看电影高清| 依依成人综合视频| 日精品一区二区三区| 久久国产三级精品| 欧美成人精品3d动漫h| 欧美夫妻性生活| 福利一区二区在线| 99久久综合国产精品| 色妹子一区二区| 欧美日韩国产美| 亚洲激情综合网| 免费人成精品欧美精品| 国产一区二区不卡| 91在线一区二区三区| 欧美精品久久久久久久多人混战 | 欧美久久久一区| 日韩免费一区二区| 中文字幕av一区二区三区| 亚洲色大成网站www久久九九| 亚洲成人动漫精品| 韩国三级在线一区| 日本韩国欧美国产| 精品卡一卡二卡三卡四在线| 国产精品午夜在线| 午夜电影网一区| 国产精品1区2区| 在线精品视频一区二区三四| 日韩精品一区二区在线观看| 亚洲人123区| 免费看欧美美女黄的网站| 成人激情小说网站| 日韩欧美一级二级| 国产精品久久久久一区二区三区| 性欧美疯狂xxxxbbbb| 成人网在线播放| 在线播放日韩导航| 亚洲欧洲精品一区二区三区| 天堂va蜜桃一区二区三区| 成人蜜臀av电影| 欧美一级片在线| 亚洲精品一二三| 国产美女久久久久| 日韩一区二区免费在线观看| 综合电影一区二区三区| 国产精品一色哟哟哟| 欧美精品乱人伦久久久久久| 中文字幕中文在线不卡住| 看电视剧不卡顿的网站| 91福利视频久久久久| 国产无一区二区| 青草av.久久免费一区| 色诱视频网站一区| 国产日产欧美一区二区三区 | 国产乱人伦精品一区二区在线观看| 色婷婷激情久久| 国产亚洲精品精华液| 日韩在线一区二区| 在线观看免费一区| 国产精品久久久久久福利一牛影视 | 欧美激情自拍偷拍| 久久精品国产99| 欧美性感一类影片在线播放| 国产精品日韩成人| 国产精品77777| 日韩欧美不卡在线观看视频| 亚洲香蕉伊在人在线观| 色伊人久久综合中文字幕| 中文字幕精品一区| 国产精品2024| 久久九九全国免费| 国产大片一区二区| 国产欧美一区二区三区在线看蜜臀| 麻豆精品蜜桃视频网站| 欧美一二三四在线| 日韩精品欧美精品| 欧美男男青年gay1069videost| 亚洲一区二区三区四区中文字幕 | 久久综合狠狠综合久久综合88 | 99久久国产综合精品女不卡| 国产精品福利影院| 99re热这里只有精品免费视频| 国产网红主播福利一区二区| 国产一二精品视频| 国产欧美一区二区精品仙草咪| 国产自产高清不卡| 久久嫩草精品久久久精品一| 国产成人综合精品三级| 国产日韩v精品一区二区| 国产盗摄视频一区二区三区| 欧美国产精品专区| 不卡电影一区二区三区| 亚洲欧洲日韩在线| 日本福利一区二区| 日日摸夜夜添夜夜添精品视频| 欧美一三区三区四区免费在线看 | 色播五月激情综合网| 亚洲一区二区视频| 91麻豆精品国产91久久久久 | 国产在线一区观看| 欧美国产一区视频在线观看| 99久久免费视频.com| 亚洲男人的天堂网| 欧美日韩日本视频| 日日夜夜免费精品| 久久亚洲欧美国产精品乐播| 北岛玲一区二区三区四区| 亚洲激情第一区| 91精品国产综合久久香蕉麻豆| 蜜乳av一区二区三区| 国产欧美一区二区精品性| 日本久久电影网| 蜜芽一区二区三区| 国产精品麻豆一区二区| 91福利国产成人精品照片| 久久av老司机精品网站导航| 久久久久久久久久美女| 色婷婷国产精品| 久久99国产精品久久99果冻传媒| 中文字幕免费观看一区| 欧美日韩一区在线| 国产专区欧美精品| 亚洲激情中文1区| www一区二区| 欧美午夜精品一区二区三区| 九色|91porny| 亚洲男人的天堂网| 2023国产精华国产精品| 色综合亚洲欧洲| 国产中文一区二区三区| 亚洲精品精品亚洲| 久久久蜜桃精品| 欧美三级蜜桃2在线观看| 国产99久久久精品| 图片区日韩欧美亚洲| 国产目拍亚洲精品99久久精品| 欧美精品一级二级| 成人福利视频在线| 免费观看91视频大全| 亚洲精品久久嫩草网站秘色| 日韩精品在线一区二区| 色综合欧美在线| 国产精品亚洲午夜一区二区三区| 亚洲v日本v欧美v久久精品| 国产日韩欧美高清在线| 日韩精品一区在线观看|