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

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

?? mitab_idfile.cpp

?? 支持各種柵格圖像和矢量圖像讀取的庫
?? CPP
字號:
/********************************************************************** * $Id: mitab_idfile.cpp,v 1.7 2004/06/30 20:29:04 dmorissette Exp $ * * Name:     mitab_idfile.cpp * Project:  MapInfo TAB Read/Write library * Language: C++ * Purpose:  Implementation of the TABIDFile class used to handle *           reading/writing of the .ID file attached to a .MAP file * Author:   Daniel Morissette, dmorissette@dmsolutions.ca * ********************************************************************** * Copyright (c) 1999, 2000, 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_idfile.cpp,v $ * Revision 1.7  2004/06/30 20:29:04  dmorissette * Fixed refs to old address danmo@videotron.ca * * Revision 1.6  2000/01/18 22:08:56  daniel * Allow opening of 0-size .ID file (dataset with 0 features) * * Revision 1.5  2000/01/15 22:30:44  daniel * Switch to MIT/X-Consortium OpenSource license * * Revision 1.4  1999/09/26 14:59:36  daniel * Implemented write support * * Revision 1.3  1999/09/20 18:43:01  daniel * Use binary acces to open file. * * Revision 1.2  1999/09/16 02:39:16  daniel * Completed read support for most feature types * * Revision 1.1  1999/07/12 04:18:24  daniel * Initial checkin * **********************************************************************/#include "mitab.h"#include "mitab_utils.h"/*===================================================================== *                      class TABIDFile *====================================================================*//********************************************************************** *                   TABIDFile::TABIDFile() * * Constructor. **********************************************************************/TABIDFile::TABIDFile(){    m_fp = NULL;    m_pszFname = NULL;    m_poIDBlock = NULL;    m_nMaxId = -1;}/********************************************************************** *                   TABIDFile::~TABIDFile() * * Destructor. **********************************************************************/TABIDFile::~TABIDFile(){    Close();}/********************************************************************** *                   TABIDFile::Open() * * Open a .ID file, and initialize the structures to be ready to read * objects from it. * * If the filename that is passed in contains a .MAP extension then * the extension will be changed to .ID before trying to open the file. * * Returns 0 on success, -1 on error. **********************************************************************/int TABIDFile::Open(const char *pszFname, const char *pszAccess){    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.     *----------------------------------------------------------------*/    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 .MAP extension to .ID if necessary     *----------------------------------------------------------------*/    m_pszFname = CPLStrdup(pszFname);    nLen = strlen(m_pszFname);    if (nLen > 4 && strcmp(m_pszFname+nLen-4, ".MAP")==0)        strcpy(m_pszFname+nLen-4, ".ID");    else if (nLen > 4 && strcmp(m_pszFname+nLen-4, ".map")==0)        strcpy(m_pszFname+nLen-4, ".id");    /*-----------------------------------------------------------------     * Change .MAP extension to .ID if necessary     *----------------------------------------------------------------*/#ifndef _WIN32    TABAdjustFilenameExtension(m_pszFname);#endif    /*-----------------------------------------------------------------     * Open file     *----------------------------------------------------------------*/    m_fp = VSIFOpen(m_pszFname, pszAccess);    if (m_fp == NULL)    {        CPLError(CE_Failure, CPLE_FileIO,                 "Open() failed for %s", m_pszFname);        CPLFree(m_pszFname);        m_pszFname = NULL;        return -1;    }    if (m_eAccessMode == TABRead)    {        /*-------------------------------------------------------------         * READ access:         * Establish the number of object IDs from the size of the file         *------------------------------------------------------------*/        VSIStatBuf  sStatBuf;        if ( VSIStat(m_pszFname, &sStatBuf) == -1 )        {            CPLError(CE_Failure, CPLE_FileIO,                      "stat() failed for %s\n", m_pszFname);            Close();            return -1;        }        m_nMaxId = sStatBuf.st_size/4;        m_nBlockSize = MIN(1024, m_nMaxId*4);        /*-------------------------------------------------------------         * Read the first block from the file         *------------------------------------------------------------*/        m_poIDBlock = new TABRawBinBlock(m_eAccessMode, FALSE);        if (m_nMaxId == 0)        {            // .ID file size = 0 ... just allocate a blank block but            // it won't get really used anyways.            m_nBlockSize = 512;            m_poIDBlock->InitNewBlock(m_fp, m_nBlockSize, 0);        }        else if (m_poIDBlock->ReadFromFile(m_fp, 0, m_nBlockSize) != 0)        {            // CPLError() has already been called.            Close();            return -1;        }    }    else    {        /*-------------------------------------------------------------         * WRITE access:         * Get ready to write to the file         *------------------------------------------------------------*/        m_poIDBlock = new TABRawBinBlock(m_eAccessMode, FALSE);        m_nMaxId = 0;        m_nBlockSize = 1024;        m_poIDBlock->InitNewBlock(m_fp, m_nBlockSize, 0);    }    return 0;}/********************************************************************** *                   TABIDFile::Close() * * Close current file, and release all memory used. * * Returns 0 on success, -1 on error. **********************************************************************/int TABIDFile::Close(){    if (m_fp == NULL)        return 0;    /*----------------------------------------------------------------     * Write access: commit latest changes to the file.     *---------------------------------------------------------------*/    if (m_eAccessMode == TABWrite && m_poIDBlock)    {        m_poIDBlock->CommitToFile();    }        // Delete all structures     delete m_poIDBlock;    m_poIDBlock = NULL;    // Close file    VSIFClose(m_fp);    m_fp = NULL;    CPLFree(m_pszFname);    m_pszFname = NULL;    return 0;}/********************************************************************** *                   TABIDFile::GetObjPtr() * * Return the offset in the .MAP file where the map object with the * specified id is located. * * Note that object ids are positive and start at 1. * * An object Id of '0' means that object has no geometry. * * Returns a value >= 0 on success, -1 on error. **********************************************************************/GInt32 TABIDFile::GetObjPtr(GInt32 nObjId){    if (m_poIDBlock == NULL)        return -1;    if (nObjId < 1 || nObjId > m_nMaxId)    {        CPLError(CE_Failure, CPLE_IllegalArg,                 "GetObjPtr(): Invalid object ID %d (valid range is [1..%d])",                 nObjId, m_nMaxId);        return -1;    }    if (m_poIDBlock->GotoByteInFile( (nObjId-1)*4 ) != 0)        return -1;    return m_poIDBlock->ReadInt32();}/********************************************************************** *                   TABIDFile::SetObjPtr() * * Set the offset in the .MAP file where the map object with the * specified id is located. * * Note that object ids are positive and start at 1. * * An object Id of '0' means that object has no geometry. * * Returns a value of 0 on success, -1 on error. **********************************************************************/int TABIDFile::SetObjPtr(GInt32 nObjId, GInt32 nObjPtr){    if (m_poIDBlock == NULL)        return -1;    if (m_eAccessMode != TABWrite)    {        CPLError(CE_Failure, CPLE_NotSupported,                 "SetObjPtr() can be used only with Write access.");        return -1;    }    if (nObjId < 1)    {        CPLError(CE_Failure, CPLE_IllegalArg,               "GetObjPtr(): Invalid object ID %d (must be greater than zero)",                 nObjId);        return -1;    }    /*-----------------------------------------------------------------     * GotoByteInFile() will automagically commit current block and init     * a new one if necessary.     *----------------------------------------------------------------*/    if (m_poIDBlock->GotoByteInFile( (nObjId-1)*4 ) != 0)        return -1;    m_nMaxId = MAX(m_nMaxId, nObjId);    return m_poIDBlock->WriteInt32(nObjPtr);}/********************************************************************** *                   TABIDFile::GetMaxObjId() * * Return the value of the biggest valid object id. * * Note that object ids are positive and start at 1. * * Returns a value >= 0 on success, -1 on error. **********************************************************************/GInt32 TABIDFile::GetMaxObjId(){    return m_nMaxId;}/********************************************************************** *                   TABIDFile::Dump() * * Dump block contents... available only in DEBUG mode. **********************************************************************/#ifdef DEBUGvoid TABIDFile::Dump(FILE *fpOut /*=NULL*/){    if (fpOut == NULL)        fpOut = stdout;    fprintf(fpOut, "----- TABIDFile::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, "Current index block follows ...\n\n");        m_poIDBlock->Dump(fpOut);        fprintf(fpOut, "... end of index block.\n\n");    }    fflush(fpOut);}#endif // DEBUG

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲激情图片qvod| 成人激情动漫在线观看| 久久99精品国产麻豆婷婷洗澡| 国产精品一区二区久久不卡| 欧美一区二区二区| 国产精品视频yy9299一区| 日本亚洲欧美天堂免费| av电影一区二区| 久久久综合视频| 日韩精品一级中文字幕精品视频免费观看| 激情欧美一区二区| 欧美日韩成人一区二区| 亚洲伦在线观看| 成人精品免费视频| 精品国产第一区二区三区观看体验| 亚洲综合色噜噜狠狠| 成人在线综合网| 国产日韩欧美精品一区| 久久国产精品99久久人人澡| 337p亚洲精品色噜噜狠狠| 亚洲人成电影网站色mp4| 成人精品在线视频观看| 久久久亚洲精品一区二区三区| 麻豆成人免费电影| 日韩欧美一区在线| 五月激情综合网| 欧美高清视频一二三区 | 欧美激情综合五月色丁香 | 日韩美女一区二区三区四区| 婷婷开心久久网| 欧美日韩你懂的| 亚洲大型综合色站| 欧美日韩国产精品成人| 天天综合色天天综合| 欧美日韩视频专区在线播放| 亚洲国产婷婷综合在线精品| 欧美做爰猛烈大尺度电影无法无天| 亚洲精品久久7777| 欧美少妇一区二区| 日韩精品成人一区二区三区| 欧美一区二区视频在线观看2020| 久久精品国产亚洲5555| 久久久国际精品| 99视频热这里只有精品免费| 亚洲视频免费观看| 欧美三日本三级三级在线播放| 亚洲福中文字幕伊人影院| 欧美一二三区在线| 国产麻豆91精品| 日韩毛片高清在线播放| 日本二三区不卡| 免费高清视频精品| 日本一区二区三区dvd视频在线| 9l国产精品久久久久麻豆| 亚洲激情一二三区| 日韩三级视频在线看| 国产成人综合在线播放| 亚洲欧美日韩综合aⅴ视频| 欧美日韩mp4| 国产精品一区二区在线观看网站| 中文字幕五月欧美| 在线播放中文一区| 国产成人精品影视| 调教+趴+乳夹+国产+精品| 精品盗摄一区二区三区| 91在线观看免费视频| 成人一级片网址| 亚洲成a人v欧美综合天堂下载| 日韩欧美综合在线| kk眼镜猥琐国模调教系列一区二区| 午夜视频在线观看一区二区| 久久精品视频在线免费观看 | 欧美巨大另类极品videosbest | 国产欧美日韩在线观看| 欧美日韩精品高清| 国产iv一区二区三区| 午夜精品久久久久久久久| 国产三级精品三级在线专区| 欧美日韩在线三级| 成人午夜视频在线| 毛片不卡一区二区| 一区二区三区免费观看| 久久久久久久久97黄色工厂| 欧美日韩激情一区| 91视视频在线直接观看在线看网页在线看| 亚洲高清在线精品| 中文字幕亚洲一区二区va在线| 欧美日本乱大交xxxxx| 色偷偷久久一区二区三区| 国产美女一区二区三区| 五月激情丁香一区二区三区| 国产精品激情偷乱一区二区∴| 欧美成人一区二区三区在线观看| 欧美午夜电影一区| 色偷偷88欧美精品久久久| 国产一区二区在线观看免费 | 久久精品国产一区二区三| 亚洲福利视频一区二区| 自拍视频在线观看一区二区| 国产欧美一区二区在线观看| 日韩欧美久久久| 欧美一区永久视频免费观看| 色噜噜狠狠色综合欧洲selulu| av不卡在线播放| 成人免费电影视频| 国产成人精品免费在线| 国产精品一区在线观看乱码| 韩国理伦片一区二区三区在线播放 | 国产亚洲精品精华液| 日韩欧美一级二级| 日韩一区二区在线观看| 欧美一区二区在线观看| 欧美一区二区三区白人| 欧美女孩性生活视频| 91成人免费在线视频| 色拍拍在线精品视频8848| 99re亚洲国产精品| 北岛玲一区二区三区四区| 国产经典欧美精品| 国产一区二区三区香蕉| 激情六月婷婷久久| 国产福利一区在线观看| 国产精品一品二品| 国产白丝精品91爽爽久久| 高清成人免费视频| 99精品视频在线观看免费| 色婷婷av一区二区三区gif| 日本丶国产丶欧美色综合| 欧美影院午夜播放| 国产精品理论在线观看| 18欧美乱大交hd1984| 一区二区三区四区亚洲| 亚洲午夜久久久久久久久久久| 午夜a成v人精品| 美国十次了思思久久精品导航| 激情亚洲综合在线| 成人精品在线视频观看| 欧美性猛交xxxxxxxx| 日韩一级片在线播放| 国产欧美日韩另类一区| 一区二区三区四区在线播放| 免费精品99久久国产综合精品| 国产毛片精品国产一区二区三区| 99久久夜色精品国产网站| 欧美日韩免费高清一区色橹橹| 日韩欧美视频一区| 中文一区一区三区高中清不卡| 一区二区三区日韩在线观看| 男男视频亚洲欧美| 成人a区在线观看| 91精品国产综合久久久久久久| 久久亚洲二区三区| 亚洲一区二区欧美| 国产精品综合网| 欧美日韩国产电影| 中文字幕第一区二区| 首页欧美精品中文字幕| 成人午夜大片免费观看| 欧美人与禽zozo性伦| 欧美国产视频在线| 日韩国产欧美一区二区三区| 成人免费视频视频在线观看免费| 欧美日韩国产123区| 国产欧美视频一区二区| 视频精品一区二区| 99久久精品国产网站| 精品国产电影一区二区| 亚洲电影视频在线| 99在线精品观看| 久久免费看少妇高潮| 日韩中文字幕av电影| 91小视频在线观看| 久久久久久久久久美女| 日韩高清在线观看| 91久久香蕉国产日韩欧美9色| 久久精品男人的天堂| 男女男精品网站| 欧美色欧美亚洲另类二区| 国产精品灌醉下药二区| 国产精品一区二区视频| 日韩欧美在线网站| 日韩中文字幕亚洲一区二区va在线 | 麻豆精品精品国产自在97香蕉| 日本精品一区二区三区高清| 中文字幕国产一区| 国产精品18久久久久| 日韩一区二区中文字幕| 视频一区视频二区在线观看| 欧美性高清videossexo| 亚洲精品久久久蜜桃| 91免费看视频| 亚洲色图都市小说| 99久久精品久久久久久清纯| 亚洲国产精品精华液2区45| 国产乱码精品1区2区3区| 久久日韩精品一区二区五区| 精品一区二区在线看| 2020国产成人综合网| 九九九精品视频| 日韩欧美国产系列|