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

隨筆-341  評論-2670  文章-0  trackbacks-0
    眾所周知,boost里面有一個(gè)Serialization。不過我這個(gè)跟boost的有本質(zhì)上的差別。boost的Serialization是通過重載操作符將一個(gè)對象與一個(gè)流進(jìn)行讀寫,而我則通過記錄類的成員變量來自動(dòng)產(chǎn)生相應(yīng)的讀寫動(dòng)作

    不過我的Serialization庫有兩個(gè)缺點(diǎn),就是效率不是特別高,因?yàn)槲耶a(chǎn)生的是可以與XML進(jìn)行互相轉(zhuǎn)換的通用對象。雖然這并不是必需的,只是我的個(gè)人愛好罷了。第二個(gè)缺點(diǎn)是Serialization會產(chǎn)生侵入式的代碼。使用方法如下:

    首先改造需要被Serialize的類,使之成為一個(gè)Serializable Object:
 1 class TestTree : public VL_SerializableObject
 2 {
 3 public:
 4     VInt                    IntegerMember;
 5     VUnicodeString            StringMember;
 6     VL_AutoPtr<TestTree>    LeftTree;
 7     VL_AutoPtr<TestTree>    RightTree;
 8 
 9     TestTree()
10     {
11         VL_REGISTER_SERIALIZABLE_FIELD(TestTree,IntegerMember);
12         VL_REGISTER_SERIALIZABLE_FIELD(TestTree,StringMember);
13         VL_REGISTER_SERIALIZABLE_FIELD(TestTree,LeftTree);
14         VL_REGISTER_SERIALIZABLE_FIELD(TestTree,RightTree);
15     }
16 };

    其次構(gòu)造一個(gè)VL_Serializer并對這個(gè)類進(jìn)行注冊:
1 VL_Serializer Serializer;
2 VL_REGISTER_SERIALIZABLE_CLASS(&Serializer,TestTree);

    完成了!現(xiàn)在可以嘗試將一個(gè)對象通過Serializer轉(zhuǎn)換成XML:
 1 VL_AutoPtr<TestTree> Root=new TestTree;
 2 Root->IntegerMember=10;
 3 Root->StringMember=L"Root";
 4 
 5 VL_AutoPtr<TestTree> Left=new TestTree;
 6 Left->IntegerMember=20;
 7 Left->StringMember=L"Left";
 8 
 9 VL_AutoPtr<TestTree> Right=new TestTree;
10 Right->IntegerMember=30;
11 Right->StringMember=L"Right";
12 
13 Root->LeftTree=Left;
14 Root->RightTree=Right;
15 
16 VL_CommonObject SerializedObject=Serializer.Serialize(Root.Object());
17 VL_XMLDocument Document;
18 Document.GetRootElement()->SetName(L"SerializedObject");
19 SerializedObject.SaveToXML(Document.GetRootElement());
20 VL_FileStream Stream(FileName,VL_FileStream::vfomWrite);
21 Document.Save(&Stream,true);

    保存的那一段比較多,不過由于是死的,所以可以寫一個(gè)函數(shù)來完成這些事情。讓我們看看保存到文件里面的XML吧:
 1 <?xml version="1.0" encoding="gb2312" standalone="no" ?> 
 2 <SerializedObject>
 3     <vcoClass TypeName="TestTree">
 4         <vcoField FieldName="IntegerMember">
 5             <vcoInt Value="0A000000" /> 
 6         </vcoField>
 7         <vcoField FieldName="LeftTree">
 8             <vcoClass TypeName="TestTree">
 9                 <vcoField FieldName="IntegerMember">
