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

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

?? mitab_indfile.cpp

?? 支持各種柵格圖像和矢量圖像讀取的庫
?? CPP
?? 第 1 頁 / 共 5 頁
字號:
/********************************************************************** * $Id: mitab_indfile.cpp,v 1.11 2005/04/29 19:08:56 dmorissette Exp $ * * Name:     mitab_indfile.cpp * Project:  MapInfo TAB Read/Write library * Language: C++ * Purpose:  Implementation of the TABINDFile class used to handle *           access to .IND file (table field indexes) attached to a .DAT file * Author:   Daniel Morissette, dmorissette@dmsolutions.ca * ********************************************************************** * Copyright (c) 1999-2001, Daniel Morissette * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the "Software"), * to deal in the Software without restriction, including without limitation * the rights to use, copy, modify, merge, publish, distribute, sublicense, * and/or sell copies of the Software, and to permit persons to whom the * Software is furnished to do so, subject to the following conditions: *  * The above copyright notice and this permission notice shall be included * in all copies or substantial portions of the Software. *  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER  * DEALINGS IN THE SOFTWARE. ********************************************************************** * * $Log: mitab_indfile.cpp,v $ * Revision 1.11  2005/04/29 19:08:56  dmorissette * Produce an error if m_nSubtreeDepth > 255 when creating a .IND (OGR bug 839) * * Revision 1.10  2004/06/30 20:29:04  dmorissette * Fixed refs to old address danmo@videotron.ca * * Revision 1.9  2003/07/24 02:45:57  daniel * Fixed problem scanning node in TABINDNode::FindNext() - bug 2176, FW * * Revision 1.8  2001/05/01 03:38:23  daniel * Added update support (allows creating new index in existing IND files). * * Revision 1.7  2000/11/13 22:17:57  daniel * When a (child) node's first entry is replaced by InsertEntry() then make * sure that node's key is updated in its parent node. * * Revision 1.6  2000/03/01 00:32:00  daniel * Added support for float keys, and completed support for generating indexes * * Revision 1.5  2000/02/28 16:57:42  daniel * Added support for writing indexes * * Revision 1.4  2000/01/15 22:30:44  daniel * Switch to MIT/X-Consortium OpenSource license * * Revision 1.3  1999/12/14 05:52:05  daniel * Fixed compile error on Windows * * Revision 1.2  1999/12/14 02:19:42  daniel * Completed .IND support for simple TABViews * * Revision 1.1  1999/11/20 15:49:07  daniel * Initial version * **********************************************************************/#include "mitab.h"#include "mitab_utils.h"#include <ctype.h>      /* toupper() *//*===================================================================== *                      class TABINDFile *====================================================================*/#define IND_MAGIC_COOKIE  24242424/********************************************************************** *                   TABINDFile::TABINDFile() * * Constructor. **********************************************************************/TABINDFile::TABINDFile(){    m_fp = NULL;    m_pszFname = NULL;    m_eAccessMode = TABRead;    m_numIndexes = 0;    m_papoIndexRootNodes = NULL;    m_papbyKeyBuffers = NULL;}/********************************************************************** *                   TABINDFile::~TABINDFile() * * Destructor. **********************************************************************/TABINDFile::~TABINDFile(){    Close();}/********************************************************************** *                   TABINDFile::Open() * * Open a .IND file, read the header and the root nodes for all the * field indexes, and be ready to search the indexes. * * If the filename that is passed in contains a .DAT extension then * the extension will be changed to .IND before trying to open the file. * * Note that we pass a pszAccess flag, but only read access is supported * for now (and there are no plans to support write.) * * Set bTestOpenNoError=TRUE to silently return -1 with no error message * if the file cannot be opened because it does not exist. * * Returns 0 on success, -1 on error. **********************************************************************/int TABINDFile::Open(const char *pszFname, const char *pszAccess,                     GBool bTestOpenNoError /*=FALSE*/){    int         nLen;    if (m_fp)    {        CPLError(CE_Failure, CPLE_FileIO,                 "Open() failed: object already contains an open file");        return -1;    }    /*-----------------------------------------------------------------     * Validate access mode and make sure we use binary access.     * Note that for write access, we actually need read/write access to     * the file.     *----------------------------------------------------------------*/    if (EQUALN(pszAccess, "r", 1) && strchr(pszAccess, '+') != NULL)    {        m_eAccessMode = TABReadWrite;        pszAccess = "rb+";    }    else if (EQUALN(pszAccess, "r", 1))    {        m_eAccessMode = TABRead;        pszAccess = "rb";    }    else if (EQUALN(pszAccess, "w", 1))    {        m_eAccessMode = TABWrite;        pszAccess = "wb+";    }    else    {        CPLError(CE_Failure, CPLE_FileIO,                 "Open() failed: access mode \"%s\" not supported", pszAccess);        return -1;    }    /*-----------------------------------------------------------------     * Change .DAT (or .TAB) extension to .IND if necessary     *----------------------------------------------------------------*/    m_pszFname = CPLStrdup(pszFname);    nLen = strlen(m_pszFname);    if (nLen > 4 && !EQUAL(m_pszFname+nLen-4, ".IND") )        strcpy(m_pszFname+nLen-4, ".ind");#ifndef _WIN32    TABAdjustFilenameExtension(m_pszFname);#endif    /*-----------------------------------------------------------------     * Open file     *----------------------------------------------------------------*/    m_fp = VSIFOpen(m_pszFname, pszAccess);    if (m_fp == NULL)    {        if (!bTestOpenNoError)            CPLError(CE_Failure, CPLE_FileIO,                     "Open() failed for %s", m_pszFname);        CPLFree(m_pszFname);        m_pszFname = NULL;        return -1;    }    /*-----------------------------------------------------------------     * Reset block manager to allocate first block at byte 512, after header.     *----------------------------------------------------------------*/    m_oBlockManager.Reset();    m_oBlockManager.AllocNewBlock();    /*-----------------------------------------------------------------     * Read access: Read the header block     * This will also alloc and init the array of index root nodes.     *----------------------------------------------------------------*/    if ((m_eAccessMode == TABRead || m_eAccessMode == TABReadWrite) &&        ReadHeader() != 0)    {        // Failed reading header... CPLError() has already been called        Close();        return -1;    }    /*-----------------------------------------------------------------     * Write access: Init class members and write a dummy header block     *----------------------------------------------------------------*/    if (m_eAccessMode == TABWrite)    {        m_numIndexes = 0;        if (WriteHeader() != 0)        {            // Failed writing header... CPLError() has already been called            Close();            return -1;        }    }    return 0;}/********************************************************************** *                   TABINDFile::Close() * * Close current file, and release all memory used. * * Returns 0 on success, -1 on error. **********************************************************************/int TABINDFile::Close(){    if (m_fp == NULL)        return 0;    /*-----------------------------------------------------------------     * In Write Mode, commit all indexes to the file     *----------------------------------------------------------------*/    if (m_eAccessMode == TABWrite || m_eAccessMode == TABReadWrite)    {        WriteHeader();        for(int iIndex=0; iIndex<m_numIndexes; iIndex++)        {            if (m_papoIndexRootNodes &&                m_papoIndexRootNodes[iIndex])            {                m_papoIndexRootNodes[iIndex]->CommitToFile();            }        }    }    /*-----------------------------------------------------------------     * Free index nodes in memory     *----------------------------------------------------------------*/    for (int iIndex=0; iIndex<m_numIndexes; iIndex++)    {        if (m_papoIndexRootNodes && m_papoIndexRootNodes[iIndex])            delete m_papoIndexRootNodes[iIndex];        if (m_papbyKeyBuffers && m_papbyKeyBuffers[iIndex])            CPLFree(m_papbyKeyBuffers[iIndex]);    }    CPLFree(m_papoIndexRootNodes);    m_papoIndexRootNodes = NULL;    CPLFree(m_papbyKeyBuffers);    m_papbyKeyBuffers = NULL;    m_numIndexes = 0;    /*-----------------------------------------------------------------     * Close file     *----------------------------------------------------------------*/    VSIFClose(m_fp);    m_fp = NULL;    CPLFree(m_pszFname);    m_pszFname = NULL;    return 0;}/********************************************************************** *                   TABINDFile::ReadHeader() * * (private method) * Read the header block and init all class members for read access. * * Returns 0 on success, -1 on error. **********************************************************************/int TABINDFile::ReadHeader(){    CPLAssert(m_fp);    CPLAssert(m_eAccessMode == TABRead || m_eAccessMode == TABReadWrite);    /*-----------------------------------------------------------------     * In ReadWrite mode, we need to init BlockManager with file size     *----------------------------------------------------------------*/    VSIStatBuf  sStatBuf;    if (m_eAccessMode == TABReadWrite && VSIStat(m_pszFname, &sStatBuf) != -1)    {        m_oBlockManager.SetLastPtr(((sStatBuf.st_size-1)/512)*512);    }    /*-----------------------------------------------------------------     * Read the header block     *----------------------------------------------------------------*/    TABRawBinBlock *poHeaderBlock;    poHeaderBlock = new TABRawBinBlock(m_eAccessMode, TRUE);    if (poHeaderBlock->ReadFromFile(m_fp, 0, 512) != 0)    {        // CPLError() has already been called.        delete poHeaderBlock;        return -1;    }    poHeaderBlock->GotoByteInBlock(0);    GUInt32 nMagicCookie = poHeaderBlock->ReadInt32();    if (nMagicCookie != IND_MAGIC_COOKIE)    {        CPLError(CE_Failure, CPLE_FileIO,                 "%s: Invalid Magic Cookie: got %d, expected %d",                 m_pszFname, nMagicCookie, IND_MAGIC_COOKIE);        delete poHeaderBlock;        return -1;    }    poHeaderBlock->GotoByteInBlock(12);    m_numIndexes = poHeaderBlock->ReadInt16();    if (m_numIndexes < 1 || m_numIndexes > 29)    {        CPLError(CE_Failure, CPLE_FileIO,                 "Invalid number of indexes (%d) in file %s",                 m_numIndexes, m_pszFname);        delete poHeaderBlock;        return -1;    }    /*-----------------------------------------------------------------     * Alloc and init the array of index root nodes.     *----------------------------------------------------------------*/    m_papoIndexRootNodes = (TABINDNode**)CPLCalloc(m_numIndexes,                                                   sizeof(TABINDNode*));    m_papbyKeyBuffers = (GByte **)CPLCalloc(m_numIndexes, sizeof(GByte*));

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美老肥妇做.爰bbww| 懂色av一区二区三区蜜臀| 欧美午夜在线一二页| 一区二区三区免费| 欧美日韩dvd在线观看| 日日夜夜免费精品视频| 日韩精品在线网站| 国产.欧美.日韩| 亚洲人xxxx| 91精品国产黑色紧身裤美女| 精品一区二区久久| 国产精品网友自拍| 91福利视频在线| 强制捆绑调教一区二区| 国产亚洲美州欧州综合国| va亚洲va日韩不卡在线观看| 亚洲一区av在线| 日韩一级片网站| 成人丝袜视频网| 亚洲国产裸拍裸体视频在线观看乱了| 欧美日韩综合在线| 久久综合综合久久综合| 国产精品每日更新| 欧美日本在线观看| 国产精一品亚洲二区在线视频| 中文字幕日韩一区二区| 精品视频在线免费| 国产精品一区二区三区乱码| 一区二区三区毛片| 精品国产精品一区二区夜夜嗨| 91在线丨porny丨国产| 日韩高清在线一区| 国产精品久久久久久亚洲毛片 | 亚洲成va人在线观看| 2023国产精品| 在线看日本不卡| 国产精品 日产精品 欧美精品| 亚洲精品乱码久久久久| 精品乱码亚洲一区二区不卡| 99久久久精品免费观看国产蜜| 麻豆精品一区二区综合av| 亚洲欧美国产毛片在线| 精品少妇一区二区| 欧美午夜电影网| fc2成人免费人成在线观看播放 | 国产98色在线|日韩| 久久99热这里只有精品| 亚洲欧美日韩国产手机在线| 精品国产sm最大网站免费看| 91久久精品网| 成人综合婷婷国产精品久久免费| 男女视频一区二区| 亚洲一区二区在线免费观看视频| 欧美激情在线一区二区三区| 日韩欧美第一区| 91精品欧美福利在线观看| 91麻豆6部合集magnet| 国产成人午夜片在线观看高清观看| 免费看欧美女人艹b| 亚洲风情在线资源站| 亚洲色图制服诱惑| 久久久久久久久99精品| 日韩一区二区不卡| 欧美精品久久99久久在免费线 | 国产ts人妖一区二区| 蜜臀av国产精品久久久久| 亚洲伊人伊色伊影伊综合网| 成人免费在线视频| 久久久久久一级片| 日韩一区二区在线观看| 在线电影欧美成精品| 欧美视频日韩视频在线观看| 在线视频欧美区| 日本精品视频一区二区| 91社区在线播放| 99久久伊人久久99| 一本久久a久久免费精品不卡| 成人一区二区在线观看| 成人av在线网站| 91色视频在线| 色成人在线视频| 欧美亚洲国产一区二区三区va | 91亚洲精品久久久蜜桃网站 | 七七婷婷婷婷精品国产| 日韩精品欧美精品| 卡一卡二国产精品| 国产九色精品成人porny| 国产成人啪免费观看软件 | 久草精品在线观看| 精品无人区卡一卡二卡三乱码免费卡| 蜜桃传媒麻豆第一区在线观看| 美女网站一区二区| 国产在线精品一区二区三区不卡| 国产精品一色哟哟哟| 成人亚洲一区二区一| 91蜜桃婷婷狠狠久久综合9色| 色系网站成人免费| 欧美精品在线一区二区三区| 伊人色综合久久天天人手人婷| 亚洲电影在线免费观看| 蜜桃久久av一区| 成人18视频日本| 欧美日韩一区三区四区| 91精品综合久久久久久| 欧美成人午夜电影| 国产精品久久久久婷婷二区次| 亚洲久草在线视频| 日本欧美一区二区| 成人精品国产免费网站| 欧美羞羞免费网站| 久久综合色播五月| 亚洲欧美韩国综合色| 捆绑调教美女网站视频一区| 成人精品免费网站| 欧美日韩激情一区| 中文字幕成人在线观看| 婷婷亚洲久悠悠色悠在线播放| 国产成人精品一区二区三区四区 | 欧美精品一区二区三区在线| 国产精品乱人伦| 亚洲成人av一区| 国产91在线|亚洲| 8x8x8国产精品| 中文字幕在线观看不卡| 日本欧洲一区二区| 99精品桃花视频在线观看| 在线综合+亚洲+欧美中文字幕| 国产免费成人在线视频| 日韩成人伦理电影在线观看| 国产一区二区三区黄视频 | 国产精品99久久久久久久女警 | 日韩一区在线播放| 久久不见久久见中文字幕免费| 在线一区二区三区四区| 国产亚洲精品中文字幕| 日韩高清不卡在线| 色综合久久综合网| 国产婷婷色一区二区三区四区| 午夜久久电影网| 色欧美乱欧美15图片| 欧美激情在线一区二区| 日本成人在线电影网| 在线亚洲欧美专区二区| 国产精品久久久久久久久图文区| 激情久久五月天| 51精品国自产在线| 亚洲高清中文字幕| 91浏览器打开| 国产精品久线观看视频| 国产精品一区免费在线观看| 717成人午夜免费福利电影| 亚洲欧美色综合| av激情亚洲男人天堂| 国产日产欧产精品推荐色| 美女久久久精品| 91精品国产色综合久久不卡蜜臀 | 久久国产综合精品| 777a∨成人精品桃花网| 亚洲国产一区二区三区青草影视| av午夜精品一区二区三区| 国产视频在线观看一区二区三区| 九九**精品视频免费播放| 欧美一区二区三区人| 日韩电影免费在线观看网站| 欧美精三区欧美精三区| 视频一区视频二区中文| 欧美精品乱码久久久久久| 亚洲国产精品一区二区www在线 | 成人黄色一级视频| 国产欧美一区二区精品性色| 国产成人综合视频| 国产精品色哟哟| 99久久婷婷国产综合精品| 日韩美女久久久| 色狠狠av一区二区三区| 一级做a爱片久久| 在线观看日韩国产| 三级久久三级久久久| 欧美成人精品3d动漫h| 国产精品91xxx| 中文子幕无线码一区tr| 国产91精品一区二区| 亚洲色图欧美在线| 国产亚洲午夜高清国产拍精品| 久久精品国产亚洲5555| 久久久午夜精品理论片中文字幕| 成人在线视频一区| 亚洲同性gay激情无套| 欧日韩精品视频| 麻豆精品一区二区| 国产欧美精品一区二区色综合朱莉| 99热国产精品| 五月天中文字幕一区二区| 精品久久久久久久人人人人传媒 | 老色鬼精品视频在线观看播放| 精品久久久久久亚洲综合网| proumb性欧美在线观看| 亚洲不卡av一区二区三区| 26uuu久久天堂性欧美| 99久久久久久|