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

牽牛散步
仗劍走天涯

Slice語言

首先,請大家讀ICE中文手冊中的Slice語言一章。 這一部分除了model(模塊),在 ICE 1.3中文手冊中都有描述

圖 2.1. ice網絡編程示意圖(服務器端和客戶端采用同種編程語言C++)

ice網絡編程示意圖(服務器端和客戶端采用同種編程語言C++)

圖 2.2. ice網絡編程示意圖(服務器端和客戶端采用不同編程語言)

ice網絡編程示意圖(服務器端和客戶端采用不同編程語言)

基礎知識

含有Slice 定義的文件必須以.ice 擴展名結尾,例如, Clock.ice就是一個有效的文件名。編譯器拒絕接受其他擴展名。

Slice 支持#ifndef、#define、#endif,以及#include 預處理指令。它們的使用方式有嚴格的限制:你只能把#ifndef、#define,以及#endif 指令用于創建雙包括(double-include)塊。例如:

#ifndef _CLOCK_ICE
#define _CLOCK_ICE
// #include 文件 here...
//定義 here...
#endif _CLOCK_ICE

我們強烈建議你在所有的Slice 定義中使用雙包括(double-include)塊(所上),防止多次包括同一文件。

#include 指令只能出現在Slice 源文件的開頭,也就是說,它們必須出現在其他所有Slice 定義的前面。此外,在使用#include 指令時,只允許使用<> 語法來指定文件名,不能使用""。例如:

 #include <File1.ice> // OK
#include "File2.ice" // 不支持!

你不能把這些預處理指令用于其他目的,也不能使用其他的C++ 預處理指令 (比如用\ 字符來連接行、token 粘貼,以及宏展開,等等)。

在Slice 定義里,既可以使用C 的、也可以使用C++ 的注釋風格:

Slice 關鍵字必須小寫。例如, class 和dictionary 都是關鍵字,必須按照所示方式拼寫。這個規則有兩個例外:Object 和LocalObject 也是關鍵字,必須按照所示方式讓首字母大寫。

標識符以一個字母起頭,后面可以跟任意數目的字母或數字。Slice 標識符被限制在ASCII 字符范圍內,不能包含非英語字母,與C++ 標識符不同, Slice 標識符不能有下劃線。這種限制初看上去顯得很苛刻,但卻是必要的:保留下劃線,各種語言映射就獲得了一個名字空間,不會與合法的Slice 標識符發生沖突。于是,這個名字空間可用于存放從Slice 標識符派生的原生語言標識符,而不用擔心其他合法的Slice 標識符會碰巧與之相同,從而發生沖突 。

標識符(變量名等等)是大小寫不敏感的,但大小寫的拼寫方式必須保持一致(看了后面的話,再理解一下)。例如,在一個作用域內, TimeOfDay 和TIMEOFDAY 被認為是同一個標識符。但是,Slice 要求你保持大小寫的一致性。在你引入了一個標識符之后,你必須始終一致地拼寫它的大寫和小寫字母;否則,編譯器就會將其視為非法而加以拒絕。這條規則之所以存在,是要讓Slice 既能映射到忽略標識符大小寫的語言,又能映射到把大小寫不同的標識符當作不同標識符的語言。(可以這樣理解,變量名區分大小寫,并且不可以是相同的單詞)

是關鍵字的標識符:你可以定義在一種或多種實現語言中是關鍵字的Slice 標識符。例如,switch是完全合法的Slice標識符,但也是C++和Java的關鍵字。語言映射定義了一些規則來處理這樣的標識符。要解決這個問題,通常要用一個前綴來使映射后的標識符不再是關鍵字。例如, Slice 標識符switch 被映射到C++ 的_cpp_switch ,以及Java 的_switch。對關鍵字進行處理的規則可能會產生難以閱讀的源碼。像native、throw,或export 這樣的標識符會與C++ 或Java(或兩者)的關鍵字發生沖突。為了讓你和別人生活得更輕松一點,你應該避免使用是實現語言的關鍵字的Slice 標識符。要記住,以后Ice 可能會增加除C++ 和Java 以外的語言映射。盡管期望你總結出所有流行的編程語言的所有關鍵字并不合理,你至少應該盡量避免使用常用的關鍵字。使用像self、import,以及while 這樣的標識符肯定不是好主意。

