⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ogrsfdriverregistrar.cpp

📁 在linux环境下
💻 CPP
📖 第 1 页 / 共 2 页
字号:
    poDS = Open( pszName, bUpdate, &poTempDriver );    if( poDS == NULL )        return poDS;/* -------------------------------------------------------------------- *//*      We don't have this datasource already.  Grow our list to        *//*      hold the new datasource.                                        *//* -------------------------------------------------------------------- */    papszOpenDSRawName = (char **)         CPLRealloc( papszOpenDSRawName, sizeof(char*) * (nOpenDSCount+1) );        papoOpenDS = (OGRDataSource **)         CPLRealloc( papoOpenDS, sizeof(char*) * (nOpenDSCount+1) );        papoOpenDSDriver = (OGRSFDriver **)         CPLRealloc( papoOpenDSDriver, sizeof(char*) * (nOpenDSCount+1) );    papszOpenDSRawName[nOpenDSCount] = CPLStrdup( pszName );    papoOpenDS[nOpenDSCount] = poDS;    papoOpenDSDriver[nOpenDSCount] = poTempDriver;    nOpenDSCount++;    if( ppoDriver != NULL )        *ppoDriver = poTempDriver;    return poDS;}/************************************************************************//*                           OGROpenShared()                            *//************************************************************************/OGRDataSourceH OGROpenShared( const char *pszName, int bUpdate,                              OGRSFDriverH *pahDriverList ){    OGRSFDriverRegistrar::GetRegistrar();    return poRegistrar->OpenShared( pszName, bUpdate,                                     (OGRSFDriver **) pahDriverList );}/************************************************************************//*                         ReleaseDataSource()                          *//************************************************************************/OGRErr OGRSFDriverRegistrar::ReleaseDataSource( OGRDataSource * poDS ){    int iDS;    for( iDS = 0; iDS < nOpenDSCount; iDS++ )    {        if( poDS == papoOpenDS[iDS] )            break;    }    if( iDS == nOpenDSCount )    {        CPLDebug( "OGR",                   "ReleaseDataSource(%s/%p) on unshared datasource!\n"                  "Deleting directly.",                   poDS->GetName(), poDS );        delete poDS;        return OGRERR_FAILURE;    }    if( poDS->GetRefCount() > 0 )        poDS->Dereference();    if( poDS->GetRefCount() > 0 )    {        CPLDebug( "OGR",                   "ReleaseDataSource(%s/%p) ... just dereferencing.",                  poDS->GetName(), poDS );        return OGRERR_NONE;    }    if( poDS->GetSummaryRefCount() > 0 )    {        CPLDebug( "OGR",                   "OGRSFDriverRegistrar::ReleaseDataSource(%s)\n"                  "Datasource reference count is now zero, but some layers\n"                  "are still referenced ... not closing datasource.",                  poDS->GetName() );        return OGRERR_FAILURE;    }/* -------------------------------------------------------------------- *//*      We really want to close this file, and remove it from the       *//*      shared list.                                                    *//* -------------------------------------------------------------------- */    CPLDebug( "OGR",               "ReleaseDataSource(%s/%p) dereferenced and now destroying.",              poDS->GetName(), poDS );    delete poDS;    CPLFree( papszOpenDSRawName[iDS] );    memmove( papszOpenDSRawName + iDS, papszOpenDSRawName + iDS + 1,              sizeof(char *) * (nOpenDSCount - iDS - 1) );    memmove( papoOpenDS + iDS, papoOpenDS + iDS + 1,              sizeof(char *) * (nOpenDSCount - iDS - 1) );    memmove( papoOpenDSDriver + iDS, papoOpenDSDriver + iDS + 1,              sizeof(char *) * (nOpenDSCount - iDS - 1) );    nOpenDSCount--;    if( nOpenDSCount == 0 )    {        CPLFree( papszOpenDSRawName );        papszOpenDSRawName = NULL;        CPLFree( papoOpenDS );        papoOpenDS = NULL;        CPLFree( papoOpenDSDriver );        papoOpenDSDriver = NULL;    }    return OGRERR_NONE;}/************************************************************************//*                        OGRReleaseDataSource()                        *//************************************************************************/OGRErr OGRReleaseDataSource( OGRDataSourceH hDS ){    OGRSFDriverRegistrar::GetRegistrar();    return poRegistrar->ReleaseDataSource((OGRDataSource *) hDS);}/************************************************************************//*                         OGRGetOpenDSCount()                          *//************************************************************************/int OGRGetOpenDSCount(){    OGRSFDriverRegistrar::GetRegistrar();    return poRegistrar->GetOpenDSCount();}/************************************************************************//*                             GetOpenDS()                              *//************************************************************************/OGRDataSource *OGRSFDriverRegistrar::GetOpenDS( int iDS ){    if( iDS < 0 || iDS >= nOpenDSCount )        return NULL;    else        return papoOpenDS[iDS];}/************************************************************************//*                            OGRGetOpenDS()                            *//************************************************************************/OGRDataSourceH OGRGetOpenDS( int iDS ){    OGRSFDriverRegistrar::GetRegistrar();    return (OGRDataSourceH) poRegistrar->GetOpenDS( iDS );}/************************************************************************//*                           RegisterDriver()                           *//************************************************************************/void OGRSFDriverRegistrar::RegisterDriver( OGRSFDriver * poDriver ){    int         iDriver;/* -------------------------------------------------------------------- *//*      It has no effect to register a driver more than once.           *//* -------------------------------------------------------------------- */    for( iDriver = 0; iDriver < nDrivers; iDriver++ )    {        if( poDriver == papoDrivers[iDriver] )            return;    }                                                   /* -------------------------------------------------------------------- *//*      Add to the end of the driver list.                              *//* -------------------------------------------------------------------- */    papoDrivers = (OGRSFDriver **)        CPLRealloc( papoDrivers, (nDrivers+1) * sizeof(void*) );    papoDrivers[nDrivers++] = poDriver;}/************************************************************************//*                         OGRRegisterDriver()                          *//************************************************************************/void OGRRegisterDriver( OGRSFDriverH hDriver ){    poRegistrar->RegisterDriver( (OGRSFDriver *) hDriver );}/************************************************************************//*                           GetDriverCount()                           *//************************************************************************/int OGRSFDriverRegistrar::GetDriverCount(){    return nDrivers;}/************************************************************************//*                         OGRGetDriverCount()                          *//************************************************************************/int OGRGetDriverCount(){    if (poRegistrar)        return poRegistrar->GetDriverCount();    return 0;}/************************************************************************//*                             GetDriver()                              *//************************************************************************/OGRSFDriver *OGRSFDriverRegistrar::GetDriver( int iDriver ){    if( iDriver < 0 || iDriver >= nDrivers )        return NULL;    else        return papoDrivers[iDriver];}/************************************************************************//*                            OGRGetDriver()                            *//************************************************************************/OGRSFDriverH OGRGetDriver( int iDriver ){    return (OGRSFDriverH) poRegistrar->GetDriver( iDriver );}/************************************************************************//*                          GetDriverByName()                           *//************************************************************************/OGRSFDriver *OGRSFDriverRegistrar::GetDriverByName( const char * pszName ){    for( int i = 0; i < nDrivers; i++ )    {        if( papoDrivers[i] != NULL             && EQUAL(papoDrivers[i]->GetName(),pszName) )            return papoDrivers[i];    }    return NULL;}/************************************************************************//*                         OGRGetDriverByName()                         *//************************************************************************/OGRSFDriverH OGRGetDriverByName( const char *pszName ){    return (OGRSFDriverH) poRegistrar->GetDriverByName( pszName );}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -