青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

Kisser Leon

這個kisser不太冷
posts - 100, comments - 102, trackbacks - 0, articles - 0

ConvertUTF.c

Posted on 2007-03-08 16:02 kk 閱讀(3345) 評論(0)  編輯 收藏 引用 所屬分類: IT
UTF8和UTF16和UTF32之間的相互轉化

/* ================================================================ */
/*
File:?? ?ConvertUTF.C
Author: Mark E. Davis
Copyright (C) 1994 Taligent, Inc. All rights reserved.

This code is copyrighted. Under the copyright laws, this code may not
be copied, in whole or part, without prior written consent of Taligent.

Taligent grants the right to use or reprint this code as long as this
ENTIRE copyright notice is reproduced in the code or reproduction.
The code is provided AS-IS, AND TALIGENT DISCLAIMS ALL WARRANTIES,
EITHER EXPRESS OR IMPLIED, INCLUDING, BUT NOT LIMITED TO IMPLIED
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.? IN
NO EVENT WILL TALIGENT BE LIABLE FOR ANY DAMAGES WHATSOEVER (INCLUDING,
WITHOUT LIMITATION, DAMAGES FOR LOSS OF BUSINESS PROFITS, BUSINESS
INTERRUPTION, LOSS OF BUSINESS INFORMATION, OR OTHER PECUNIARY
LOSS) ARISING OUT OF THE USE OR INABILITY TO USE THIS CODE, EVEN
IF TALIGENT HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
BECAUSE SOME STATES DO NOT ALLOW THE EXCLUSION OR LIMITATION OF
LIABILITY FOR CONSEQUENTIAL OR INCIDENTAL DAMAGES, THE ABOVE
LIMITATION MAY NOT APPLY TO YOU.

RESTRICTED RIGHTS LEGEND: Use, duplication, or disclosure by the
government is subject to restrictions as set forth in subparagraph
(c)(l)(ii) of the Rights in Technical Data and Computer Software
clause at DFARS 252.227-7013 and FAR 52.227-19.

This code may be protected by one or more U.S. and International
Patents.

TRADEMARKS: Taligent and the Taligent Design Mark are registered
trademarks of Taligent, Inc.
*/
/* ================================================================ */

#include "ConvertUTF.h"

/* ================================================================ */

const int halfShift?? ??? ??? ??? ?= 10;
const UCS4 halfBase?? ??? ??? ??? ?= 0x0010000UL;
const UCS4 halfMask?? ??? ??? ??? ?= 0x3FFUL;
const UCS4 kSurrogateHighStart?? ?= 0xD800UL;
const UCS4 kSurrogateHighEnd?? ?= 0xDBFFUL;
const UCS4 kSurrogateLowStart?? ?= 0xDC00UL;
const UCS4 kSurrogateLowEnd?? ??? ?= 0xDFFFUL;

/* ================================================================ */

ConversionResult?? ?ConvertUCS4toUTF16 (
?? ??? ?UCS4** sourceStart, const UCS4* sourceEnd,
?? ??? ?UTF16** targetStart, const UTF16* targetEnd) {
?? ?ConversionResult result = kUTFConversionOK;
?? ?register UCS4* source = *sourceStart;
?? ?register UTF16* target = *targetStart;
?? ?while (source < sourceEnd) {
?? ??? ?register UCS4 ch;
?? ??? ?if (target >= targetEnd) {
?? ??? ??? ?result = kUTFConversionTargetExhausted; break;
?? ??? ?};
?? ??? ?ch = *source++;
?? ??? ?if (ch <= kMaximumUCS2) {
?? ??? ??? ?*target++ = ch;
?? ??? ?} else if (ch > kMaximumUTF16) {
?? ??? ??? ?*target++ = kReplacementCharacter;
?? ??? ?} else {
?? ??? ??? ?if (target + 1 >= targetEnd) {
?? ??? ??? ??? ?result = kUTFConversionTargetExhausted; break;
?? ??? ??? ?};
?? ??? ??? ?ch -= halfBase;
?? ??? ??? ?*target++ = (ch >> halfShift) + kSurrogateHighStart;
?? ??? ??? ?*target++ = (ch & halfMask) + kSurrogateLowStart;
?? ??? ?};
?? ?};
?? ?*sourceStart = source;
?? ?*targetStart = target;
?? ?return result;
};

/* ================================================================ */

ConversionResult?? ?ConvertUTF16toUCS4 (
?? ??? ?UTF16** sourceStart, UTF16* sourceEnd,
?? ??? ?UCS4** targetStart, const UCS4* targetEnd) {
?? ?ConversionResult result = kUTFConversionOK;
?? ?register UTF16* source = *sourceStart;
?? ?register UCS4* target = *targetStart;
?? ?while (source < sourceEnd) {
?? ??? ?register UCS4 ch;
?? ??? ?ch = *source++;
?? ??? ?if (ch >= kSurrogateHighStart && ch <= kSurrogateHighEnd && source < sourceEnd) {
?? ??? ??? ?register UCS4 ch2 = *source;
?? ??? ??? ?if (ch2 >= kSurrogateLowStart && ch2 <= kSurrogateLowEnd) {
?? ??? ??? ??? ?ch = ((ch - kSurrogateHighStart) << halfShift)
?? ??? ??? ??? ??? ?+ (ch2 - kSurrogateLowStart) + halfBase;
?? ??? ??? ??? ?++source;
?? ??? ??? ?};
?? ??? ?};
?? ??? ?if (target >= targetEnd) {
?? ??? ??? ?result = kUTFConversionTargetExhausted; break;
?? ??? ?};
?? ??? ?*target++ = ch;
?? ?};
?? ?*sourceStart = source;
?? ?*targetStart = target;
?? ?return result;
};

/* ================================================================ */

UCS4 offsetsFromUTF8[6] =?? ?{0x00000000UL, 0x00003080UL, 0x000E2080UL,
?? ??? ??? ??? ??? ? ?? ? ?? ? 0x03C82080UL, 0xFA082080UL, 0x82082080UL};
char bytesFromUTF8[256] = {
?? ?0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
?? ?0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
?? ?0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
?? ?0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
?? ?0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
?? ?0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
?? ?1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
?? ?2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, 3,3,3,3,3,3,3,3,4,4,4,4,5,5,5,5};

UTF8 firstByteMark[7] = {0x00, 0x00, 0xC0, 0xE0, 0xF0, 0xF8, 0xFC};

/* ================================================================ */
/*?? ?This code is similar in effect to making successive calls on the
mbtowc and wctomb routines in FSS-UTF. However, it is considerably
different in code:
* it is adapted to be consistent with UTF16,
* the interface converts a whole buffer to avoid function-call overhead
* constants have been gathered.
* loops & conditionals have been removed as much as possible for
efficiency, in favor of drop-through switch statements.
*/