轉義的標識符:在關鍵字的前面加上一個反斜線,你可以把Slice 關鍵字用作標識符,例如:

struct dictionary { // 錯誤!
// ...
};
struct \dictionary { // OK
// ...
};

反斜線會改變關鍵字通常的含義;在前面的例子中, \dictionary 被當作標識符dictionary。轉義機制之所以存在,是要讓我們在以后能夠在Slice 中增加關鍵字,同時盡量減少對已有規范的影響:如果某個已經存在的規范碰巧使用了新引入的關鍵字,你只需在新關鍵字前加上反斜線,就能夠修正該規范。注意,從風格上說,你應該避免用Slice 關鍵字做標識符(即使反斜線轉義允許你這么做)。

保留的標識符:Slice 為Ice 實現保留了標識符Ice 及以Ice (任何大小寫方式)起頭的所有標識符。例如,如果你試圖定義一個名為Icecream 的類型, Slice 編譯器會發出錯誤警告3。以下面任何一種后綴結尾的Slice 標識符也是保留的:Helper、Holder、Prx,以及Ptr。Java 和C++ 語言映射使用了這些后綴,保留它們是為了防止在生成的代碼中發生沖突。

(注:ICE 1.3的中文手冊上沒有“模塊”這一部分)模塊來組織一組相關的語句是為了解決名字沖突。模塊可以包含所有合法的Slice語句和子模塊。你可以用一些不常用的詞來給最外層的模塊命名,比如公司名、產品名等等。

module ZeroC {

	module Client {
	// Definitions here...
	};

	module Server {
	// Definitions here...
	};
};

Slice要求所有的定義都是模塊的一部分,比如,下面的語句就是非法的。

interface I { // 錯誤:全局空間中只可以有模塊
// ...
};

多個文件可以共享同一個模塊,比如:

module ZeroC {
// Definitions here...
};

//另一個文件中 :
module ZeroC { // OK, reopened module
// More definitions here...
};

把一個大的模塊放到幾個文件中去可以方便編譯(你只需重新編譯被修改的文件,而沒有必要編譯整個模塊)。

模塊將映射的語言中的相應結構,比如 C++, C#, 和 Visual Basic, Slice的modules被映射為namespaces;java中被映射為package.

除了少數與特定的程序語言相關的調用之外,ice的絕大部分API(應用程序接口)都是用Slice來定義的 。這樣做的好處是可以用一個ICE API定義文件來支持所有的程序語言。

[注意] 注意
為了保證代碼的簡潔,以后文章中提及的Slice定義沒有寫出包含的模塊,你要假定該語句是在一個模塊中。

表 2.1. Slice的數據類型

類型 取值范圍 大小(單位:bit)
bool false or true ≥ 1
byte -128-127或0-255 ≥ 8
short 2-15至215-1 ≥ 16
int 2-31至231-1 ≥ 32
long 2-63至263-1 ≥ 64
float IEEE的單精度 ≥ 32 bits
double IEEE的雙精度 ≥ 64 bits
string 所有Unicode 字符,除了所有位為零的字符 變長

