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

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

?? cmxbtree.cpp

?? CMXBTree 的主要作用是在內存中建立一棵B+樹
?? CPP
?? 第 1 頁 / 共 4 頁
字號:
                pIndexLeaf = (BTREE_INDEX_LEAF *)pParentIndex->pLeafLeft;
                if ( !pIndexLeaf) 
                    return -1;
            }
            else pIndexLeaf = (BTREE_INDEX_LEAF *)pParentIndex->IndexKeys[nIndexLoc-2].pKeyRight;
            if ( ! pIndexLeaf ) 
                return -1;
            int nIndexLeafLoc = GetFreeElemInIndexLeaf( pIndexLeaf );
            //左邊的兄弟有空
            if ( nIndexLeafLoc > -1 )
            {
                //占據左邊兄弟的空位
                pIndexLeaf->IndexKeys[nIndexLeafLoc].pKey = pParentIndex->IndexKeys[nIndexLoc-1].pKey ;
                pIndexLeaf->IndexKeys[nIndexLeafLoc].pKeyRight = pCurIndexLeaf->pLeafLeft;
                
                //占據父節點騰出來的空位
                pParentIndex->IndexKeys[nIndexLoc-1].pKey = TmpIndexKeys[0].pKey;
                pParentIndex->IndexKeys[nIndexLoc-1].pKeyRight = pCurIndexLeaf;
                
                //把自己的值設置好
                pCurIndexLeaf->pLeafLeft = TmpIndexKeys[0].pKeyRight;
                memcpy( pCurIndexLeaf->IndexKeys, &TmpIndexKeys[1], BTREE_DEGREE * sizeof( INDEX_KEY ));


                return 0;


            }
        }

        //最后左右兄弟都沒有空間了
        //看看父親有沒有
        int nCutPosition = (BTREE_DEGREE + 1)/2;
        int nIndexLeafLoc;

        if ( (nIndexLeafLoc = GetFreeElemInIndexLeaf( pCurIndexLeaf->pParent )) > -1 )
        {
            //父親有空間
            //本索引葉需要拆分
            BTREE_INDEX_LEAF *pParentIndex = pCurIndexLeaf->pParent;
            BTREE_INDEX_LEAF *pIndexLeaf1 = NewIndexLeaf();
            if( !pIndexLeaf1 ) return -2;

            //先把在父節點中所需要的位置騰出來
            for ( l = nIndexLeafLoc; l > nIndexLoc ; l -- )
            {
                pParentIndex->IndexKeys[l] = pParentIndex->IndexKeys[l-1];
            }
            //占據父節點的空間
            pParentIndex->IndexKeys[nIndexLoc].pKey = TmpIndexKeys[nCutPosition].pKey;
            pParentIndex->IndexKeys[nIndexLoc].pKeyRight = pIndexLeaf1;
            
            //設置新的索引葉數據
            pIndexLeaf1->cPointerType = pCurIndexLeaf->cPointerType ;
            pIndexLeaf1->pLeafLeft = TmpIndexKeys[nCutPosition].pKeyRight;
            pIndexLeaf1->pParent = pParentIndex;

            //給這兩個索引葉賦值
            for(l = nCutPosition + 1,j = 0 ; l < BTREE_DEGREE+1; l ++, j++)
            {
                pIndexLeaf1->IndexKeys[j] = TmpIndexKeys[l];
            }
            memset(pCurIndexLeaf->IndexKeys, 0, BTREE_DEGREE * sizeof( INDEX_KEY ));
            for(l = 0 ; l < nCutPosition; l ++)                
            {
                pCurIndexLeaf->IndexKeys[l] = TmpIndexKeys[l];
            }

            return 0;

        }
        
        //父節點也沒有空位置了,只好交給爺爺節點
        //先拆分
        memset( pCurIndexLeaf->IndexKeys, 0, BTREE_DEGREE * sizeof( INDEX_KEY ) );
        memcpy( pCurIndexLeaf->IndexKeys, &TmpIndexKeys[0], nCutPosition* sizeof( INDEX_KEY ));
        BTREE_INDEX_LEAF *pIndexLeaf1 = NewIndexLeaf();
        if( !pIndexLeaf1 ) return -2;

        pIndexLeaf1->cPointerType = pCurIndexLeaf->cPointerType;
        pIndexLeaf1->pLeafLeft = TmpIndexKeys[nCutPosition].pKeyRight;
        memcpy( pIndexLeaf1->IndexKeys, &TmpIndexKeys[nCutPosition+1], (BTREE_DEGREE-nCutPosition)*sizeof( INDEX_KEY ));

        
        TmpIndexKeys[nCutPosition].pKeyRight = pIndexLeaf1;

        pCurIndexLeaf = pCurIndexLeaf->pParent;
        //pLeftLeaf = (void *)pCurIndexLeaf;
        //pRightLeaf = (void *)pIndexLeaf1;
        NewKey = TmpIndexKeys[nCutPosition];
        i = nIndexLoc;
        goto SplitAgain;
    }