10                     <vcoInt Value="14000000" /> 
11                 </vcoField>
12                 <vcoField FieldName="LeftTree">
13                     <vcoNull /> 
14                 </vcoField>
15                 <vcoField FieldName="RightTree">
16                     <vcoNull /> 
17                 </vcoField>
18                 <vcoField FieldName="StringMember">
19                     <vcoString Value="Left" /> 
20                 </vcoField>
21             </vcoClass>
22         </vcoField>
23         <vcoField FieldName="RightTree">
24             <vcoClass TypeName="TestTree">
25                 <vcoField FieldName="IntegerMember">
26                     <vcoInt Value="1E000000" /> 
27                 </vcoField>
28                 <vcoField FieldName="LeftTree">
29                     <vcoNull /> 
30                 </vcoField>
31                 <vcoField FieldName="RightTree">
32                     <vcoNull /> 
33                 </vcoField>
34                 <vcoField FieldName="StringMember">
35                     <vcoString Value="Right" /> 
36                 </vcoField>
37             </vcoClass>
38         </vcoField>
39         <vcoField FieldName="StringMember">
40             <vcoString Value="Root" /> 
41         </vcoField>
42     </vcoClass>
43 </SerializedObject>

    造這種東西出來是有特殊的目的的,并不打算將這個(gè)Serialization做成一個(gè)非常通用的Serialization。

    關(guān)鍵部分的代碼如下:
    頭文件:
  1 /*******************************************************************************
  2 Vczh Library++ 2.0
  3 數(shù)據(jù)結(jié)構(gòu)::序列化
  4 開發(fā)者:陳梓瀚
  5 
  6 接口:
  7 類:
  8   VL_SerializableObject                        :可序列化對象基類
  9   VL_Serializer                                :序列化/反序列化處理器
 10 函數(shù):
 11   VL_REGISTER_SERIALIZABLE_CLASS            :注冊可序列化類型
 12   VL_REGISTER_SERIALIZABLE_FIELD            :注冊可序列化成員變量
 13 *******************************************************************************/
 14 
 15 #ifndef VL_SERIALIZATION
 16 #define VL_SERIALIZATION
 17 
 18 #include "Data\VL_Data_List.h"
 19 #include "Data\VL_Data_Map.h"
 20 #include "VL_CommonData.h"
 21 
 22 namespace vl
 23 {
 24     namespace serialization
 25     {
 26         using namespace collection;
 27         using namespace commondata;
 28 
 29         class VL_Serializer;
 30 
 31         class VL_SerializableObject : public VL_Base
 32         {
 33         protected:
 34             class FieldSerializerBase : public VL_Base
 35             {
 36             public:
 37                 typedef VL_List<VL_AutoPtr<FieldSerializerBase> , false , FieldSerializerBase*>        List;
 38             protected:
 39                 VUnicodeString                    FFieldName;
 40 
 41             public:
 42                 FieldSerializerBase(VUnicodeString FieldName);
 43 
 44                 virtual void                    Serialize(VL_Serializer* Serializer , VL_CommonObject& ClassObject)=0;
 45             };
 46 
 47 #define DECLARE_PRIMITIVE_SERIALIZER(FIELD)                                                                                \
 48             template<typename _Type>                                                                                    \
 49             class FieldSerializer<_Type , FIELD> : public FieldSerializerBase                                            \
 50             {                                                                                                            \
 51             protected:                                                                                                    \
 52                 _Type*                            FObject;                                                                \
 53                 FIELD _Type::*                    FFieldPointer;                                                            \
 54             public:                                                                                                        \
 55                 FieldSerializer(_Type* Object , FIELD _Type::* FieldPointer , VUnicodeString FieldName)                    \
 56                     :FieldSerializerBase(FieldName)                                                                        \
 57                 {                                                                                                        \
 58                     FObject=Object;                                                                                        \
 59                     FFieldPointer=FieldPointer;                                                                            \
 60                 }                                                                                                        \
 61                                                                                                                         \
 62                 void Serialize(VL_Serializer* Serializer , VL_CommonObject& ClassObject)                                \
 63                 {                                                                                                        \
 64                     ClassObject.SetFieldValue(FFieldName,VL_CommonObject::CreatePrimitive(FObject->*FFieldPointer));    \
 65                 }                                                                                                        \
 66             }
 67 
 68             template<typename _Type , typename _Field>
 69             class FieldSerializer : public FieldSerializerBase
 70             {
 71             protected:
 72                 _Type*                            FObject;
 73                 _Field _Type::*                    FFieldPointer;
 74             public:
 75                 FieldSerializer(_Type* Object , _Field _Type::* FieldPointer , VUnicodeString FieldName)
 76                     :FieldSerializerBase(FieldName)
 77                 {
 78                     FObject=Object;
 79                     FFieldPointer=FieldPointer;
 80                 }
 81                 
 82                 void Serialize(VL_Serializer* Serializer , VL_CommonObject& ClassObject)
 83                 {
 84                     ClassObject.SetFieldValue(FFieldName,Serializer->Serialize(&(FObject->*FFieldPointer)));
 85                 }
 86             };
 87 
 88             DECLARE_PRIMITIVE_SERIALIZER(VBool);
 89             DECLARE_PRIMITIVE_SERIALIZER(VByte);
 90             DECLARE_PRIMITIVE_SERIALIZER(VInt);
 91             DECLARE_PRIMITIVE_SERIALIZER(VFloat);
 92             DECLARE_PRIMITIVE_SERIALIZER(VDouble);
 93             DECLARE_PRIMITIVE_SERIALIZER(VSize);
 94             DECLARE_PRIMITIVE_SERIALIZER(VChar);
 95             DECLARE_PRIMITIVE_SERIALIZER(VWChar);
 96             DECLARE_PRIMITIVE_SERIALIZER(VUnicodeString);
 97 
 98 #undef DECLARE_PRIMITIVE_SERIALIZER
 99 
100             template<typename _Type , typename _Field>
101             class FieldSerializer<_Type , _Field*> : public FieldSerializerBase
102             {
103             protected:
104                 _Type*                            FObject;
105                 _Field* _Type::*                FFieldPointer;
106             public:
107                 FieldSerializer(_Type* Object , _Field* _Type::* FieldPointer , VUnicodeString FieldName)
108                     :FieldSerializerBase(FieldName)
109                 {
110                     FObject=Object;
111                     FFieldPointer=FieldPointer;
112                 }
113                 
114                 void Serialize(VL_Serializer* Serializer , VL_CommonObject& ClassObject)
115                 {
116                     ClassObject.SetFieldValue(FFieldName,Serializer->Serialize(FObject->*FFieldPointer));
117                 }
118             };
119 
120             template<typename _Type , typename _Field>
121             class FieldSerializer<_Type , VL_AutoPtr<_Field>> : public FieldSerializerBase
122             {
123             protected:
124                 _Type*                            FObject;
125                 VL_AutoPtr<_Field> _Type::*        FFieldPointer;
126             public:
127                 FieldSerializer(_Type* Object , VL_AutoPtr<_Field> _Type::* FieldPointer , VUnicodeString FieldName)
128                     :FieldSerializerBase(FieldName)
129                 {
130                     FObject=Object;
131                     FFieldPointer=FieldPointer;
132                 }
133                 
134                 void Serialize(VL_Serializer* Serializer , VL_CommonObject& ClassObject)
135                 {
136                     ClassObject.SetFieldValue(FFieldName,Serializer->Serialize((FObject->*FFieldPointer).Object()));
137                 }
138             };
139 
140             template<typename _Type , typename _Field>
141             void AddFieldSerializer(_Type* Object , _Field _Type::* FieldPointer , VUnicodeString FieldName)
142             {
143                 FFieldSerializers.Add(new FieldSerializer<_Type,_Field>(Object,FieldPointer,FieldName));
144             }
145         private:
146             FieldSerializerBase::List            FFieldSerializers;
147         public:
148             VL_SerializableObject();
149             ~VL_SerializableObject();
150 
151             virtual void                        Serialize(VL_Serializer* Serializer , VL_CommonObject& ClassObject);
152             virtual VBool                        Deserialize(VL_Serializer* Serializer , const VL_CommonObject& ClassObject);
153         };
154 
155         class VL_Serializer : public VL_Base
156         {
157         public:
158             class ClassSerializerBase : public VL_Base
159             {
160             public:
161                 typedef VL_List<VL_AutoPtr<ClassSerializerBase> , false , ClassSerializerBase*>        List;
162                 virtual VBool                    Accept(VL_SerializableObject* Object)=0;
163                 virtual VUnicodeString            GetClassTypeName()=0;
164             };
165 
166             template<typename _Type>
167             class ClassSerializer : public ClassSerializerBase
168             {
169             protected:
170                 VUnicodeString                    FClassTypeName;
171 
172             public:
173                 ClassSerializer(VUnicodeString ClassTypeName)
174                 {
175                     FClassTypeName=ClassTypeName;
176                 }
177 
178                 VBool Accept(VL_SerializableObject* Object)
179                 {
180                     return dynamic_cast<_Type*>(Object)!=0;
181                 }
182 
183                 VUnicodeString GetClassTypeName()
184                 {
185                     return FClassTypeName;
186                 }
187             };
188         protected:
189             ClassSerializerBase::List            FClassSerializers;
190         public:
191             VL_Serializer();
192             ~VL_Serializer();
193 
194             void                                RegisterClass(ClassSerializerBase* aClassSerializer);
195             ClassSerializerBase*                SelectClass(VL_SerializableObject* Object);
196             VL_CommonObject                        Serialize(VL_SerializableObject* Object);
197         };
198 
199         template<typename _Type>
200         void GenericDeserializerMethod(VL_Serializer* Serializer , const VL_CommonObject& Object , VL_SerializableObject*& Result)
201         {
202             Result=new _Type();
203             Result->Deserialize(Serializer,Object);
204         }
205 
206 #define VL_REGISTER_SERIALIZABLE_CLASS(SERIALIZER,CLASS)                                        \
207         do{                                                                                        \
208         (SERIALIZER)->RegisterClass(new VL_Serializer::ClassSerializer<CLASS>(L#CLASS));        \
209         }while(0)
210 
211 #define VL_REGISTER_SERIALIZABLE_FIELD(CLASS,FIELD)                                                \
212         do{                                                                                        \
213             AddFieldSerializer(this,&CLASS::FIELD,L#FIELD);                                        \
214         }while(0)
215     }
216 }
217 
218 #endif

    實(shí)現(xiàn)文件:
 1 #include "VL_Serialization.h"
 2 
 3 namespace vl
 4 {
 5     namespace serialization
 6     {
 7 
 8 /*********************************************************************************************************
 9 VL_SerializableObject
10 *********************************************************************************************************/
11 
12         VL_SerializableObject::FieldSerializerBase::FieldSerializerBase(VUnicodeString FieldName)
13         {
14             FFieldName=FieldName;
15         }
16 
17         VL_SerializableObject::VL_SerializableObject()
18         {
19         }
20 
21         VL_SerializableObject::~VL_SerializableObject()
22         {
23         }
24 
25         void VL_SerializableObject::Serialize(VL_Serializer* Serializer , VL_CommonObject& ClassObject)
26         {
27             for(VInt i=0;i<FFieldSerializers.GetCount();i++)
28             {
29                 FFieldSerializers[i]->Serialize(Serializer,ClassObject);
30             }
31         }
32 
33         VBool VL_SerializableObject::Deserialize(VL_Serializer* Serializer , const VL_CommonObject& ClassObject)
34         {
35             return false;
36         }
37 
38 /*********************************************************************************************************
39 VL_Serializer
40 *********************************************************************************************************/
41 
42         VL_Serializer::VL_Serializer()
43         {
44         }
45 
46         VL_Serializer::~VL_Serializer()
47         {
48         }
49 
50         void VL_Serializer::RegisterClass(ClassSerializerBase* aClassSerializer)
51         {
52             FClassSerializers.Add(aClassSerializer);
53         }
54 
55         VL_Serializer::ClassSerializerBase* VL_Serializer::SelectClass(VL_SerializableObject* Object)
56         {
57             for(VInt i=0;i<FClassSerializers.GetCount();i++)
58             {
59                 ClassSerializerBase* Class=FClassSerializers[i].Object();
60                 if(Class->Accept(Object))
61                 {
62                     return Class;
63                 }
64             }
65             return 0;
66         }
67 
68         VL_CommonObject VL_Serializer::Serialize(VL_SerializableObject* Object)
69         {
70             if(Object)
71             {
72                 ClassSerializerBase* Class=SelectClass(Object);
73                 if(Class)
74                 {
75                     VL_CommonObject ClassObject=VL_CommonObject::CreateClass(Class->GetClassTypeName());
76                     Object->Serialize(this,ClassObject);
77                     return ClassObject;
78                 }
79                 else
80                 {
81                     return VL_CommonObject::CreateError();
82                 }
83             }
84             else
85             {
86                 return VL_CommonObject::CreateNull();
87             }
88         }
89 
90     }
91 }
posted on 2008-11-21 09:09 陳梓瀚(vczh) 閱讀(2858) 評論(9)  編輯 收藏 引用 所屬分類: C++

評論:
# re: 我做的一個(gè)C++用的Serialization庫(含部分源碼) 2008-11-21 09:14 | 陳梓瀚(vczh)
為什么只有一部分呢,因?yàn)檫€沒有100%完成。先放上來Preview一下,接受批評……  回復(fù)  更多評論
  
# re: 我做的一個(gè)C++用的Serialization庫(含部分源碼) 2008-11-21 17:50 | 空明流轉(zhuǎn)的馬甲
侵入式的解決方案沒啥了,VC你還是寫個(gè)C++的分析器,生成一個(gè)Serializer吧。嘎嘎。
在C++上Serializer程序員要做的事情實(shí)在是太多了,不像C#,依靠Reflection能搞掂無數(shù)的問題。。。還有就是Serializer還是能難處理Reference的情況,嘎嘎。  回復(fù)  更多評論
  
# re: 我做的一個(gè)C++用的Serialization庫(含部分源碼) 2008-11-21 20:57 | 空明流轉(zhuǎn)的馬甲
ps,別用vco這樣的名稱修飾了,用namespace就是了。  回復(fù)  更多評論
  
# re: 我做的一個(gè)C++用的Serialization庫(含部分源碼) 2008-11-21 22:55 | 陳梓瀚(vczh)
嘛,難道你不認(rèn)為有了這樣的一個(gè)框架之后,代碼生成很容易寫么,嘿嘿……  回復(fù)  更多評論
  
# re: 我做的一個(gè)C++用的Serialization庫(含部分源碼) 2008-11-22 01:50 | 李侃
俺用模版庫寫了一個(gè)支持STL容器的Serializer ,內(nèi)部可選擇用zip壓縮字節(jié),以及加密解密字節(jié),已經(jīng)用了很久了,感覺很爽  回復(fù)  更多評論
  
# re: 我做的一個(gè)C++用的Serialization庫(含部分源碼) 2008-11-22 03:59 | 肥仔
走上了一條陽春白雪的道路  回復(fù)  更多評論
  
# re: 我做的一個(gè)C++用的Serialization庫(含部分源碼) 2009-01-10 20:31 | llxisdsh
序列化和反序列化的Buffer要支持attach才快速, 特別是在消息解析時(shí)
反序列化一定要能返回成功與否, 非常重要  回復(fù)  更多評論
  
# re: 我做的一個(gè)C++用的Serialization庫(含部分源碼) 2009-01-10 21:02 | 陳梓瀚(vczh)
其實(shí)是返回了的。  回復(fù)  更多評論
  
# re: 我做的一個(gè)C++用的Serialization庫(含部分源碼) 2009-04-07 20:38 | rockeet
使用 febird.dataio,比 boost.serialization 快 50 倍
http://code.google.com/p/febird
http://blog.csdn.net/whinah   回復(fù)  更多評論
  
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            欧美亚洲色图校园春色| 欧美精品久久一区二区| 久久一区免费| 亚洲免费在线精品一区| 亚洲日韩欧美一区二区在线| 国产日韩av在线播放| 欧美大片国产精品| 久久精品噜噜噜成人av农村| 性刺激综合网| 亚洲一区二区黄| 一区二区激情视频| 亚洲精品中文字| 亚洲国产精品va| 久久综合五月天婷婷伊人| 欧美亚洲综合在线| 午夜精品亚洲| 欧美一进一出视频| 一区二区三区精密机械公司| 亚洲精品在线视频观看| 亚洲国产精品久久久久婷婷884 | 一本色道久久综合亚洲二区三区| 亚洲第一网站| 欧美sm视频| 久久男女视频| 欧美在线|欧美| 亚洲一区二区在线免费观看视频| 精品成人一区二区三区四区| 国产性色一区二区| 国产精品久久久爽爽爽麻豆色哟哟 | 亚洲电影毛片| 久久久国产精品一区| 亚洲欧美另类在线| 亚洲一区二区精品在线| 妖精成人www高清在线观看| 亚洲日本成人在线观看| 亚洲电影在线看| 国产精品成人免费视频| 欧美日本在线视频| 欧美成人中文字幕| 免费观看一级特黄欧美大片| 久久久精彩视频| 欧美一区二区三区四区在线观看| 亚洲午夜91| 一区二区三区精密机械公司| 一本一本久久| 亚洲一二三级电影| 亚洲免费伊人电影在线观看av| 亚洲天堂成人在线观看| 中文在线资源观看网站视频免费不卡 | 国产精品萝li| 国产精品综合av一区二区国产馆| 国产精品视频xxxx| 国产伦一区二区三区色一情| 欧美喷水视频| 蜜桃久久av一区| 欧美一区91| 午夜精品理论片| 99在线热播精品免费| 蜜臀av一级做a爰片久久| 欧美一区二区三区四区在线观看| 日韩视频二区| 亚洲国产精品专区久久| 国产日韩欧美综合精品| 老司机aⅴ在线精品导航| 国产精品自拍三区| 久久尤物视频| 亚洲国产精品福利| 欧美国产日本韩| 亚洲区中文字幕| 亚洲在线视频| 亚洲福利免费| 国产三级欧美三级| 欧美乱在线观看| 亚洲欧美电影院| 午夜视频在线观看一区二区三区 | 欧美福利一区二区| 亚洲日韩视频| 久久久精品国产免大香伊 | 国产一区二区日韩精品欧美精品| 你懂的国产精品| 亚洲精品美女久久7777777| 精品动漫3d一区二区三区| 亚洲视频香蕉人妖| 蜜臀a∨国产成人精品 | 亚洲日本精品国产第一区| 久久综合婷婷| 久久大逼视频| 午夜精品视频在线| 亚洲一区二区三区四区五区黄| 亚洲欧洲一区二区三区在线观看| 国产在线成人| 黄色成人av在线| 久久久久久久尹人综合网亚洲| 欧美一区在线看| 久久精品99国产精品| 一区二区三区 在线观看视| 久久久久久高潮国产精品视| 亚洲精品一二三| 欧美日韩在线观看视频| 免费在线观看一区二区| 亚洲一级片在线观看| 亚洲国产成人av| 牛夜精品久久久久久久99黑人| 亚洲小视频在线| 最新日韩在线| 99精品欧美| 中文在线资源观看视频网站免费不卡| 亚洲福利视频网站| 亚洲国产精品久久人人爱蜜臀 | 久久福利电影| 浪潮色综合久久天堂| 欧美不卡视频一区| 国产精品国产亚洲精品看不卡15| 欧美日韩国产综合网| 欧美暴力喷水在线| 亚洲欧美日韩在线一区| 久久网站免费| 校园春色国产精品| 一本久道久久综合婷婷鲸鱼| 久久一区亚洲| 欧美不卡在线| 亚洲开发第一视频在线播放| 亚洲经典视频在线观看| 亚洲天天影视| 午夜影院日韩| 久久久久9999亚洲精品| 欧美电影在线观看完整版| 欧美日韩在线免费视频| 久久久99免费视频| 欧美精品二区三区四区免费看视频| 欧美日韩精选| 国产一区久久| 亚洲精品一区二区三区99| 香蕉成人久久| 久久久国产精品一区| 亚洲国产精品一区制服丝袜| 亚洲精品一区二区网址| 亚洲欧美日本国产专区一区| 欧美成人黑人xx视频免费观看| 国产精品免费看片| 亚洲人成人一区二区在线观看| 亚洲愉拍自拍另类高清精品| 欧美国产精品中文字幕| 香蕉av福利精品导航| 欧美精品性视频| 一区二区三区在线看| 久久精品夜色噜噜亚洲aⅴ| 亚洲精品欧美| 欧美一区二区三区四区视频| 欧美日韩成人精品| 黄色免费成人| 久久久久一区二区| 一区二区三区免费看| 欧美另类在线播放| 一区二区在线观看av| 欧美永久精品| 午夜精品一区二区三区在线播放| 国产一区二区三区日韩欧美| 久久久一区二区| 亚洲成色777777女色窝| 宅男噜噜噜66一区二区66| 欧美日本一区二区三区| 99精品视频免费观看| 亚洲精品国产精品国自产观看浪潮| 中文欧美在线视频| 国产精品视频你懂的| 欧美激情久久久久| 激情久久综合| 久久综合色婷婷| 久久手机免费观看| 亚洲美洲欧洲综合国产一区| 亚洲激情欧美| 国产精品成人一区二区三区吃奶 | 亚洲午夜精品国产| 一区二区三区四区在线| 国产欧美日韩视频| 欧美成人精品1314www| 欧美精品一区二区三区蜜桃| 欧美在线亚洲在线| 欧美日韩亚洲一区二区三区| 免费久久精品视频| 欧美日韩中文字幕日韩欧美| 久久精品国产精品亚洲| 久久综合免费视频影院| 亚洲女ⅴideoshd黑人| 久久国产一区二区| 亚洲视频综合| 欧美成人精品在线| 久久国产精品色婷婷| 欧美日韩aaaaa| 免费在线欧美黄色| 国产女优一区| 欧美freesex交免费视频| 欧美日韩精品| 久久一区二区三区超碰国产精品| 欧美大片在线观看| 久久久久久国产精品mv| 欧美午夜宅男影院在线观看| 亚洲成人资源| 国产精品视区|