用戶定義的類型

  • 枚舉:enum Fruit { Apple, Pear, Orange };

    這個定義引入了一種名為Fruit 的類型,這是一種擁有自己權利的新類型。關于怎樣把順序值(ordinal values)賦給枚舉符的問題, Slice 沒有作出定義。例如,你不能假定,在各種實現語言中,枚舉符Orange 的值都是2。Slice 保證枚舉符的順序值會從左至右遞增,所以在所有實現語言中,Apple 都比Pear 要小。與C++ 不同, Slice 不允許你控制枚舉符的順序值(因為許多實現語言不支持這種特性):

    enum Fruit { Apple = 0, Pear = 7, Orange = 2 }; // 出錯
    

    在實踐中,只要你不在地址空間之間傳送枚舉符的順序值,你就不用管枚舉符使用的值是多少。例如,發送值0 給服務器來表示Apple 可能會造成問題,因為服務器可能沒有用0 表示Apple。相反,你應該就發送值Apple 本身。如果在接收方的地址空間中, Apple 是用另外的順序值表示的, Ice run time 會適當地翻譯這個值。

    與在C++ 里一樣, Slice 枚舉符也會進入圍繞它的名字空間,所以下面的定義是非法的:

    enum Fruit { Apple, Pear, Orange };
    enum ComputerBrands { Apple, IBM, Sun, HP }; // Apple已經被定義!
    

    Slice 不允許定義空的枚舉。

  • 結構

    Slice 支持含有一個或多個有名稱的成員的結構,這些成員可以具有任意類型,包括用戶定義的復雜類型。例如:
    struct TimeOfDay {
    short hour; // 0 - 23
    short minute; // 0 - 59
    short second; // 0 - 59
    };
    
    與在 C++ 里一樣,這個定義引入了一種叫作TimeOfDay 的新類型。結構定義會形成名字空間,所以結構成員的名字只需在圍繞它們的結構里是唯一的。在結構內部,只能出現數據成員定義,這些定義必須使用有名字的類型。例如,你不可能在結構內定義結構:
    struct TwoPoints {
    struct Point { //錯誤!
    short x;
    short y;
    };
    Point coord1;
    Point coord2;
    };
    
    這個規則大體上適用于Slice:類型定義不能嵌套(除了模塊支持嵌套)。其原因是,對于某些目標語言而言,嵌套的類型定義可能會難以實現,而且,即使能夠實現,也會極大地使作用域解析規則復雜化。對于像Slice 這樣的規范語言而言,嵌套的類型定義并無必要——你總能以下面的方式編寫上面的定義(這種方式在風格上也更加整潔):
    struct Point {
    short x;
    short y;
    };
    struct TwoPoints { // Legal (and cleaner!)
    Point coord1;
    Point coord2;
    }
    
  • 序列

    序列是變長的元素向量:

    sequence<Fruit> FruitPlatter;
    

    序列可以是空的——也就是說,它可以不包含元素;它也可以持有任意數量的元素,直到達到你的平臺的內存限制。

    序列包含的元素自身也可以是序列。這種設計使得你能夠創建列表的列表:

    sequence<FruitPlatter> FruitBanquet;
    

    序列可用于構建許多種collection,比如向量、列表、隊列、集合、包(bag),或是樹(次序是否重要要由應用決定;如果無視次序,序列充當的就是集合和包)。

    序列的一種特別的用法已經成了慣用手法,即用序列來表示可選的值。例如,我們可能擁有一個Part 結構,用于記錄小汽車的零件的詳細資料。這個結構可以記錄這樣的資料:零件名稱、描述、重量、價格,以及其他詳細資料。 備件通常都有序列號,我們用一個long 值表示。但有些零件,比如常用的螺絲釘,常常沒有序列號,那么我們在螺絲釘的序列號字段里要放進什么內容?要處理這種情況,有這樣一些選擇:

    • 用一個標記值,比如零,來指示“沒有序列號”的情況。

      這種方法是可行的,只要確實有標記值可用。盡管看起來不大可能有人把零用作零件的序列號,這并非是不可能的。而且,對于其他的值,比如溫度值,在其類型的范圍中的所有值都可能是合法的,因而沒有標記值可用。

    • 把序列號的類型從long 變成string。

      串自己有內建的標記值,也就是空串,所以我們可以用空串來指示.“沒有序列號”的情況。這也是可行的,但卻會讓大多數人感到不快:我們不應該為了得到一個標記值,而把某種事物自然的數據類型變成string

    • 增加一個指示符來指示序列號的內容是否有效.

      struct Part {
      string name;
      string description;
      // ...
      bool serialIsValid; // true if part has serial number
      long serialNumber;
      };
      

      對于大多數人而言,這也讓人討厭,而且最終肯定會讓你遇到麻煩:遲早會有程序員忘記在使用序列號之前檢查它是否有效,從而帶來災難性的后果。

    • 用序列來建立可選字段

      這種技術使用了下面的慣用手法:

      sequence<long> SerialOpt;
      struct Part {
      string name;
      string description;
      // ...
      SerialOpt serialNumber; // optional: zero or one element
      };
      

      按照慣例, Opt 后綴表示這個序列是用來建立可選值的。如果序列是空的,值顯然就不在那里;如果它含有一個元素,這個元素就是那個值。這種方案明顯的缺點是,有人可能會把不止一個元素放入序列。為可選值增加一個專用的Slice 成分可以糾正這個問題。但可選值并非那么常用,不值得為它增加一種專門的語言特性(我們將看到,你還可以用類層次來建立可選字段)。

  • 詞典

    詞典是從鍵類型到值類型的映射。例如:

    struct Employee {
    long number;
    string firstName;
    string lastName;
    };
    dictionary<long, Employee> EmployeeMap;
    

    這個定義創建一種叫作EmployeeMap 的詞典,把雇員號映射到含有雇員詳細資料的結構。你可以自行決定鍵類型(在這個例子中是long 類型的雇員號)是否是值類型(在這個例子中是Employee 結構)的一部分——就Slice 而言,你無需讓鍵成為值的一部分。

    詞典可用于實現稀疏數組,或是具有非整數鍵類型的任何用于查找的數據結構。盡管含有鍵-值對的結構的序列可用于創建同樣的事物,詞典要更為適宜:

    • 詞典明確地表達了設計者的意圖,也就是,提供從值的域(domain)到值的范圍(range)的映射(含有鍵-值對的結構的序列沒有如此明確地表達同樣的意圖)。

    • 在編程語言一級,序列被實現成向量(也可能是列表),也就是說,序列不大適用于內容稀疏的域,而且要定位具有特定值的元素,需要進行線性查找。而詞典被實現成支持高效查找的數據結構(通常是哈希表或紅黑樹),其平均查找時間是O(log n),或者更好。詞典的鍵類型無需為整型。例如,我們可以用下面的定義來翻譯一周每一天的名稱:

      dictionary<string, string> WeekdaysEnglishToGerman;
      

      服務器實現可以用鍵-值對Monday–Montag、Tuesday–Dienstag,等等,對這個映射表進行初始化。

    • 詞典的值類型可以是用戶定義的任何類型。但詞典的鍵類型只能是以下類型之一:

      • 整型(byte、short、int、long、bool,以及枚舉類型)

      • string

      • 元素類型為整型或string 的序列

      • 數據成員的類型只有整型或string 的結構

      復雜的嵌套類型,比如嵌套的結構或詞典,以及浮點類型(float和double),不能用作鍵類型。之所以不允許使用復雜的嵌套類型,是因為這會使詞典的語言映射復雜化;不允許使用浮點類型,是因為浮點值在跨越機器界線時,其表示會發生變化,有可能導致成問題的相等語義。

  • 常量定義與直接量

    Slice 允許你定義常量。常量定義的類型必須是以下類型中的一種:

    • 整型(bool、byte、short、int、long,或枚舉類型)

    • float 或double

    • string

    下面有一些例子:

    const bool AppendByDefault = true;
    const byte LowerNibble = 0x0f;
    const string Advice = "Don't Panic!";
    const short TheAnswer = 42;
    const double PI = 3.1416;
    enum Fruit { Apple, Pear, Orange };
    const Fruit FavoriteFruit = Pear;
    

    直接量(literals)的語法與C++ 和Java 的一樣(有一些小的例外):

    • 布爾常量只能用關鍵字false和true初始化(你不能用0和1來表示false和true)。

    • 和C++ 一樣,你可以用十進制、八進制,或十六進制方式來指定整數直接量。例如:

      const byte TheAnswer = 42;
      const byte TheAnswerInOctal = 052;
      const byte TheAnswerInHex = 0x2A; // or 0x2a
      

      [注意] 注意
      如果你把byte 解釋成數字、而不是位模式,你在不同的語言里可能會得到不同的結果。例如,在C++ 里, byte 映射到char,取決于目標平臺, char 可能是有符號的,也可能是無符號的。
      [注意] 注意
      用于指示長常量和無符號常量的后綴(C++ 使用的l、L、u、U)是非法的:
      const long Wrong = 0u; // Syntax error
      const long WrongToo = 1000000L; // Syntax error
      
      • 整數直接量的值必須落在其常量類型的范圍內,否則編譯器就會發出診斷消息。

      • 浮點直接量使用的是C++語法,除了你不能用l或L后綴來表示擴展的浮點常量;但是, f 和F 是合法的(但會被忽略)。下面是一些例子:

        const float P1 = -3.14f; // Integer & fraction, with suffix
        const float P2 = +3.1e-3; // Integer, fraction, and exponent
        const float P3 = .1; // Fraction part only
        const float P4 = 1.; // Integer part only
        const float P5 = .9E5; // Fraction part and exponent
        const float P6 = 5e2; // Integer part and exponent
        

      • 浮點直接量必須落在其常量類型(float 或double)的范圍內;否則編譯器會發出診斷警告。

      • 串直接量支持與C++ 相同的轉義序列。下面是一些例子:

        const string AnOrdinaryString = "Hello World!";
        const string DoubleQuote = "\"";
        const string TwoSingleQuotes = "'\'"; // ' and \' are OK
        const string Newline = "\n";
        const string CarriageReturn = "\r";
        const string HorizontalTab = "\t";
        const string VerticalTab = "\v";
        const string FormFeed = "\f";
        const string Alert = "\a";
        const string Backspace = "\b";
        const string QuestionMark = "\?";
        const string Backslash = "\\";
        70 Slice 語言
        const string OctalEscape = "\007"; // Same as \a
        const string HexEscape = "\x07"; // Ditto
        const string UniversalCharName = "\u03A9"; // Greek Omega
        和在 C++ 里一樣,相鄰的串直接量會連接起來:
        const string MSG1 = "Hello World!";
        const string MSG2 = "Hello" " " "World!"; // Same message
        /*
        * Escape sequences are processed before concatenation,
        * so the string below contains two characters,
        * '\xa' and 'c'.
        */
        const string S = "\xa" "c";
        

        [注意] 注意
        Slice 沒有null 串的概念
        const string nullString = 0; // Illegal!
        
        null 串在Slice 里根本不存在,因此,在Ice 平臺的任何地方它都不能用作合法的串值。這一決定的原因是, null 串在許多編程語言里不存在