//    return 0;
}


//如果能在數據葉中找到 Key, 則 nIndex 存放的就是Key在pDataLeaf中
//存放的位置,取值 0 ~ BTREE_DEGREE - 1
//如果找不到,nIndex 存放的就是可以讓 Key 在 pDataLeaf 中插入的位置
//取值 0 ~ BTREE_DEGREE
//算法采用二分法
template <class RECTYPE> CMXBTree<RECTYPE>::DATA_CONTAINER * 
CMXBTree<RECTYPE>::SeekInDataLeaf( 
                                  BTREE_DATA_LEAF *pDataLeaf, 
                                  RECTYPE &Key, 
                                  int *nIndex
                                  )
{
    if ( pDataLeaf == NULL ) return NULL;

    int nLo = 0, nHi = BTREE_DEGREE - 1;
    int i;

    while( true )
    {
        //if( nLo > nHi ) return NULL;
        i = ( nLo + nHi ) / 2;        
        if(! pDataLeaf->pDataCont[i] || Key < *(pDataLeaf->pDataCont[i]->pData) )
        {
            nHi = i - 1;
            if( nLo > nHi )
            {
                if( nIndex ) *nIndex = nHi + 1;
                return NULL;
            }
            continue;
        }
        else 
        if( *(pDataLeaf->pDataCont[i]->pData) < Key ) 
        {
            nLo = i + 1;
            if( nLo > nHi )
            {
                if( nIndex ) *nIndex = nLo;
                return NULL;
            }
            continue;
        }
        else
        {
            if( nIndex ) *nIndex = i; 
            return  pDataLeaf->pDataCont[i] ;
        }
    }
//    return NULL;
}

//刪除 DATA_CONTAINER 鏈表,包括 RECTYPE *
template <class RECTYPE>
int CMXBTree<RECTYPE>::DeleteDataContainerTrain( DATA_CONTAINER *pHead )
{
    DATA_CONTAINER *pTmp;
    while( pHead )
    {
        if( pHead->pData )
            DeleteRecType( pHead->pData );
        else return -1;
        pTmp = pHead->pNext;
        DeleteDataContainer( pHead );
        pHead = pTmp;
    }
    return 0;
}

