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

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

?? ogr_gensql.cpp

?? mitab,讀取MapInfo的地圖文件
?? CPP
?? 第 1 頁 / 共 3 頁
字號:
            return NULL;

        if( nFID < 0 || nFID >= psSummary->count )
            return NULL;

        poSummaryFeature->SetField( 0, psSummary->distinct_list[nFID] );
        poSummaryFeature->SetFID( nFID );

        return poSummaryFeature->Clone();
    }

/* -------------------------------------------------------------------- */
/*      Are we running in sorted mode?  If so, run the fid through      */
/*      the index.                                                      */
/* -------------------------------------------------------------------- */
    if( panFIDIndex != NULL )
    {
        if( nFID < 0 || nFID >= nIndexSize )
            return NULL;
        else
            nFID = panFIDIndex[nFID];
    }

/* -------------------------------------------------------------------- */
/*      Handle request for random record.                               */
/* -------------------------------------------------------------------- */
    OGRFeature *poSrcFeature = poSrcLayer->GetFeature( nFID );
    OGRFeature *poResult;

    if( poSrcFeature == NULL )
        return NULL;

    poResult = TranslateFeature( poSrcFeature );
    poResult->SetFID( nFID );
    
    delete poSrcFeature;

    return poResult;
}

/************************************************************************/
/*                          GetSpatialFilter()                          */
/************************************************************************/

OGRGeometry *OGRGenSQLResultsLayer::GetSpatialFilter() 

{
    return NULL;
}

/************************************************************************/
/*                            GetLayerDefn()                            */
/************************************************************************/

OGRFeatureDefn *OGRGenSQLResultsLayer::GetLayerDefn()

{
    return poDefn;
}

/************************************************************************/
/*                         CreateOrderByIndex()                         */
/*                                                                      */
/*      This method is responsible for creating an index providing      */
/*      ordered access to the features according to the supplied        */
/*      ORDER BY clauses.                                               */
/*                                                                      */
/*      This is accomplished by making one pass through all the         */
/*      eligible source features, and capturing the order by fields     */
/*      of all records in memory.  A quick sort is then applied to      */
/*      this in memory copy of the order-by fields to create the        */
/*      required index.                                                 */
/*                                                                      */
/*      Keeping all the key values in memory will *not* scale up to     */
/*      very large input datasets.                                      */
/************************************************************************/

void OGRGenSQLResultsLayer::CreateOrderByIndex()

