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

? 歡迎來(lái)到蟲(chóng)蟲(chóng)下載站! | ?? 資源下載 ?? 資源專(zhuān)輯 ?? 關(guān)于我們
? 蟲(chóng)蟲(chóng)下載站

?? cmxbtree.cpp

?? CMXBTree 的主要作用是在內(nèi)存中建立一棵B+樹(shù)
?? CPP
?? 第 1 頁(yè) / 共 4 頁(yè)
字號(hào):
        }
    }

    if( i > 0 ) //看看左邊的兄弟
    {
        if ( i == 1)
            pDataLeaf = (BTREE_DATA_LEAF *)pSearchIndexLeaf->pLeafLeft;
        else 
            pDataLeaf = (BTREE_DATA_LEAF *)pSearchIndexLeaf->IndexKeys[i-2].pKeyRight;
        if ( ! pDataLeaf ) return -1;
        nDataLeafLoc2 = GetTotalElemInDataLeaf( pDataLeaf );

        if( nDataLeafLoc1 + nDataLeafLoc2 <= BTREE_DEGREE )
        {
            if( nIndexLeafLoc == 1) //父節(jié)點(diǎn)只有最后一個(gè)元素
            {
                DATA_CONTAINER* pTmp[BTREE_DEGREE];
                memcpy( pTmp, pSearchDataLeaf->pDataCont, nDataLeafLoc1*sizeof(DATA_CONTAINER*));
                memcpy( pSearchDataLeaf->pDataCont,
                        pDataLeaf->pDataCont,  nDataLeafLoc2*sizeof(DATA_CONTAINER*));
                memcpy( &pSearchDataLeaf->pDataCont[nDataLeafLoc2],
                        pTmp,  nDataLeafLoc1*sizeof(DATA_CONTAINER*));
                
                pSearchIndexLeaf->IndexKeys[i-1].pKey = pSearchDataLeaf->pDataCont[0]->pData;

                pSearchIndexLeaf->pLeafLeft = NULL;
                DeleteDataLeaf( pDataLeaf );
                return 0;
            }
            else
            {
                //可以聯(lián)合

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

                return 0;
            }
        }
    }

    //如果不能聯(lián)合,就開(kāi)始旋轉(zhuǎn)

    if ( i > 0 ) //看看左邊的數(shù)據(jù)葉
    {
        if ( i == 1)
            pDataLeaf = (BTREE_DATA_LEAF *)pSearchIndexLeaf->pLeafLeft;
        else 
            pDataLeaf = (BTREE_DATA_LEAF *)pSearchIndexLeaf->IndexKeys[i-2].pKeyRight;
        int nDataLeafLoc;
        if ( ! pDataLeaf )  return -1;

        nDataLeafLoc = GetTotalElemInDataLeaf( pDataLeaf );
        //左邊的兄弟有沒(méi)有多余的
        if ( nDataLeafLoc > BTREE_DEGREE/2 )
        {
            for( j = 0; j < nDataLeafLoc1; j++)
                pSearchDataLeaf->pDataCont[j+1] = pSearchDataLeaf->pDataCont[j];
            
            pSearchDataLeaf->pDataCont[0] = pDataLeaf->pDataCont[nDataLeafLoc-1];
            pDataLeaf->pDataCont[nDataLeafLoc-1] = NULL;
            pSearchIndexLeaf->IndexKeys[i-1].pKey =pSearchDataLeaf->pDataCont[0]->pData;
            return 0;
        }
    }

    if ( i < BTREE_DEGREE ) //看看右邊的數(shù)據(jù)葉
    {
        if ( pSearchIndexLeaf->IndexKeys[i].pKey )
        {
            pDataLeaf = (BTREE_DATA_LEAF *)pSearchIndexLeaf->IndexKeys[i].pKeyRight;
            if ( ! pDataLeaf ) return -1;
            int nDataLeafLoc = GetTotalElemInDataLeaf( pDataLeaf );
            //右邊的兄弟有空
            if ( nDataLeafLoc > BTREE_DEGREE/2 )
            {
                pSearchDataLeaf->pDataCont[nDataLeafLoc1] = pDataLeaf->pDataCont[0];
                
                int j;
                for ( j = 0; j < nDataLeafLoc-1; j++)
                    pDataLeaf->pDataCont[j] = pDataLeaf->pDataCont[j+1];

                pDataLeaf->pDataCont[nDataLeafLoc-1] = NULL;
                pSearchIndexLeaf->IndexKeys[i].pKey = pDataLeaf->pDataCont[0]->pData;

                return 0;
            }
        }
    }
    return -1;
}