//在索引葉內刪除元素
//是 SplitIndexLeaf 的反操作
//被 DeleteKey 調用
//其中參數 q 就是要刪除的第幾個索引
template <class RECTYPE>
int CMXBTree<RECTYPE>::RemoveIndexKey( BTREE_INDEX_LEAF *pSearchIndexLeaf, int q )
{

RemoveAgain:
    
    int nIndexLeafLoc2;
    int j,l;
    int nIndexLeafLoc1 = GetTotalElemInIndexLeaf( pSearchIndexLeaf );

    if( !pSearchIndexLeaf->pParent ) //自己就是根
    {
        if( nIndexLeafLoc1 == 1 ) //只有最后一個元素
        {
            m_pRoot = (BTREE_INDEX_LEAF *)pSearchIndexLeaf->pLeafLeft;
            m_pRoot->pParent = NULL;
            DeleteIndexLeaf( pSearchIndexLeaf );
        }
        else
        {
            for( l = q; l < nIndexLeafLoc1 - 1; l++ )
            {
                pSearchIndexLeaf->IndexKeys[l] = pSearchIndexLeaf->IndexKeys[l+1];
            }
            pSearchIndexLeaf->IndexKeys[nIndexLeafLoc1 - 1].pKey = NULL;
            pSearchIndexLeaf->IndexKeys[nIndexLeafLoc1 - 1].pKeyRight = NULL;
        }
        return 0;
    }

    for( j = q; j < nIndexLeafLoc1-1; j++ )
    {
        pSearchIndexLeaf->IndexKeys[j] = pSearchIndexLeaf->IndexKeys[j+1];
    }
    pSearchIndexLeaf->IndexKeys[nIndexLeafLoc1-1].pKey = NULL;
    pSearchIndexLeaf->IndexKeys[nIndexLeafLoc1-1].pKeyRight = NULL;

    //占用了多少個
    nIndexLeafLoc1 --;
    if( nIndexLeafLoc1 >= BTREE_DEGREE /2 ) return 0; //數據葉元素個數還夠

    int i;
    //尋找 pSearchIndexLeaf 在父節點的位置
    BTREE_INDEX_LEAF *pParentIndex = pSearchIndexLeaf->pParent;
    i = SeekParent( pParentIndex, pSearchIndexLeaf);
    if( i < 0 ) 
        return -1;

    BTREE_INDEX_LEAF *pIndexLeaf;

    //看看能不能和兄弟聯合
    if( i < BTREE_DEGREE ) //看看右邊的兄弟
    {
        //到底有沒有右邊的兄弟?
        if( pParentIndex->IndexKeys[i].pKey )
        {
            pIndexLeaf = (BTREE_INDEX_LEAF *)pParentIndex->IndexKeys[i].pKeyRight;
            if( !pIndexLeaf ) return -1;
            nIndexLeafLoc2 = GetTotalElemInIndexLeaf( pIndexLeaf );
            if( nIndexLeafLoc1 + nIndexLeafLoc2 + 1 <= BTREE_DEGREE )
            {
                //可以聯合
                pSearchIndexLeaf->IndexKeys[nIndexLeafLoc1].pKey = pParentIndex->IndexKeys[i].pKey;
                pSearchIndexLeaf->IndexKeys[nIndexLeafLoc1].pKeyRight = pIndexLeaf->pLeafLeft;
                
                memcpy( &pSearchIndexLeaf->IndexKeys[nIndexLeafLoc1+1],
                        pIndexLeaf->IndexKeys,  nIndexLeafLoc2*sizeof(INDEX_KEY));
                DeleteIndexLeaf( pIndexLeaf );

                pSearchIndexLeaf = pParentIndex;
                q = i;
                goto RemoveAgain;
            }   
        }
    }

    if( i > 0 ) //看看左邊的兄弟
    {
        if ( i == 1)
            pIndexLeaf = (BTREE_INDEX_LEAF *)pParentIndex->pLeafLeft;
        else 
            pIndexLeaf = (BTREE_INDEX_LEAF *)pParentIndex->IndexKeys[i-2].pKeyRight;
        if ( ! pIndexLeaf ) return -1;
        nIndexLeafLoc2 = GetTotalElemInIndexLeaf( pIndexLeaf );
        if( nIndexLeafLoc1 + nIndexLeafLoc2 + 1 <= BTREE_DEGREE )
        {
            //可以聯合
            pIndexLeaf->IndexKeys[nIndexLeafLoc2].pKey = pParentIndex->IndexKeys[i-1].pKey;
            pIndexLeaf->IndexKeys[nIndexLeafLoc2].pKeyRight = pSearchIndexLeaf->pLeafLeft;

            memcpy( &pIndexLeaf->IndexKeys[nIndexLeafLoc2+1],
                    pSearchIndexLeaf->IndexKeys,  nIndexLeafLoc1*sizeof(INDEX_KEY));
            
            BTREE_INDEX_LEAF *pTmp = pParentIndex;
            DeleteIndexLeaf( pSearchIndexLeaf );
            pSearchIndexLeaf = pTmp;
            q = i-1;
            goto RemoveAgain;
        }
    }

    //如果不能聯合,就開始旋轉
    if ( i > 0 ) //看看左邊的數據葉
    {
        if ( i == 1)
            pIndexLeaf = (BTREE_INDEX_LEAF *)pParentIndex->pLeafLeft;
        else 
            pIndexLeaf = (BTREE_INDEX_LEAF *)pParentIndex->IndexKeys[i-2].pKeyRight;
        if ( ! pIndexLeaf ) return -1;
        int nIndexLeafLoc = GetTotalElemInIndexLeaf( pIndexLeaf );
        //左邊的兄弟有沒有多余的
        if ( nIndexLeafLoc > BTREE_DEGREE/2 )
        {
            for( j = 0; j < nIndexLeafLoc1; j++)
                pSearchIndexLeaf->IndexKeys[j+1] = pSearchIndexLeaf->IndexKeys[j];
            
            pSearchIndexLeaf->IndexKeys[0].pKey  = pParentIndex->IndexKeys[i-1].pKey;
            pSearchIndexLeaf->IndexKeys[0].pKeyRight = pSearchIndexLeaf->pLeafLeft;
            pSearchIndexLeaf->pLeafLeft = pIndexLeaf->IndexKeys[nIndexLeafLoc-1].pKeyRight;
            pParentIndex->IndexKeys[i-1].pKey = pIndexLeaf->IndexKeys[nIndexLeafLoc-1].pKey;
            
            pIndexLeaf->IndexKeys[nIndexLeafLoc-1].pKey = NULL;
            pIndexLeaf->IndexKeys[nIndexLeafLoc-1].pKeyRight = NULL;

            return 0;
        }
    }

    if ( i < BTREE_DEGREE ) //看看右邊的數據葉
    {
        if ( pParentIndex->IndexKeys[i].pKey )
        {
            pIndexLeaf = (BTREE_INDEX_LEAF *)pParentIndex->IndexKeys[i].pKeyRight;
            if ( ! pIndexLeaf ) return -1;
            int nIndexLeafLoc = GetTotalElemInIndexLeaf( pIndexLeaf );
            //右邊的兄弟有多余的元素
            if ( nIndexLeafLoc > BTREE_DEGREE/2 )
            {
                pSearchIndexLeaf->IndexKeys[nIndexLeafLoc1].pKey = pParentIndex->IndexKeys[i].pKey;
                pSearchIndexLeaf->IndexKeys[nIndexLeafLoc1].pKeyRight = pIndexLeaf->pLeafLeft;
                pIndexLeaf->pLeafLeft = pIndexLeaf->IndexKeys[0].pKeyRight;
                pParentIndex->IndexKeys[i].pKey = pIndexLeaf->IndexKeys[0].pKey;
                
                for ( j = 0; j < nIndexLeafLoc-1; j++)
                    pIndexLeaf->IndexKeys[j] = pIndexLeaf->IndexKeys[j+1];

                pIndexLeaf->IndexKeys[nIndexLeafLoc-1].pKey = NULL;
                pIndexLeaf->IndexKeys[nIndexLeafLoc-1].pKeyRight = NULL;

                return 0;
            }
        }
    }
    return -1;
}