{
    swq_select *psSelectInfo = (swq_select *) pSelectInfo;
    OGRField *pasIndexFields;
    int      i, nOrderItems = psSelectInfo->order_specs;
    long     *panFIDList;

    if( nOrderItems == 0 )
        return;

    ResetReading();

/* -------------------------------------------------------------------- */
/*      Allocate set of key values, and the output index.               */
/* -------------------------------------------------------------------- */
    nIndexSize = poSrcLayer->GetFeatureCount();

    pasIndexFields = (OGRField *) 
        CPLCalloc(sizeof(OGRField), nOrderItems * nIndexSize);
    panFIDIndex = (long *) CPLCalloc(sizeof(long),nIndexSize);
    panFIDList = (long *) CPLCalloc(sizeof(long),nIndexSize);

    for( i = 0; i < nIndexSize; i++ )
        panFIDIndex[i] = i;

/* -------------------------------------------------------------------- */
/*      Read in all the key values.                                     */
/* -------------------------------------------------------------------- */
    OGRFeature *poSrcFeat;
    int         iFeature = 0;

    while( (poSrcFeat = poSrcLayer->GetNextFeature()) != NULL )
    {
        int iKey;

        for( iKey = 0; iKey < nOrderItems; iKey++ )
        {
            swq_order_def *psKeyDef = psSelectInfo->order_defs + iKey;
            OGRFieldDefn *poFDefn;
            OGRField *psSrcField, *psDstField;

            psDstField = pasIndexFields + iFeature * nOrderItems + iKey;

            if ( psKeyDef->field_index >= iFIDFieldIndex)
            {
                if ( psKeyDef->field_index < iFIDFieldIndex + SPECIAL_FIELD_COUNT )
                {
                    switch (SpecialFieldTypes[psKeyDef->field_index - iFIDFieldIndex])
                    {
                      case SWQ_INTEGER:
                        psDstField->Integer = poSrcFeat->GetFieldAsInteger(psKeyDef->field_index);
                        break;

                      default:
                        psDstField->String = CPLStrdup( poSrcFeat->GetFieldAsString(psKeyDef->field_index) );
                        break;
                    }
                }
                continue;
            }
            
            poFDefn = poSrcLayer->GetLayerDefn()->GetFieldDefn( 
                psKeyDef->field_index );

            psSrcField = poSrcFeat->GetRawFieldRef( psKeyDef->field_index );

            if( poFDefn->GetType() == OFTInteger 
                || poFDefn->GetType() == OFTReal )
                memcpy( psDstField, psSrcField, sizeof(OGRField) );
            else if( poFDefn->GetType() == OFTString )
            {
                if( poSrcFeat->IsFieldSet( psKeyDef->field_index ) )
                    psDstField->String = CPLStrdup( psSrcField->String );
                else
                    memcpy( psDstField, psSrcField, sizeof(OGRField) );
            }
        }

        panFIDList[iFeature] = poSrcFeat->GetFID();
        delete poSrcFeat;

        iFeature++;
    }

    CPLAssert( nIndexSize == iFeature );

/* -------------------------------------------------------------------- */
/*      Quick sort the records.                                         */
/* -------------------------------------------------------------------- */
    SortIndexSection( pasIndexFields, 0, nIndexSize );

/* -------------------------------------------------------------------- */
/*      Rework the FID map to map to real FIDs.                         */
/* -------------------------------------------------------------------- */
    for( i = 0; i < nIndexSize; i++ )
        panFIDIndex[i] = panFIDList[panFIDIndex[i]];

    CPLFree( panFIDList );

/* -------------------------------------------------------------------- */
/*      Free the key field values.                                      */
/* -------------------------------------------------------------------- */
    for( int iKey = 0; iKey < nOrderItems; iKey++ )
    {
        swq_order_def *psKeyDef = psSelectInfo->order_defs + iKey;
        OGRFieldDefn *poFDefn;

        if ( psKeyDef->field_index >= iFIDFieldIndex &&
            psKeyDef->field_index < iFIDFieldIndex + SPECIAL_FIELD_COUNT )
        {
            /* warning: only special fields of type string should be deallocated */
            if (SpecialFieldTypes[psKeyDef->field_index - iFIDFieldIndex] == SWQ_STRING)
            {
                for( i = 0; i < nIndexSize; i++ )
                {
                    OGRField *psField = pasIndexFields + iKey + i * nOrderItems;
                    CPLFree( psField->String );
                }
            }
            continue;
        }

        poFDefn = poSrcLayer->GetLayerDefn()->GetFieldDefn( 
            psKeyDef->field_index );

        if( poFDefn->GetType() == OFTString )
        {
            for( i = 0; i < nIndexSize; i++ )
            {
                OGRField *psField = pasIndexFields + iKey + i * nOrderItems;
                
                if( psField->Set.nMarker1 != OGRUnsetMarker 
                    || psField->Set.nMarker2 != OGRUnsetMarker )
                    CPLFree( psField->String );
            }
        }
    }

    CPLFree( pasIndexFields );
}

/************************************************************************/
/*                          SortIndexSection()                          */
/*                                                                      */
/*      Sort the records in a section of the index.                     */
/************************************************************************/

void OGRGenSQLResultsLayer::SortIndexSection( OGRField *pasIndexFields, 
                                              int nStart, int nEntries )

{
    if( nEntries < 2 )
        return;

    swq_select *psSelectInfo = (swq_select *) pSelectInfo;
    int      nOrderItems = psSelectInfo->order_specs;

    int nFirstGroup = nEntries / 2;
    int nFirstStart = nStart;
    int nSecondGroup = nEntries - nFirstGroup;
    int nSecondStart = nStart + nFirstGroup;
    int iMerge = 0;
    long *panMerged;

    SortIndexSection( pasIndexFields, nFirstStart, nFirstGroup );
    SortIndexSection( pasIndexFields, nSecondStart, nSecondGroup );

    panMerged = (long *) CPLMalloc( sizeof(long) * nEntries );
        
    while( iMerge < nEntries )
    {
        int  nResult;

        if( nFirstGroup == 0 )
            nResult = -1;
        else if( nSecondGroup == 0 )
            nResult = 1;
        else
            nResult = Compare( pasIndexFields 
                               + panFIDIndex[nFirstStart] * nOrderItems, 
                               pasIndexFields 
                               + panFIDIndex[nSecondStart] * nOrderItems );

        if( nResult < 0 )
        {
            panMerged[iMerge++] = panFIDIndex[nSecondStart++];
            nSecondGroup--;
        }
        else
        {
            panMerged[iMerge++] = panFIDIndex[nFirstStart++];
            nFirstGroup--;
        }
    }

    /* Copy the merge list back into the main index */

    memcpy( panFIDIndex + nStart, panMerged, sizeof(long) * nEntries );
    CPLFree( panMerged );
}

/************************************************************************/
/*                              Compare()                               */
/************************************************************************/

