瀏覽代碼

More refactoring

AlexVinS 10 年之前
父節點
當前提交
74161198c4
共有 2 個文件被更改,包括 25 次插入37 次删除
  1. 6 10
      lib/Connection.cpp
  2. 19 27
      lib/Connection.h

+ 6 - 10
lib/Connection.cpp

@@ -238,26 +238,22 @@ void CConnection::sendPackToServer(const CPack &pack, PlayerColor player, ui32 r
 
 void CConnection::disableStackSendingByID()
 {
-	iser.sendStackInstanceByIds = false;
-	oser.sendStackInstanceByIds = false;
+	CSerializer::sendStackInstanceByIds = false;	
 }
 
 void CConnection::enableStackSendingByID()
 {
-	iser.sendStackInstanceByIds = true;
-	oser.sendStackInstanceByIds = true;
+	CSerializer::sendStackInstanceByIds = true;	
 }
 
 void CConnection::disableSmartPointerSerialization()
 {
-	iser.smartPointerSerialization = false;
-	oser.smartPointerSerialization = false;
+	iser.smartPointerSerialization = oser.smartPointerSerialization = false;
 }
 
 void CConnection::enableSmartPointerSerializatoin()
 {
-	iser.smartPointerSerialization = true;
-	oser.smartPointerSerialization = true;
+	iser.smartPointerSerialization = oser.smartPointerSerialization = true;
 }
 
 void CConnection::prepareForSendingHeroes()
@@ -279,12 +275,12 @@ void CConnection::enterPregameConnectionMode()
 
 void CConnection::disableSmartVectorMemberSerialization()
 {
-	iser.smartVectorMembersSerialization = oser.smartVectorMembersSerialization = false;
+	CSerializer::smartVectorMembersSerialization = false;
 }
 
 void CConnection::enableSmartVectorMemberSerializatoin()
 {
-	iser.smartVectorMembersSerialization = oser.smartVectorMembersSerialization = true;
+	CSerializer::smartVectorMembersSerialization = true;
 }
 
 CSaveFile::CSaveFile( const std::string &fname ): serializer(this) 

+ 19 - 27
lib/Connection.h

@@ -438,15 +438,15 @@ public:
 	void addStdVecItems(CGameState *gs, LibClasses *lib = VLC);
 };
 
-class IBinaryWriter
+class IBinaryWriter : public virtual CSerializer
 {
 public:
 	virtual int write(const void * data, unsigned size) = 0;
 };
 
-class DLL_LINKAGE CSaverBase : public virtual CSerializer
+class DLL_LINKAGE CSaverBase 
 {
-private:
+protected:
 	IBinaryWriter * writer;
 public:
 	CSaverBase(IBinaryWriter * w): writer(w){};
@@ -528,6 +528,7 @@ struct SaveIfStackInstance
 		return false;
 	}
 };
+
 template<typename Ser>
 struct SaveIfStackInstance<Ser, CStackInstance *>
 {
@@ -546,6 +547,7 @@ struct SaveIfStackInstance<Ser, CStackInstance *>
 		return true;
 	}
 };
+
 template<typename Ser,typename T>
 struct LoadIfStackInstance
 {
@@ -655,7 +657,8 @@ public:
 		}
 	};	
 	
-	template <typename T> class CPointerSaver : public CBasicPointerSaver
+	template <typename T> 
+	class CPointerSaver : public CBasicPointerSaver
 	{
 	public:
 		void savePtr(CSaverBase &ar, const void *data) const override
@@ -702,11 +705,6 @@ public:
 		addSaver(d);
 	}
 
-//    Serializer * This()
-//	{
-//		return static_cast<Serializer*>(this);
-//	}
-
 	template<class T>
 	COSer & operator<<(const T &t)
 	{
@@ -737,21 +735,21 @@ public:
 		if(!hlp)
 			return;
 
- 		if(smartVectorMembersSerialization)
+ 		if(writer->smartVectorMembersSerialization)
 		{
 			typedef typename boost::remove_const<typename boost::remove_pointer<T>::type>::type TObjectType;
 			typedef typename VectorisedTypeFor<TObjectType>::type VType;
 			typedef typename VectorizedIDType<TObjectType>::type IDType;
- 			if(const auto *info = getVectorisedTypeInfo<VType, IDType>())
+ 			if(const auto *info = writer->getVectorisedTypeInfo<VType, IDType>())
  			{
-				IDType id = getIdFromVectorItem<VType>(*info, data);
+				IDType id = writer->getIdFromVectorItem<VType>(*info, data);
 				*this << id;
 				if(id != IDType(-1)) //vector id is enough
  					return;
  			}
  		}
 
-		if(sendStackInstanceByIds)
+		if(writer->sendStackInstanceByIds)
 		{
 			const bool gotSaved = SaveIfStackInstance<COSer,T>::invoke(*this, data);
 			if(gotSaved)
@@ -960,15 +958,15 @@ public:
 	}
 };
 
-class IBinaryReader
+class IBinaryReader : public virtual CSerializer
 {
 public:
 	virtual int read(void * data, unsigned size) = 0;
 };
 
-class DLL_LINKAGE CLoaderBase : public virtual CSerializer
+class DLL_LINKAGE CLoaderBase 
 {
-private:
+protected:
 	IBinaryReader * reader;
 public:
 	CLoaderBase(IBinaryReader * r): reader(r){};
@@ -1240,24 +1238,24 @@ public:
 			return;
 		}
 
-		if(smartVectorMembersSerialization)
+		if(reader->smartVectorMembersSerialization)
 		{
 			typedef typename boost::remove_const<typename boost::remove_pointer<T>::type>::type TObjectType; //eg: const CGHeroInstance * => CGHeroInstance
 			typedef typename VectorisedTypeFor<TObjectType>::type VType;									 //eg: CGHeroInstance -> CGobjectInstance
 			typedef typename VectorizedIDType<TObjectType>::type IDType;
-			if(const auto *info = getVectorisedTypeInfo<VType, IDType>())
+			if(const auto *info = reader->getVectorisedTypeInfo<VType, IDType>())
 			{
 				IDType id;
 				*this >> id;
 				if(id != IDType(-1))
 				{
-					data = static_cast<T>(getVectorItemFromId<VType, IDType>(*info, id));
+					data = static_cast<T>(reader->getVectorItemFromId<VType, IDType>(*info, id));
 					return;
 				}
 			}
 		}
 
-		if(sendStackInstanceByIds)
+		if(reader->sendStackInstanceByIds)
 		{
 			bool gotLoaded = LoadIfStackInstance<CISer,T>::invoke(* this, data);
 			if(gotLoaded)
@@ -1321,7 +1319,7 @@ public:
 	if(length > 500000)				\
 	{								\
         logGlobal->warnStream() << "Warning: very big length: " << length;\
-        reportState(logGlobal);			\
+        reader->reportState(logGlobal);			\
 	};
 
 
@@ -1673,12 +1671,6 @@ public:
 		oser << t;
 		return * this;
 	}
-	
-	void addStdVecItems(CGameState *gs, LibClasses *lib = VLC)
-	{
-		iser.addStdVecItems(gs, lib);
-		oser.addStdVecItems(gs, lib);
-	}
 };
 
 DLL_LINKAGE std::ostream &operator<<(std::ostream &str, const CConnection &cpc);