//向B+Tree 中插入 Key
template <class RECTYPE>
int CMXBTree<RECTYPE>::InsertKey( RECTYPE & Key )
{
    //搜索中當(dāng)前的索引葉
    BTREE_INDEX_LEAF *pSearchIndexLeaf  = m_pRoot;
    //搜索中當(dāng)前的數(shù)據(jù)葉
    BTREE_DATA_LEAF  *pSearchDataLeaf   = NULL;
    
    
    if ( !pSearchIndexLeaf )  //B+Tree 的最原始狀態(tài),連根都沒(méi)有
    {
        //生成根
        pSearchIndexLeaf    = NewIndexLeaf();
        if ( !pSearchIndexLeaf ) return -2;
        pSearchDataLeaf     = NewDataLeaf(); 
        if ( !pSearchDataLeaf ) return -2;
        
        pSearchIndexLeaf->IndexKeys[0].pKeyRight = pSearchDataLeaf;
        RECTYPE *pTmp = NewRecType();
        if( !pTmp ) return -2;

        DATA_CONTAINER *pDataCont = NewDataContainer();
        if( !pDataCont ) return -2;
        pDataCont->pData = pTmp;


        *pTmp = Key;
        pSearchIndexLeaf->cPointerType = DATA_LEAF_POINTER;
        pSearchIndexLeaf->IndexKeys[0].pKey = pTmp;
        pSearchDataLeaf->pDataCont[0] = pDataCont;

        m_pRoot = pSearchIndexLeaf;
        return 0;
    }
    //查找可以容納 Key 的數(shù)據(jù)葉
    bool bKeyInIndex = false;
    int i = GetDataLeaf( Key, pSearchIndexLeaf, pSearchDataLeaf, &bKeyInIndex );

    if ( i < 0 ) 
        return -1; //B+Tree 錯(cuò)誤
    if( !pSearchDataLeaf )
    {
        //來(lái)到這里的唯一可能性就是
        //索引葉的最左指針為 NULL
        //而且這棵樹(shù)只有一個(gè)索引葉和一個(gè)數(shù)據(jù)葉
        pSearchDataLeaf = NewDataLeaf(); //就給它一個(gè)新的
        if( !pSearchDataLeaf ) return -2;

        pSearchIndexLeaf->pLeafLeft = pSearchDataLeaf;
    }

    //在數(shù)據(jù)葉中查找 Key 是否存在
    DATA_CONTAINER *pDataCont ;
    if( bKeyInIndex )
        pDataCont = pSearchDataLeaf->pDataCont[0];
    else
        pDataCont = SeekInDataLeaf( pSearchDataLeaf, Key, NULL);
    if( pDataCont )
    {
        //存在!
        //建立 Key 鏈表
        while ( pDataCont->pNext )
            pDataCont = (DATA_CONTAINER *)pDataCont->pNext;

        DATA_CONTAINER *pDataCont2 = NewDataContainer();
        if( !pDataCont2) return -2; //沒(méi)有內(nèi)存
        pDataCont->pNext = pDataCont2;
        pDataCont2->pProv = pDataCont;
        pDataCont2->pData = NewRecType();
        if( !pDataCont2->pData ) return -2;
        *(pDataCont2->pData) = Key;
        //return 0;
        return 1; //表示該Key已經(jīng)存在
    }

//InsertAgain:
    //如果數(shù)據(jù)葉有空位置
    int nDataLeafLoc = GetFreeElemInDataLeaf( pSearchDataLeaf );

    if ( nDataLeafLoc > -1  )
    {
        //數(shù)據(jù)葉有空位置
        DATA_CONTAINER *pTmp = NewDataContainer();
        if( !pTmp ) return -2; 
        pTmp->pData = NewRecType();
        if( !pTmp->pData ) return -2;
        *(pTmp->pData) = Key;
        QuickSortData( pSearchDataLeaf->pDataCont, 0, nDataLeafLoc, pTmp );                
    }
    else
    {
        //如果數(shù)據(jù)葉已經(jīng)滿(mǎn)了,看看他的兄弟有沒(méi)有空間
        if ( i > 0 ) //看看左邊的數(shù)據(jù)葉
        {
            BTREE_DATA_LEAF *pDataLeaf;
            if ( i == 1)
            {
                pDataLeaf = (BTREE_DATA_LEAF *)pSearchIndexLeaf->pLeafLeft;
                if ( !pDataLeaf) 
                {
                    pDataLeaf = NewDataLeaf();
                    if( !pDataLeaf ) return -2;

                    pSearchIndexLeaf->pLeafLeft = pDataLeaf;
                }
            }
            else pDataLeaf = (BTREE_DATA_LEAF *)pSearchIndexLeaf->IndexKeys[i-2].pKeyRight;
            if ( ! pDataLeaf ) 
                return -1;
            int nDataLeafLoc = GetFreeElemInDataLeaf( pDataLeaf );
            //左邊的兄弟有空
            if ( nDataLeafLoc >= 0 )
            {
                //開(kāi)始把數(shù)據(jù)從右往左旋轉(zhuǎn)
                pDataLeaf->pDataCont[nDataLeafLoc] = pSearchDataLeaf->pDataCont[0];

                DATA_CONTAINER *pTmp = NewDataContainer();
                if( !pTmp) return -2;
                pTmp->pData = NewRecType();
                if( !pTmp->pData ) return -2;

                *(pTmp->pData) = Key;

                QuickSortData( pSearchDataLeaf->pDataCont, 1, BTREE_DEGREE, pTmp);

                pSearchIndexLeaf->IndexKeys[i-1].pKey = pSearchDataLeaf->pDataCont[0]->pData;

                return 0;
            }
        }

        if ( i < BTREE_DEGREE ) //看看右邊的數(shù)據(jù)葉
        {
            BTREE_DATA_LEAF *pDataLeaf;
            if ( pSearchIndexLeaf->IndexKeys[i].pKey )
            {
                pDataLeaf = (BTREE_DATA_LEAF *)pSearchIndexLeaf->IndexKeys[i].pKeyRight;
                if ( ! pDataLeaf ) 
                    return -1;
                int nDataLeafLoc = GetFreeElemInDataLeaf( pDataLeaf );
                //右邊的兄弟有空
                if ( nDataLeafLoc > -1 )
                {
                    //開(kāi)始把數(shù)據(jù)從左往右旋轉(zhuǎn)
                    int j;
                    //pDataLeaf->pDataCont[nDataLeafLoc] = pSearchDataLeaf->pDataCont[0];

                    //先騰出空間
                    for ( j = nDataLeafLoc; j > 0; j--)
                        pDataLeaf->pDataCont[j] = pDataLeaf->pDataCont[j-1];

                    //到底應(yīng)不應(yīng)該把 Key 移動(dòng)
                    //就得看看數(shù)據(jù)葉的最后一個(gè)元素的大小
                    if ( *(pSearchDataLeaf->pDataCont[BTREE_DEGREE-1]->pData) < Key )
                    {
                        pDataLeaf->pDataCont[0] = NewDataContainer();
                        if( !pDataLeaf->pDataCont[0]) return -2;

                        pDataLeaf->pDataCont[0]->pData = NewRecType();
                        if( !pDataLeaf->pDataCont[0]->pData ) return -2;

                        *(pDataLeaf->pDataCont[0]->pData) = Key;
                        pSearchIndexLeaf->IndexKeys[i].pKey = pDataLeaf->pDataCont[0]->pData;
                    }
                    else
                    {
                        pDataLeaf->pDataCont[0] = pSearchDataLeaf->pDataCont[BTREE_DEGREE-1];

                        DATA_CONTAINER *pTmp = NewDataContainer();
                        if( !pTmp ) return -2;
                        pTmp->pData = NewRecType();
                        if( !pTmp->pData) return -2;

                        *(pTmp->pData) = Key;

                        QuickSortData( pSearchDataLeaf->pDataCont,0, BTREE_DEGREE-1,pTmp );

                        pSearchIndexLeaf->IndexKeys[i].pKey = pDataLeaf->pDataCont[0]->pData;
                    }
                    return 0;
                }
            }
        }
        
        m_bMadeList = false;

        //左右兄弟都沒(méi)有空間
        //只好把數(shù)據(jù)葉拆分成兩個(gè)
        BTREE_DATA_LEAF *pDataLeaf = NewDataLeaf();
        if( !pDataLeaf ) return -2;

        INDEX_KEY   NewKey;
        int j,k,l;
        for ( j = (BTREE_DEGREE / 2), k = 0; j < BTREE_DEGREE; j++, k++)
        {
            pDataLeaf->pDataCont[k] = pSearchDataLeaf->pDataCont[j];
            pSearchDataLeaf->pDataCont[j] = NULL;
        }
        //數(shù)據(jù)葉拆分后,新增的 Key 應(yīng)該放在那一方.
        if ( Key < *(pDataLeaf->pDataCont[0]->pData) )
        {

            DATA_CONTAINER *pTmp = NewDataContainer();
            if( !pTmp ) return -2;

            pTmp->pData = NewRecType();
            if( !pTmp->pData ) return -2;

            *(pTmp->pData) = Key;
            QuickSortData( pSearchDataLeaf->pDataCont, 0, BTREE_DEGREE / 2, pTmp);
        }
        else
        {
            DATA_CONTAINER *pTmp = NewDataContainer();
            if( !pTmp ) return -2;

            pTmp->pData = NewRecType();
            if( !pTmp->pData ) return -2;

            *(pTmp->pData) = Key;
            QuickSortData( pDataLeaf->pDataCont, 0, k, pTmp);

        }

        //要插入到索引葉的 NewKey
        NewKey.pKey = pDataLeaf->pDataCont[0]->pData;
        NewKey.pKeyRight = pDataLeaf;

        //數(shù)據(jù)葉沒(méi)有空位,看看索引葉有沒(méi)有
        int nIndexLeafLoc = GetFreeElemInIndexLeaf( pSearchIndexLeaf );
        if ( nIndexLeafLoc > -1 )
        {
            //索引葉有空位
            for ( l = nIndexLeafLoc; l > i ; l -- )
            {
                pSearchIndexLeaf->IndexKeys[l] = pSearchIndexLeaf->IndexKeys[l-1];
            }
            pSearchIndexLeaf->IndexKeys[i] = NewKey;
        }
        else
        //數(shù)據(jù)葉和索引葉都沒(méi)有空位置
        {
            if ( SplitIndexLeaf(pSearchIndexLeaf, 
                                NewKey, i ) < 0 ) 
            return -1;

        }
    }
    
    return 0;
}