/* ================================================================ */
ConversionResult?? ?ConvertUTF16toUTF8 (
?? ??? ?UTF16** sourceStart, const UTF16* sourceEnd,
?? ??? ?UTF8** targetStart, const UTF8* targetEnd)
{
?? ?ConversionResult result = kUTFConversionOK;
?? ?register UTF16* source = *sourceStart;
?? ?register UTF8* target = *targetStart;
?? ?while (source < sourceEnd) {
?? ??? ?register UCS4 ch;
?? ??? ?register unsigned short bytesToWrite = 0;
?? ??? ?register const UCS4 byteMask = 0xBF;
?? ??? ?register const UCS4 byteMark = 0x80;
?? ??? ?ch = *source++;
?? ??? ?if (ch >= kSurrogateHighStart && ch <= kSurrogateHighEnd
?? ??? ??? ??? ?&& source < sourceEnd) {
?? ??? ??? ?register UCS4 ch2 = *source;
?? ??? ??? ?if (ch2 >= kSurrogateLowStart && ch2 <= kSurrogateLowEnd) {
?? ??? ??? ??? ?ch = ((ch - kSurrogateHighStart) << halfShift)
?? ??? ??? ??? ??? ?+ (ch2 - kSurrogateLowStart) + halfBase;
?? ??? ??? ??? ?++source;
?? ??? ??? ?};
?? ??? ?};
?? ??? ?if (ch < 0x80) {?? ??? ??? ??? ?bytesToWrite = 1;
?? ??? ?} else if (ch < 0x800) {?? ??? ?bytesToWrite = 2;
?? ??? ?} else if (ch < 0x10000) {?? ??? ?bytesToWrite = 3;
?? ??? ?} else if (ch < 0x200000) {?? ??? ?bytesToWrite = 4;
?? ??? ?} else if (ch < 0x4000000) {?? ?bytesToWrite = 5;
?? ??? ?} else if (ch <= kMaximumUCS4){?? ?bytesToWrite = 6;
?? ??? ?} else {?? ??? ??? ??? ??? ??? ?bytesToWrite = 2;
?? ??? ??? ??? ??? ??? ??? ??? ??? ??? ?ch = kReplacementCharacter;
?? ??? ?}; /* I wish there were a smart way to avoid this conditional */
?? ??? ?
?? ??? ?target += bytesToWrite;
?? ??? ?if (target > targetEnd) {
?? ??? ??? ?target -= bytesToWrite; result = kUTFConversionTargetExhausted; break;
?? ??? ?};
?? ??? ?switch (bytesToWrite) {?? ?/* note: code falls through cases! */
?? ??? ??? ?case 6:?? ?*--target = (ch | byteMark) & byteMask; ch >>= 6;
?? ??? ??? ?case 5:?? ?*--target = (ch | byteMark) & byteMask; ch >>= 6;
?? ??? ??? ?case 4:?? ?*--target = (ch | byteMark) & byteMask; ch >>= 6;
?? ??? ??? ?case 3:?? ?*--target = (ch | byteMark) & byteMask; ch >>= 6;
?? ??? ??? ?case 2:?? ?*--target = (ch | byteMark) & byteMask; ch >>= 6;
?? ??? ??? ?case 1:?? ?*--target =? ch | firstByteMark[bytesToWrite];
?? ??? ?};
?? ??? ?target += bytesToWrite;
?? ?};
?? ?*sourceStart = source;
?? ?*targetStart = target;
?? ?return result;
};

/* ================================================================ */

ConversionResult?? ?ConvertUTF8toUTF16 (
?? ??? ?UTF8** sourceStart, const UTF8* sourceEnd,
?? ??? ?UTF16** targetStart, const UTF16* targetEnd)
{
?? ?ConversionResult result = kUTFConversionOK;
?? ?register UTF8* source = *sourceStart;
?? ?register UTF16* target = *targetStart;
?? ?while (source < sourceEnd) {
?? ??? ?register UCS4 ch = 0;
?? ??? ?register unsigned short extraBytesToWrite = bytesFromUTF8[*source];
?? ??? ?if (source + extraBytesToWrite > sourceEnd) {
?? ??? ??? ?result = kUTFConversionSourceExhausted; break;
?? ??? ?};
?? ??? ?switch(extraBytesToWrite) {?? ?/* note: code falls through cases! */
?? ??? ??? ?case 5:?? ?ch += *source++; ch <<= 6;
?? ??? ??? ?case 4:?? ?ch += *source++; ch <<= 6;
?? ??? ??? ?case 3:?? ?ch += *source++; ch <<= 6;
?? ??? ??? ?case 2:?? ?ch += *source++; ch <<= 6;
?? ??? ??? ?case 1:?? ?ch += *source++; ch <<= 6;
?? ??? ??? ?case 0:?? ?ch += *source++;
?? ??? ?};
?? ??? ?ch -= offsetsFromUTF8[extraBytesToWrite];

?? ??? ?if (target >= targetEnd) {
?? ??? ??? ?result = kUTFConversionTargetExhausted; break;
?? ??? ?};
?? ??? ?if (ch <= kMaximumUCS2) {
?? ??? ??? ?*target++ = ch;
?? ??? ?} else if (ch > kMaximumUTF16) {
?? ??? ??? ?*target++ = kReplacementCharacter;
?? ??? ?} else {
?? ??? ??? ?if (target + 1 >= targetEnd) {
?? ??? ??? ??? ?result = kUTFConversionTargetExhausted; break;
?? ??? ??? ?};
?? ??? ??? ?ch -= halfBase;
?? ??? ??? ?*target++ = (ch >> halfShift) + kSurrogateHighStart;
?? ??? ??? ?*target++ = (ch & halfMask) + kSurrogateLowStart;
?? ??? ?};
?? ?};
?? ?*sourceStart = source;
?? ?*targetStart = target;
?? ?return result;
};