int OGRGenSQLResultsLayer::Compare( OGRField *pasFirstTuple,
                                    OGRField *pasSecondTuple )

{
    swq_select *psSelectInfo = (swq_select *) pSelectInfo;
    int  nResult = 0, iKey;

    for( iKey = 0; nResult == 0 && iKey < psSelectInfo->order_specs; iKey++ )
    {
        swq_order_def *psKeyDef = psSelectInfo->order_defs + iKey;
        OGRFieldDefn *poFDefn;

        if( psKeyDef->field_index >= iFIDFieldIndex )
            poFDefn = NULL;
        else
            poFDefn = poSrcLayer->GetLayerDefn()->GetFieldDefn( 
                psKeyDef->field_index );
        
        if( (pasFirstTuple[iKey].Set.nMarker1 == OGRUnsetMarker 
             && pasFirstTuple[iKey].Set.nMarker2 == OGRUnsetMarker)
            || (pasSecondTuple[iKey].Set.nMarker1 == OGRUnsetMarker 
                && pasSecondTuple[iKey].Set.nMarker2 == OGRUnsetMarker) )
            nResult = 0;
        else if ( poFDefn == NULL )
        {
            switch (SpecialFieldTypes[psKeyDef->field_index - iFIDFieldIndex])
            {
              case SWQ_INTEGER:
                if( pasFirstTuple[iKey].Integer < pasSecondTuple[iKey].Integer )
                    nResult = -1;
                else if( pasFirstTuple[iKey].Integer > pasSecondTuple[iKey].Integer )
                    nResult = 1;
                break;
              case SWQ_STRING:
                nResult = strcmp(pasFirstTuple[iKey].String,
                                 pasSecondTuple[iKey].String);
                break;

              default:
                CPLAssert( FALSE );
                nResult = 0;
            }
        }
        else if( poFDefn->GetType() == OFTInteger )
        {
            if( pasFirstTuple[iKey].Integer < pasSecondTuple[iKey].Integer )
                nResult = -1;
            else if( pasFirstTuple[iKey].Integer 
                     > pasSecondTuple[iKey].Integer )
                nResult = 1;
        }
        else if( poFDefn->GetType() == OFTString )
            nResult = strcmp(pasFirstTuple[iKey].String,
                             pasSecondTuple[iKey].String);
        else if( poFDefn->GetType() == OFTReal )
        {
            if( pasFirstTuple[iKey].Real < pasSecondTuple[iKey].Real )
                nResult = -1;
            else if( pasFirstTuple[iKey].Real > pasSecondTuple[iKey].Real )
                nResult = 1;
        }

        if( psKeyDef->ascending_flag )
            nResult *= -1;
    }

    return nResult;
}

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
久久精品视频一区二区三区| 国产精品一区二区免费不卡| 青青草国产成人av片免费| 亚洲网友自拍偷拍| 91亚洲精品乱码久久久久久蜜桃| 国产亚洲欧美中文| 黑人巨大精品欧美黑白配亚洲| 欧美蜜桃一区二区三区| 国产精品色婷婷| 成人免费看片app下载| 中文字幕av一区二区三区| 国产aⅴ综合色| 欧美精品一区二区三区四区| 国产一区二区在线影院| 久久久影视传媒| 国产成人亚洲综合a∨猫咪| 国产欧美一区二区精品性色| 日本不卡在线视频| 日韩精品一区二区三区三区免费 | 亚洲一区在线视频| 91成人在线免费观看| 国产精品久久久久一区二区三区| 9人人澡人人爽人人精品| 日韩久久一区二区| 欧美三级电影网| 日本美女一区二区| 精品视频1区2区| 亚洲乱码日产精品bd| 欧美福利一区二区| 99久久伊人网影院| 免费在线成人网| 亚洲精品国产无天堂网2021 | www国产亚洲精品久久麻豆| 97国产一区二区| 国产一区二区三区黄视频 | 蜜桃视频在线观看一区| 国产精品麻豆久久久| 日韩一区二区高清| 色综合天天综合色综合av| 狠狠色狠狠色综合| 天天色综合成人网| 亚洲欧美另类在线| 国产精品无人区| 久久久三级国产网站| 91精品在线一区二区| 91麻豆免费观看| 国产福利精品导航| 久久国产精品99久久久久久老狼| 亚洲免费观看在线视频| 国产欧美视频一区二区| 欧美哺乳videos| 欧美日韩不卡一区| 欧美在线你懂的| 99视频一区二区| 成人做爰69片免费看网站| 免费不卡在线视频| 天天av天天翘天天综合网 | 午夜精品成人在线视频| 中文字幕中文乱码欧美一区二区| 久久先锋影音av鲁色资源| 日韩视频永久免费| 日韩三级中文字幕| 69堂精品视频| 在线不卡一区二区| 777a∨成人精品桃花网| 欧美日韩高清一区二区不卡| 色综合久久天天综合网| 99精品国产99久久久久久白柏| 国产**成人网毛片九色 | 国产在线不卡视频| 精品一区二区三区免费| 久久国产精品色婷婷| 六月丁香婷婷色狠狠久久| 免费国产亚洲视频| 午夜精品成人在线视频| 日日夜夜免费精品| 热久久久久久久| 蜜桃视频在线观看一区二区| 极品美女销魂一区二区三区免费| 麻豆精品国产传媒mv男同| 九九**精品视频免费播放| 麻豆91在线播放免费| 国产一区二区三区最好精华液| 国内一区二区视频| 成人在线一区二区三区| 99久久er热在这里只有精品66| 92国产精品观看| 欧美日韩免费观看一区二区三区| 欧美一区二区三区视频免费| 欧美r级电影在线观看| 久久男人中文字幕资源站| 国产精品久久久久久妇女6080| 综合色天天鬼久久鬼色| 亚洲一区影音先锋| 日本欧美加勒比视频| 国产麻豆视频一区二区| 成人精品一区二区三区中文字幕| 在线视频观看一区| 91精品欧美福利在线观看| 2022国产精品视频| 亚洲日本丝袜连裤袜办公室| 亚洲妇女屁股眼交7| 久久99九九99精品| www.性欧美| 337p亚洲精品色噜噜| 久久亚洲一级片| 亚洲女同一区二区| 久久精品国产精品青草| 99re在线精品| 日韩女优毛片在线| 综合分类小说区另类春色亚洲小说欧美| 亚洲最大的成人av| 国产真实精品久久二三区| 色综合视频在线观看| 制服.丝袜.亚洲.另类.中文| 久久久国产精品不卡| 一区二区三区四区在线播放| 美女久久久精品| 色综合天天在线| 亚洲精品一区二区在线观看| 亚洲视频一区二区免费在线观看| 婷婷一区二区三区| proumb性欧美在线观看| 欧美一区二区福利视频| 日韩伦理av电影| 乱中年女人伦av一区二区| 91啪在线观看| 久久夜色精品国产欧美乱极品| 亚洲一级二级三级| 成人福利在线看| 欧美白人最猛性xxxxx69交| 夜夜嗨av一区二区三区中文字幕| 国产成人午夜视频| 欧美一区二区三区四区高清| 一区二区三区不卡在线观看| 国产69精品一区二区亚洲孕妇| 666欧美在线视频| 洋洋av久久久久久久一区| 成人app在线| 国产亚洲综合在线| 欧美aaaaa成人免费观看视频| 在线观看免费视频综合| 中文字幕免费不卡在线| 精品无人码麻豆乱码1区2区| 7777精品伊人久久久大香线蕉超级流畅| 中文字幕一区二区不卡| 高清久久久久久| 久久午夜电影网| 国产一区在线看| 精品av久久707| 精彩视频一区二区三区| 日韩一级欧美一级| 麻豆一区二区三区| 91精品国产丝袜白色高跟鞋| 夜夜精品浪潮av一区二区三区| 93久久精品日日躁夜夜躁欧美| 国产精品嫩草影院com| 国产成人综合网| 国产午夜精品一区二区三区四区| 激情综合网最新| 久久久久久久久久久久久久久99 | 天天做天天摸天天爽国产一区 | 欧美一二三四区在线| 午夜电影久久久| 在线观看成人小视频| 悠悠色在线精品| 精品视频在线免费| 亚洲成人精品在线观看| 欧美丰满少妇xxxbbb| 人人精品人人爱| 精品国产一区二区三区久久久蜜月| 美女视频黄久久| 国产偷国产偷精品高清尤物| 丁香另类激情小说| 亚洲美女免费视频| 欧美午夜电影网| 日韩中文字幕区一区有砖一区 | 色综合久久中文字幕| 亚洲与欧洲av电影| 欧美日韩www| 精品一区二区影视| 亚洲国产成人私人影院tom| 成人黄色大片在线观看| 一区二区三区成人| 欧美一卡在线观看| 国产大片一区二区| 亚洲欧美二区三区| 欧美精品九九99久久| 国产一区二区成人久久免费影院| 国产精品免费免费| 欧美影片第一页| 久久97超碰色| 国产精品国产三级国产aⅴ中文| 在线观看成人小视频| 美女一区二区视频| 国产精品久久久久久久久久久免费看 | 中文字幕一区二区三区乱码在线 | 欧美日韩国产a| 久久国产生活片100| 国产精品天干天干在观线|