//向B+Tree 中查找 Key
//返回 NULL,表示查找不到,否則返回符合條件的 RECTYPE*
// pLessThan 如果不為NULL,返回時(shí)存放的就是比 Key 小的 RECTYPE*
// pGreaterThan 如果不為NULL,返回時(shí)存放的就是比 Key 大的 RECTYPE*
template <class RECTYPE>
RECTYPE* CMXBTree<RECTYPE>::SearchKey( RECTYPE & Key, SEARCH_KEY *pSK, RECTYPE **pLessThan, RECTYPE **pGreaterThan )
{
    if( pSK )
        memset( pSK, 0, sizeof(SEARCH_KEY) );

    if( ( pSK || pLessThan || pGreaterThan) && MakeDataList() < 0 ) //先做列表
    {
        if( pLessThan ) *pLessThan = NULL;
        if( pGreaterThan ) *pGreaterThan = NULL;
        return NULL;
    }
    //搜索中當(dāng)前的索引葉
    BTREE_INDEX_LEAF *pSearchIndexLeaf  = m_pRoot;
    //搜索中當(dāng)前的數(shù)據(jù)葉
    BTREE_DATA_LEAF  *pSearchDataLeaf   = NULL;
    BTREE_DATA_LEAF  *pSearchDataLeaf2;
    DATA_CONTAINER *pSearchResult;

    RECTYPE* pRet;
    
    bool KeyInIndex = false;
    if ( (GetDataLeaf( Key, pSearchIndexLeaf, pSearchDataLeaf, &KeyInIndex )) < 0 ) return NULL;
    if ( pSearchDataLeaf == NULL ) 
    {
        //唯一的可能性是 pSearchIndexLeaf 的 pLeftLeaf 為 NULL
        if( pLessThan ) *pLessThan = NULL;
        if( pGreaterThan ) *pGreaterThan = pSearchIndexLeaf->IndexKeys[0].pKey;
        return NULL;
    }
    
    int i;
    if ( KeyInIndex )
    {
        //索引葉中已經(jīng)有了Key了
        pSearchResult = pSearchDataLeaf->pDataCont[0];
        i = 0;
    }
    else
        pSearchResult = SeekInDataLeaf( pSearchDataLeaf,Key, &i);

    if( pSK )
    {
        pSK->m_pSearchResultOrig = pSearchResult;
        pSK->m_pSearchDataLeaf = pSearchDataLeaf;

        pSK->m_GetKey.m_nDataElemIndex = i;
        pSK->m_GetKey.m_pProv = pSearchDataLeaf;
        pSK->m_GetKey.m_DataCont = pSearchResult;

    }

    if( pSearchResult == NULL ) //在數(shù)據(jù)葉中沒(méi)有該 Key
    {
        if( i == 0) 
        {
            if( pLessThan ) 
            {
                if( pSearchDataLeaf->pProv )
                {
                    pSearchDataLeaf2 = pSearchDataLeaf->pProv;
                    int j = GetTotalElemInDataLeaf( pSearchDataLeaf->pProv );
                    *pLessThan = pSearchDataLeaf2->pDataCont[j-1]->pData;
                }
                else *pLessThan = NULL;
            }
            if( pGreaterThan )
                *pGreaterThan =  pSearchDataLeaf->pDataCont[0]->pData;
        }
        else
        {
            if( pLessThan ) 
                *pLessThan = pSearchDataLeaf->pDataCont[i-1]->pData;

            if( pGreaterThan )
            {
                if( i < BTREE_DEGREE && pSearchDataLeaf->pDataCont[i] )
                    *pGreaterThan =  pSearchDataLeaf->pDataCont[i]->pData;
                else
                {
                    if( pSearchDataLeaf->pNext )
                    {
                        pSearchDataLeaf2 = pSearchDataLeaf->pNext;
                        *pGreaterThan =  pSearchDataLeaf2->pDataCont[0]->pData;
                    }
                    else *pGreaterThan = NULL;
                }
            }
        }
        return NULL;
    }
    else
    {
        if( i == 0)
        {
            if( pLessThan ) 
            {
                if( pSearchDataLeaf->pProv )
                {
                    pSearchDataLeaf2 = pSearchDataLeaf->pProv;
                    int j = GetTotalElemInDataLeaf( pSearchDataLeaf->pProv );
                    *pLessThan = pSearchDataLeaf2->pDataCont[j-1]->pData;
                }
                else *pLessThan = NULL;
            }

?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产jizzjizz一区二区| 欧美日韩国产影片| 日本高清视频一区二区| 欧美一级免费大片| 欧美激情一区二区三区| 美腿丝袜亚洲三区| 欧美色手机在线观看| 一区二区三区.www| 色欧美片视频在线观看在线视频| 国产精品灌醉下药二区| 成人av在线网| 国产精品每日更新在线播放网址| 国产成人精品影院| 日韩精品午夜视频| 蜜桃精品视频在线| 国产精品美女视频| 日韩美女主播在线视频一区二区三区| 亚洲午夜免费视频| 欧美午夜精品一区| 日韩电影免费在线看| 欧美日韩大陆一区二区| 成人综合婷婷国产精品久久免费| 国产精品久久看| 精品区一区二区| 美女一区二区视频| 亚洲天堂网中文字| 欧美高清视频在线高清观看mv色露露十八 | 狠狠网亚洲精品| 日韩一区二区在线观看视频| 色av一区二区| 97久久精品人人做人人爽| 亚洲一区二区三区四区不卡| 91精品国产综合久久精品 | 色诱视频网站一区| 丁香六月综合激情| 国产一区二区三区四区五区美女| 国产丝袜美腿一区二区三区| 岛国一区二区三区| 国产精品综合视频| 亚洲精品国产一区二区精华液| 欧美三级午夜理伦三级中视频| 99热这里都是精品| 麻豆精品视频在线| 日本不卡不码高清免费观看| 中文字幕免费观看一区| 久久久久久一二三区| 在线观看网站黄不卡| 美女视频免费一区| 免费人成在线不卡| 日韩电影在线免费观看| 丝瓜av网站精品一区二区| 午夜精品免费在线| 亚洲天堂成人网| 国产精品日日摸夜夜摸av| 国产精品美女久久久久av爽李琼| 国产欧美一区二区在线| 日韩一区二区在线看| 日韩欧美一区中文| 久久日韩精品一区二区五区| 欧美性猛交xxxx乱大交退制版 | 99久久免费精品高清特色大片| 成人一级片在线观看| 懂色av中文一区二区三区| 成人理论电影网| 成人99免费视频| 色欧美日韩亚洲| 欧美日韩视频在线一区二区| 欧美放荡的少妇| 日韩视频不卡中文| 久久久久久日产精品| 国产精品日日摸夜夜摸av| 亚洲欧美一区二区久久| 久久蜜臀中文字幕| 国产精品色哟哟| 亚洲免费毛片网站| 五月激情六月综合| 久久精品99久久久| 丝袜亚洲另类丝袜在线| 另类的小说在线视频另类成人小视频在线| 精品一区二区三区在线观看国产| 视频在线观看一区| 精品一区二区综合| 成人深夜福利app| 欧亚一区二区三区| 日韩欧美激情一区| 中文一区一区三区高中清不卡| 亚洲男同性恋视频| 免费看日韩精品| 成人午夜电影网站| 在线免费亚洲电影| 久久人人爽人人爽| 一区二区在线观看视频| 蜜臀av一区二区| 91网站最新网址| 91网上在线视频| 在线播放91灌醉迷j高跟美女| 久久综合精品国产一区二区三区| 亚洲欧美一区二区三区极速播放| 青娱乐精品视频在线| 成人看片黄a免费看在线| 欧美高清性hdvideosex| 国产精品青草综合久久久久99| 亚洲福利一区二区三区| 成人综合日日夜夜| 欧美一区二区视频在线观看2022| 国产精品色噜噜| 男女男精品网站| 色婷婷综合激情| 久久久亚洲国产美女国产盗摄| 亚洲一区二区精品视频| 高清不卡一区二区在线| 欧美精品少妇一区二区三区| 亚洲欧洲性图库| 亚洲综合视频在线观看| 国产一区二区影院| 久久影视一区二区| 欧美三区在线视频| 国产嫩草影院久久久久| 日本亚洲免费观看| aaa欧美日韩| 久久影视一区二区| 男人的天堂久久精品| 91久久精品一区二区二区| 国产亚洲欧洲997久久综合| 天天操天天色综合| 色综合网色综合| 色婷婷国产精品| 欧美国产日韩a欧美在线观看 | 青青草伊人久久| 欧美专区日韩专区| 综合久久久久久久| 成人手机在线视频| 国产三级一区二区| 久久99精品一区二区三区三区| 欧美乱妇20p| 亚洲宅男天堂在线观看无病毒 | 国产欧美日韩一区二区三区在线观看| 午夜成人在线视频| 欧美视频在线播放| 亚洲高清免费观看| 91久久人澡人人添人人爽欧美| 国产精品护士白丝一区av| 国产99精品视频| 精品理论电影在线| 久久国产精品99久久人人澡| 91麻豆精品国产91久久久| 三级久久三级久久| 欧美日韩一区 二区 三区 久久精品| 亚洲欧美另类图片小说| 91麻豆精品在线观看| 亚洲欧美一区二区不卡| 91麻豆精东视频| 玉米视频成人免费看| 欧日韩精品视频| 亚洲影院免费观看| 欧美午夜精品久久久久久孕妇 | 国产.欧美.日韩| 久久综合视频网| 国产一区在线看| 久久久.com| 成人手机在线视频| 亚洲欧美日韩一区二区三区在线观看| 92国产精品观看| 一区二区欧美国产| 欧美三级欧美一级| 日韩精品午夜视频| 欧美成人性战久久| 国产精品18久久久久久久久| 欧美国产亚洲另类动漫| 99久久国产综合精品色伊| 一区二区成人在线| 久久久久久久综合日本| 成人动漫一区二区在线| 一区二区三区波多野结衣在线观看| 欧美日韩视频一区二区| 免费欧美高清视频| 国产欧美日韩麻豆91| 99r精品视频| 午夜精品久久久久久久久久久 | 欧美午夜一区二区| 日本成人在线不卡视频| 欧美精品一区二区久久久| 亚洲成人手机在线| 懂色av一区二区三区蜜臀| 成人欧美一区二区三区小说| 欧美曰成人黄网| 久久国产夜色精品鲁鲁99| 国产日韩欧美精品在线| 在线影视一区二区三区| 蜜臀久久99精品久久久画质超高清| 久久综合久久综合亚洲| 91视频.com| 蜜臀av一区二区| 国产精品福利在线播放| 欧美精品欧美精品系列| 国产夫妻精品视频| 亚洲国产成人av网| 久久新电视剧免费观看| 91美女在线看| 久久成人综合网|