/* ================================================================ */
ConversionResult?? ?ConvertUCS4toUTF8 (
?? ??? ?UCS4** sourceStart, const UCS4* sourceEnd,
?? ??? ?UTF8** targetStart, const UTF8* targetEnd)
{
?? ?ConversionResult result = kUTFConversionOK;
?? ?register UCS4* source = *sourceStart;
?? ?register UTF8* target = *targetStart;
?? ?while (source < sourceEnd) {
?? ??? ?register UCS4 ch;
?? ??? ?register unsigned short bytesToWrite = 0;
?? ??? ?register const UCS4 byteMask = 0xBF;
?? ??? ?register const UCS4 byteMark = 0x80;
?? ??? ?ch = *source++;
?? ??? ?if (ch >= kSurrogateHighStart && ch <= kSurrogateHighEnd
?? ??? ??? ??? ?&& source < sourceEnd) {
?? ??? ??? ?register UCS4 ch2 = *source;
?? ??? ??? ?if (ch2 >= kSurrogateLowStart && ch2 <= kSurrogateLowEnd) {
?? ??? ??? ??? ?ch = ((ch - kSurrogateHighStart) << halfShift)
?? ??? ??? ??? ??? ?+ (ch2 - kSurrogateLowStart) + halfBase;
?? ??? ??? ??? ?++source;
?? ??? ??? ?};
?? ??? ?};
?? ??? ?if (ch < 0x80) {?? ??? ??? ??? ?bytesToWrite = 1;
?? ??? ?} else if (ch < 0x800) {?? ??? ?bytesToWrite = 2;
?? ??? ?} else if (ch < 0x10000) {?? ??? ?bytesToWrite = 3;
?? ??? ?} else if (ch < 0x200000) {?? ??? ?bytesToWrite = 4;
?? ??? ?} else if (ch < 0x4000000) {?? ?bytesToWrite = 5;
?? ??? ?} else if (ch <= kMaximumUCS4){?? ?bytesToWrite = 6;
?? ??? ?} else {?? ??? ??? ??? ??? ??? ?bytesToWrite = 2;
?? ??? ??? ??? ??? ??? ??? ??? ??? ??? ?ch = kReplacementCharacter;
?? ??? ?}; /* I wish there were a smart way to avoid this conditional */
?? ??? ?
?? ??? ?target += bytesToWrite;
?? ??? ?if (target > targetEnd) {
?? ??? ??? ?target -= bytesToWrite; result = kUTFConversionTargetExhausted; break;
?? ??? ?};
?? ??? ?switch (bytesToWrite) {?? ?/* note: code falls through cases! */
?? ??? ??? ?case 6:?? ?*--target = (ch | byteMark) & byteMask; ch >>= 6;
?? ??? ??? ?case 5:?? ?*--target = (ch | byteMark) & byteMask; ch >>= 6;
?? ??? ??? ?case 4:?? ?*--target = (ch | byteMark) & byteMask; ch >>= 6;
?? ??? ??? ?case 3:?? ?*--target = (ch | byteMark) & byteMask; ch >>= 6;
?? ??? ??? ?case 2:?? ?*--target = (ch | byteMark) & byteMask; ch >>= 6;
?? ??? ??? ?case 1:?? ?*--target =? ch | firstByteMark[bytesToWrite];
?? ??? ?};
?? ??? ?target += bytesToWrite;
?? ?};
?? ?*sourceStart = source;
?? ?*targetStart = target;
?? ?return result;
};

/* ================================================================ */