接口、操作,以及異常

見手冊........抄書好累.........

posted on 2005-12-13 12:00 牽牛散步 閱讀(3569) 評論(0)  編輯 收藏 引用 所屬分類: ICE學習資料
 
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            午夜激情一区| 欧美freesex8一10精品| 欧美国产大片| 欧美在线观看一区二区| 久久久久天天天天| 正在播放亚洲一区| 亚洲精品一区二| 久久精品91| 亚洲国产你懂的| 久久婷婷国产综合国色天香| 亚洲大片av| 国产欧美日本| 性一交一乱一区二区洋洋av| 国内伊人久久久久久网站视频 | 久久综合九色综合欧美就去吻 | 99热在这里有精品免费| 亚洲精品视频在线| 欧美日韩精选| 开元免费观看欧美电视剧网站| 亚洲国产日韩欧美一区二区三区| 在线视频免费在线观看一区二区| 一区二区免费看| 99热这里只有精品8| 欧美精品久久一区二区| 狼人社综合社区| 欧美一区二区三区播放老司机| 亚洲男女毛片无遮挡| 在线观看日韩av先锋影音电影院| 午夜精品影院| 午夜精品在线| 欧美综合国产精品久久丁香| 日韩午夜黄色| av成人天堂| 亚洲欧美一区二区激情| 欧美成人精品一区二区| 亚洲视频大全| 欧美激情中文字幕一区二区| 免费成人av| 欧美成人午夜免费视在线看片| 亚洲欧美日本国产专区一区| 久久久噜噜噜| 裸体女人亚洲精品一区| 亚洲国产精品一区二区www在线| 欧美成年人网| 香蕉av福利精品导航| 午夜精品久久久久久| 欧美一区二区三区免费视| 亚洲开发第一视频在线播放| 久久天堂精品| 久久精品国产91精品亚洲| 亚洲制服丝袜在线| 久久久无码精品亚洲日韩按摩| 亚洲精品国产视频| 欧美中文字幕在线观看| 欧美日韩第一区| 欧美成人一区二免费视频软件| 欧美在线精品免播放器视频| 久热re这里精品视频在线6| 蜜臀久久久99精品久久久久久| av不卡免费看| 欧美日韩一区二区三区视频| 久久人91精品久久久久久不卡 | 日韩亚洲视频在线| 亚洲国产精品激情在线观看| 91久久久久久国产精品| 欧美一区二视频| 欧美区一区二| 亚洲激情亚洲| 欧美制服丝袜| 亚洲一区二区三区成人在线视频精品| 欧美午夜剧场| 亚洲一区二区三区乱码aⅴ| 欧美一区二区三区久久精品| 99精品国产福利在线观看免费 | 亚洲精品女av网站| 久久色在线观看| 亚洲一二三四久久| 国产午夜精品一区理论片飘花| 欧美一级电影久久| 久久av一区二区| 亚洲精品综合在线| 亚洲一二三级电影| 亚洲国产一二三| 亚洲无吗在线| 亚洲国产1区| 欧美在线视频导航| 亚洲调教视频在线观看| 亚洲精品黄网在线观看| 国产日本欧美一区二区三区| 国产日本亚洲高清| 欧美一区二区三区免费在线看| 国产欧美在线| 亚洲制服av| 欧美在线观看视频一区二区| 欧美日本一区二区视频在线观看| 一本色道婷婷久久欧美| 久久www成人_看片免费不卡| 国产午夜久久| 久久aⅴ国产紧身牛仔裤| 国产精品夜夜夜一区二区三区尤| av成人免费观看| 亚洲精品乱码久久久久久蜜桃91| 久久精品成人| 狼人社综合社区| 欧美四级剧情无删版影片| 亚洲无线一线二线三线区别av| 欧美日韩国产一区二区三区| 久久成人精品无人区| 国产精品萝li| 欧美大尺度在线| 99这里只有精品| 亚洲欧美激情视频在线观看一区二区三区| 国产精品蜜臀在线观看| 欧美在线高清视频| 蜜臀va亚洲va欧美va天堂| 亚洲成人在线网站| 夜夜爽99久久国产综合精品女不卡| 韩国一区二区在线观看| 亚洲精品日韩在线观看| 亚洲国产欧美日韩另类综合| 欧美成人一区二免费视频软件| 99伊人成综合| 免费国产自线拍一欧美视频| 欧美一区二区三区的| 日韩视频不卡中文| 午夜精品三级视频福利| 国产午夜精品理论片a级探花| 欧美日韩裸体免费视频| 9l视频自拍蝌蚪9l视频成人| 亚洲一区中文字幕在线观看| 老司机午夜免费精品视频| 亚洲午夜伦理| 亚洲麻豆一区| 亚洲国产精品传媒在线观看| 国内在线观看一区二区三区| 欧美午夜欧美| 欧美日韩美女一区二区| 亚洲午夜在线观看| av成人免费| 午夜老司机精品| 99精品久久久| 小处雏高清一区二区三区| 亚洲视频一起| 亚洲精品乱码久久久久久蜜桃麻豆| 亚洲欧美日韩一区在线| 欧美一区二区三区免费大片| 亚洲日本中文字幕免费在线不卡| 国产视频观看一区| 欧美亚一区二区| 国产欧美精品日韩| 久久久国产精品亚洲一区 | 亚洲精品婷婷| 国产精品视频观看| 狠狠爱成人网| 一区在线播放| 国产欧美精品日韩区二区麻豆天美 | 国产精品久久久久91| 国产亚洲欧美另类中文| 一本色道久久99精品综合| 麻豆成人在线| 你懂的国产精品| 国产精品视频999| 亚洲福利视频二区| 久久精品av麻豆的观看方式| 久久久综合网| 99视频在线观看一区三区| 欧美中文字幕视频在线观看| 欧美日韩国语| 一区二区三区在线看| 亚洲视屏在线播放| 亚洲国产日韩综合一区| 亚洲国产精品一区制服丝袜| 欧美中文字幕久久| 国产精品一区在线观看你懂的| 日韩一级黄色片| 亚洲电影免费观看高清完整版| 99视频一区二区| 欧美激情一区二区| 亚洲电影成人| 欧美国产日韩视频| 欧美另类久久久品| 9色国产精品| 免费91麻豆精品国产自产在线观看| 亚洲综合好骚| 在线观看三级视频欧美| 亚洲免费视频中文字幕| 亚洲一品av免费观看| 国产综合一区二区| 狂野欧美一区| 久久综合国产精品台湾中文娱乐网| 亚洲特级片在线| 久久九九精品| 日韩一二三在线视频播| 亚洲最新视频在线| 在线看欧美视频| 亚洲欧美日韩另类| 亚洲一区二区三区免费在线观看 | 久久久精品国产一区二区三区| 亚洲欧美日韩精品久久久| 精品999日本|