//在B+Tree 中刪除 Key
//InsertKey 的反操作
template <class RECTYPE>
int CMXBTree<RECTYPE>::DeleteKey( RECTYPE &Key )
{
    //搜索中當前的索引葉
    BTREE_INDEX_LEAF *pSearchIndexLeaf  = m_pRoot;
    //搜索中當前的數據葉
    BTREE_DATA_LEAF  *pSearchDataLeaf   = NULL;

    bool bKeyInIndex = false;

    int i = GetDataLeaf( Key, pSearchIndexLeaf, pSearchDataLeaf, &bKeyInIndex );
    if ( i < 0 ) return -1;
    if( !pSearchDataLeaf ) return 1; //找不到Key

    int q,j;

    //SeekInDataLeaf( pSearchDataLeaf, Key, &q );
    //if( q == BTREE_DEGREE ) return 1; //表示該 Key 不存在
    if( bKeyInIndex )
        q = 0;
    else
    {
        if( SeekInDataLeaf( pSearchDataLeaf, Key, &q ) == NULL ) 
            return 1;
    }
    
    int nIndexLeafLoc = GetTotalElemInIndexLeaf( pSearchIndexLeaf );

    //如果索引葉有父親,而且元素個數少于一半,則B+TREE出錯
    if( nIndexLeafLoc < BTREE_DEGREE/2 && pSearchIndexLeaf->pParent ) return -1;
    
    //占用了多少個元素
    int nDataLeafLoc1 = GetTotalElemInDataLeaf( pSearchDataLeaf );

    //把父節點更新
    if( q == 0 ) //數據葉的最左邊的元素
    {
        if( i > 0 ) //不是索引葉的最左邊
        {
            if( pSearchDataLeaf->pDataCont[1] )
                pSearchIndexLeaf->IndexKeys[i-1].pKey = pSearchDataLeaf->pDataCont[1]->pData ;
        }
        else
        {   //索引葉的最左邊
            BTREE_INDEX_LEAF *pIndexLeaf = pSearchIndexLeaf->pParent;
            while( pIndexLeaf )
            {
                for( j = 0; j < BTREE_DEGREE; j++ )
                {
                    if( pIndexLeaf->IndexKeys[j].pKey == pSearchDataLeaf->pDataCont[0]->pData )
                    {
                         pIndexLeaf->IndexKeys[j].pKey = pSearchDataLeaf->pDataCont[1]->pData ;
                         break;
                    }
                }
                if( j == BTREE_DEGREE ) 
                    pIndexLeaf = pIndexLeaf->pParent;
                else break;
            }
        }
    }

    //先把數據元素刪除
    if( DeleteDataContainerTrain( pSearchDataLeaf->pDataCont[q] ) < 0 ) return -1;
    //移動數據
    

    int nDataLeafLoc2;

    for( j = q; j < nDataLeafLoc1-1; j++ )
    {
        pSearchDataLeaf->pDataCont[j] = pSearchDataLeaf->pDataCont[j+1];
    }
    pSearchDataLeaf->pDataCont[nDataLeafLoc1-1] = NULL;
    
    nDataLeafLoc1 --;
    if( nDataLeafLoc1 >= BTREE_DEGREE /2 ) return 0; //數據葉元素個數還夠

    m_bMadeList  = false; //如果已經 MakeList 了,就只好在 Make 一次

    //如果只剩下一個索引葉,而且索引葉只有一個元素,而且索引葉的 pLeafLeft 是空
    if( nIndexLeafLoc == 1 && ! pSearchIndexLeaf->pLeafLeft )
    {
        if( nDataLeafLoc1 == 0 ) 
        {
            //B+TREE 的最有一個元素都消失了
            DeleteDataLeaf( pSearchDataLeaf );
            DeleteIndexLeaf( pSearchIndexLeaf );
            m_pRoot = NULL;
        }
        return 0;
    }
    
    BTREE_DATA_LEAF *pDataLeaf;
    //看看能不能和兄弟聯合
    if( i < BTREE_DEGREE ) //看看右邊的兄弟
    {
        //到底有沒有右邊的兄弟?
        if( pSearchIndexLeaf->IndexKeys[i].pKey )
        {
            pDataLeaf = (BTREE_DATA_LEAF *)pSearchIndexLeaf->IndexKeys[i].pKeyRight;
            if( !pDataLeaf ) return -1;
            nDataLeafLoc2 = GetTotalElemInDataLeaf( pDataLeaf );
            if( nDataLeafLoc1 + nDataLeafLoc2 <= BTREE_DEGREE )
            {
                if( nIndexLeafLoc == 1) //父節點只有最后一個元素
                {
                    DATA_CONTAINER* pTmp[BTREE_DEGREE];
                    memcpy( pTmp, pDataLeaf->pDataCont, nDataLeafLoc2*sizeof(DATA_CONTAINER*));
                    memcpy( pDataLeaf->pDataCont,
                            pSearchDataLeaf->pDataCont,  nDataLeafLoc1*sizeof(DATA_CONTAINER*));
                    memcpy( &pDataLeaf->pDataCont[nDataLeafLoc1], pTmp, nDataLeafLoc2*sizeof(DATA_CONTAINER*));
                    pSearchIndexLeaf->pLeafLeft = NULL;
                    DeleteDataLeaf( pSearchDataLeaf );
                    pSearchIndexLeaf->IndexKeys[i].pKey = pDataLeaf->pDataCont[0]->pData;
                    return 0;
                }
                else
                {
                    //可以聯合

                    memcpy( &pSearchDataLeaf->pDataCont[nDataLeafLoc1],
                            pDataLeaf->pDataCont,  nDataLeafLoc2*sizeof(DATA_CONTAINER*));
                    DeleteDataLeaf( pDataLeaf );
                    if( RemoveIndexKey( pSearchIndexLeaf, i ) < 0 ) return -1;
 
                    return 0;
                }
            }   

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
精品国产乱码久久久久久图片| 盗摄精品av一区二区三区| 在线一区二区三区四区五区 | 久久久久久综合| 国产乱一区二区| 国产精品视频在线看| 91麻豆国产福利在线观看| 亚洲综合在线电影| 欧美精品亚洲一区二区在线播放| 老鸭窝一区二区久久精品| 欧美激情一区不卡| 在线一区二区视频| 日韩va欧美va亚洲va久久| 日韩欧美一级二级| 99热在这里有精品免费| 午夜精品久久一牛影视| 国产午夜精品一区二区| 在线这里只有精品| 久久国产婷婷国产香蕉| 国产精品日韩精品欧美在线| 欧美色爱综合网| 国产精品66部| 肉肉av福利一精品导航| 欧美国产日本韩| 欧美精品在线一区二区| 高清国产午夜精品久久久久久| 亚洲影院免费观看| 国产日韩一级二级三级| 欧美日韩在线播放| 国产69精品久久久久777| 五月天欧美精品| 中文字幕在线观看一区| 欧美电影免费观看高清完整版在| 91美女福利视频| 国产精品一区二区久激情瑜伽| 亚洲卡通欧美制服中文| 国产亚洲视频系列| 欧美精品日韩精品| 色婷婷综合久久久中文字幕| 国产在线精品免费| 日韩av网站免费在线| 亚洲日本乱码在线观看| 久久嫩草精品久久久久| 欧美精品在线观看一区二区| 91年精品国产| 成人一区二区视频| 精品夜夜嗨av一区二区三区| 五月婷婷激情综合| 亚洲欧美一区二区三区久本道91| 久久久国产午夜精品| 日韩欧美国产电影| 欧美精品久久一区| 欧美日韩专区在线| 色乱码一区二区三区88 | 99久久精品99国产精品| 久久99精品国产| 青青草91视频| 日韩黄色免费电影| 午夜激情综合网| 亚洲精品少妇30p| ...av二区三区久久精品| 国产亚洲欧美日韩在线一区| 26uuu精品一区二区| 欧美一区二区精品| 欧美精品国产精品| 欧美猛男gaygay网站| 欧美性猛交xxxx乱大交退制版 | av成人老司机| 国产69精品一区二区亚洲孕妇 | 亚洲免费观看在线视频| 亚洲欧洲无码一区二区三区| 中文字幕中文乱码欧美一区二区| 国产三级精品在线| 日本一区二区三区国色天香 | 中文一区在线播放| 中文一区在线播放| 国产精品乱码人人做人人爱| 中文字幕一区二区在线观看| 日韩毛片在线免费观看| 亚洲激情男女视频| 亚洲成人中文在线| 日本不卡1234视频| 精彩视频一区二区三区| 国产福利精品一区二区| 成人精品电影在线观看| 日本乱码高清不卡字幕| 欧美日韩免费观看一区二区三区| 欧美人与禽zozo性伦| 欧美一区在线视频| 久久久午夜精品理论片中文字幕| 欧美激情一区二区三区四区| 亚洲视频免费在线| 婷婷久久综合九色综合绿巨人| 日本不卡一区二区三区 | 视频一区视频二区在线观看| 美腿丝袜亚洲色图| 国产精品888| 日本精品视频一区二区| 日韩天堂在线观看| 日本一区二区三区在线观看| 亚洲综合清纯丝袜自拍| 麻豆国产精品官网| 99精品偷自拍| 日韩三级伦理片妻子的秘密按摩| 欧美激情一区三区| 五月开心婷婷久久| 国产成人亚洲精品狼色在线| 色综合久久九月婷婷色综合| 欧美一级艳片视频免费观看| 中文字幕高清不卡| 视频一区二区三区中文字幕| 国产传媒日韩欧美成人| 日本久久电影网| 久久亚洲捆绑美女| 亚洲一区二区三区四区不卡| 国产乱码精品一区二区三区五月婷 | 韩国在线一区二区| 色吊一区二区三区| 久久久久久久一区| 亚洲第一福利一区| 国产91精品露脸国语对白| 欧美日韩国产一级片| 中文字幕第一区综合| 欧美a一区二区| 一本大道久久a久久精二百 | 国产欧美一区二区精品仙草咪| 亚洲尤物视频在线| 成人一级黄色片| 日韩欧美二区三区| 亚洲一区二区三区四区在线免费观看 | 三级欧美韩日大片在线看| 成人综合婷婷国产精品久久免费| 欧美巨大另类极品videosbest | 一区二区三区四区精品在线视频| 精品中文字幕一区二区| 欧美女孩性生活视频| 18涩涩午夜精品.www| 国内精品国产成人国产三级粉色 | 国产欧美精品一区二区色综合朱莉 | 亚洲在线视频一区| 暴力调教一区二区三区| 久久先锋影音av鲁色资源| 日本特黄久久久高潮| 欧美日韩一区二区三区免费看| 亚洲色图欧美激情| 成人性视频免费网站| 国产亚洲一区二区在线观看| 极品美女销魂一区二区三区| 7777女厕盗摄久久久| 午夜不卡在线视频| 91久久精品一区二区三| 亚洲欧美一区二区三区国产精品 | 久久久久久久久久久久电影| 日本特黄久久久高潮| 欧美精品久久一区| 天堂资源在线中文精品| 欧美日韩精品三区| 亚洲成av人在线观看| 欧美色老头old∨ideo| 亚洲网友自拍偷拍| 欧美色国产精品| 偷窥少妇高潮呻吟av久久免费| 欧美日韩大陆在线| 日韩专区中文字幕一区二区| 91精品国产综合久久福利软件| 日韩av一级片| 精品裸体舞一区二区三区| 麻豆成人在线观看| 欧美精品一区二区三区蜜桃视频| 看电影不卡的网站| 久久久国产一区二区三区四区小说| 国产毛片精品国产一区二区三区| 26uuu亚洲综合色| 成人国产免费视频| 亚洲免费资源在线播放| 欧美三级视频在线观看| 青娱乐精品视频| 久久综合色播五月| 大胆亚洲人体视频| 亚洲另类色综合网站| 欧美三级三级三级爽爽爽| 欧美精品一区二区三区蜜桃| 久久天天做天天爱综合色| 亚洲国产成人porn| 精品国产一区二区精华| 国产福利91精品| 亚洲三级小视频| 777亚洲妇女| 国产九色精品成人porny| 中文字幕永久在线不卡| 欧美视频日韩视频在线观看| 美女视频黄频大全不卡视频在线播放| 欧美电影免费观看高清完整版在 | 国产乱子伦视频一区二区三区| 中文字幕精品一区二区精品绿巨人| 91免费视频网| 久久99热狠狠色一区二区| 亚洲欧洲精品一区二区三区不卡| 欧美人与性动xxxx| 国产成人h网站|