ConversionResult?? ?ConvertUTF8toUCS4 (
?? ??? ?UTF8** sourceStart, const UTF8* sourceEnd,
?? ??? ?UCS4** targetStart, const UCS4* targetEnd)
{
?? ?ConversionResult result = kUTFConversionOK;
?? ?register UTF8* source = *sourceStart;
?? ?register UCS4* target = *targetStart;
?? ?while (source < sourceEnd) {
?? ??? ?register UCS4 ch = 0;
?? ??? ?register unsigned short extraBytesToWrite = bytesFromUTF8[*source];
?? ??? ?if (source + extraBytesToWrite > sourceEnd) {
?? ??? ??? ?result = kUTFConversionSourceExhausted; break;
?? ??? ?};
?? ??? ?switch(extraBytesToWrite) {?? ?/* note: code falls through cases! */
?? ??? ??? ?case 5:?? ?ch += *source++; ch <<= 6;
?? ??? ??? ?case 4:?? ?ch += *source++; ch <<= 6;
?? ??? ??? ?case 3:?? ?ch += *source++; ch <<= 6;
?? ??? ??? ?case 2:?? ?ch += *source++; ch <<= 6;
?? ??? ??? ?case 1:?? ?ch += *source++; ch <<= 6;
?? ??? ??? ?case 0:?? ?ch += *source++;
?? ??? ?};
?? ??? ?ch -= offsetsFromUTF8[extraBytesToWrite];

?? ??? ?if (target >= targetEnd) {
?? ??? ??? ?result = kUTFConversionTargetExhausted; break;
?? ??? ?};
?? ??? ?if (ch <= kMaximumUCS2) {
?? ??? ??? ?*target++ = ch;
?? ??? ?} else if (ch > kMaximumUCS4) {
?? ??? ??? ?*target++ = kReplacementCharacter;
?? ??? ?} else {
?? ??? ??? ?if (target + 1 >= targetEnd) {
?? ??? ??? ??? ?result = kUTFConversionTargetExhausted; break;
?? ??? ??? ?};
?? ??? ??? ?ch -= halfBase;
?? ??? ??? ?*target++ = (ch >> halfShift) + kSurrogateHighStart;
?? ??? ??? ?*target++ = (ch & halfMask) + kSurrogateLowStart;
?? ??? ?};
?? ?};
?? ?*sourceStart = source;
?? ?*targetStart = target;
?? ?return result;
};

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            欧美国产精品人人做人人爱| 麻豆成人精品| 亚洲女性裸体视频| 亚洲日本一区二区| 亚洲精品影院| 永久91嫩草亚洲精品人人| 国产精品久久久| 午夜精品视频| 亚洲制服欧美中文字幕中文字幕| 亚洲精品资源| 亚洲高清中文字幕| 玖玖精品视频| 男女精品视频| 亚洲高清久久| 亚洲精品一区二区三区99| 午夜久久黄色| 欧美在线日韩在线| 久久九九精品| 合欧美一区二区三区| 国产精品视频一二| 狠狠久久婷婷| 欧美视频在线免费| 国产精品久久福利| 极品尤物久久久av免费看| 国产亚洲成av人片在线观看桃 | 久久综合狠狠| 蜜臀av性久久久久蜜臀aⅴ四虎| 亚洲欧美激情一区二区| 欧美一区在线视频| 久久综合久久综合九色| 亚洲国产福利在线| 亚洲视频在线观看三级| 久久成人免费网| 91久久综合亚洲鲁鲁五月天| 亚洲清纯自拍| 亚洲欧美国产日韩天堂区| 久久久久亚洲综合| 欧美日韩在线播放一区二区| 国产精品成人一区二区三区吃奶| 国产婷婷色一区二区三区四区| 国产一区日韩欧美| 国产午夜精品久久久久久久| 精品91在线| 一区二区三区成人| 夜色激情一区二区| 久久精品视频导航| 免费欧美在线视频| 一区二区日韩| 久久综合色播五月| 亚洲婷婷免费| 欧美日本韩国| 亚洲日韩第九十九页| 欧美亚洲自偷自偷| 亚洲美女视频在线观看| 老司机精品久久| 韩日在线一区| 久久久亚洲综合| 欧美一区二区啪啪| 国产亚洲综合在线| 欧美一二区视频| 一本色道久久综合精品竹菊 | 亚洲国产精品va在线观看黑人| 黄色精品在线看| 欧美一区二区高清| 一区二区三区黄色| 欧美日韩播放| 在线亚洲精品福利网址导航| 亚洲国产精品成人综合| 欧美一区二区三区免费视| 国产三级精品三级| 久久久久国产精品www| 午夜精品美女久久久久av福利| 国产精品国产一区二区| 亚洲欧美日韩精品在线| 亚洲中午字幕| 国语自产精品视频在线看一大j8 | 嫩草国产精品入口| 久久中文久久字幕| 欧美三级视频| 亚洲欧洲av一区二区三区久久| 一本到12不卡视频在线dvd | 亚洲第一福利视频| 亚洲高清久久| 欧美日韩在线亚洲一区蜜芽| 亚洲免费网站| 久久成人综合视频| 亚洲黄色天堂| 亚洲色诱最新| 影音国产精品| 日韩亚洲精品电影| 国产区欧美区日韩区| 女女同性女同一区二区三区91| 欧美成人自拍| 亚洲欧美精品在线观看| 亚洲精品久久久蜜桃| 欧美在线视频免费| 亚洲男人第一网站| 国产亚洲激情| 亚洲一区二区视频在线观看| 亚洲免费视频在线观看| 伊人一区二区三区久久精品| 欧美激情在线观看| 国产精品成人免费| 久久婷婷国产综合国色天香| 欧美电影免费网站| 欧美一区二视频| 久久一区中文字幕| 亚洲欧美成人综合| 鲁大师影院一区二区三区| 亚洲午夜精品在线| 久久人体大胆视频| 亚洲婷婷在线| 久久久欧美精品sm网站| 亚洲欧美激情视频| 欧美电影在线| 美女国内精品自产拍在线播放| 欧美午夜a级限制福利片| 久久免费视频观看| 国产精品美女在线观看| 最新中文字幕亚洲| 亚洲福利在线观看| 欧美亚洲尤物久久| 亚洲欧美在线另类| 国产精品高潮在线| 亚洲精品视频免费在线观看| 亚洲国产高清一区二区三区| 午夜在线观看免费一区| 午夜在线一区| 欧美四级剧情无删版影片| 亚洲国产天堂久久综合| 在线看片欧美| 久久午夜国产精品| 亚洲大胆人体在线| 国产精品夜夜夜一区二区三区尤| 亚洲精品视频二区| 玖玖国产精品视频| 久久综合给合久久狠狠色| 亚洲一区二区精品在线观看| 亚洲精品视频在线观看网站| 国产日韩在线一区| 国产麻豆精品theporn| 欧美性猛交xxxx乱大交退制版| 欧美亚洲免费高清在线观看| aa级大片欧美| 亚洲人精品午夜在线观看| 欧美影院久久久| 尤物yw午夜国产精品视频明星 | 日韩网站在线| 欧美精品亚洲精品| 欧美一区三区三区高中清蜜桃| 欧美顶级少妇做爰| 欧美淫片网站| 国产精品久久网站| 欧美剧在线免费观看网站| 亚洲永久免费精品| 亚洲一区二区成人在线观看| 亚洲国产另类久久久精品极度| 亚洲天堂av在线免费| 久久精品水蜜桃av综合天堂| 国产原创一区二区| 国产精品久久91| 性色av一区二区三区在线观看| 麻豆成人小视频| 99视频超级精品| 国产自产2019最新不卡| 久久久国产精品一区二区中文| 亚洲第一精品电影| 国产一区二区精品久久99| 日韩视频一区二区三区在线播放| 亚洲毛片在线观看| 欧美激情aaaa| 亚洲国产精品久久久久久女王| 亚洲国产精品v| 欧美午夜理伦三级在线观看| 中日韩在线视频| 久久精品视频免费| 欧美/亚洲一区| 欧美绝品在线观看成人午夜影视| 欧美精品v国产精品v日韩精品| 欧美日韩高清不卡| 国产精品免费在线| 国产欧美日韩| 国产视频精品va久久久久久| 国产日韩欧美亚洲| 亚洲精品午夜| 亚洲欧美日韩精品| 欧美成年视频| 亚洲视频每日更新| 老司机午夜精品视频| 国产精品久久久久久久久动漫| 国产亚洲欧美中文| 欧美日韩在线免费| 久久国产精品一区二区| 久久精品成人欧美大片古装| 亚洲婷婷综合久久一本伊一区| 亚洲天堂成人在线观看| 亚洲欧美激情视频| 一区二区av| 蜜桃av噜噜一区| 亚洲午夜伦理|