Browse Source

Use std::byte in serializer

Ivan Savenko 1 year ago
parent
commit
03fcfe3392

+ 2 - 2
client/globalLobby/GlobalLobbyLoginWindow.cpp

@@ -35,7 +35,7 @@ GlobalLobbyLoginWindow::GlobalLobbyLoginWindow()
 	pos.w = 200;
 	pos.h = 200;
 
-	background = std::make_shared<FilledTexturePlayerColored>(ImagePath::builtin("DiBoxBck"), Rect(0, 0, pos.w, pos.h));
+	filledBackground = std::make_shared<FilledTexturePlayerColored>(ImagePath::builtin("DiBoxBck"), Rect(0, 0, pos.w, pos.h));
 	labelTitle = std::make_shared<CLabel>( pos.w / 2, 20, FONT_BIG, ETextAlignment::CENTER, Colors::YELLOW, CGI->generaltexth->translate("vcmi.lobby.login.title"));
 	labelUsername = std::make_shared<CLabel>( 10, 45, FONT_MEDIUM, ETextAlignment::TOPLEFT, Colors::WHITE, CGI->generaltexth->translate("vcmi.lobby.login.username"));
 	backgroundUsername = std::make_shared<TransparentFilledRectangle>(Rect(10, 70, 180, 20), ColorRGBA(0,0,0,128), ColorRGBA(64,64,64,64));
@@ -44,7 +44,7 @@ GlobalLobbyLoginWindow::GlobalLobbyLoginWindow()
 	buttonClose = std::make_shared<CButton>(Point(126, 160), AnimationPath::builtin("MuBcanc"), CButton::tooltip(), [this](){ onClose(); });
 	labelStatus = std::make_shared<CTextBox>( "", Rect(15, 95, 175, 60), 1, FONT_SMALL, ETextAlignment::TOPLEFT, Colors::WHITE);
 
-	background->playerColored(PlayerColor(1));
+	filledBackground->playerColored(PlayerColor(1));
 	inputUsername->setText(settings["lobby"]["displayName"].String());
 	inputUsername->cb += [this](const std::string & text)
 	{

+ 1 - 1
client/globalLobby/GlobalLobbyLoginWindow.h

@@ -20,7 +20,7 @@ class CButton;
 
 class GlobalLobbyLoginWindow : public CWindowObject
 {
-	std::shared_ptr<FilledTexturePlayerColored> background;
+	std::shared_ptr<FilledTexturePlayerColored> filledBackground;
 	std::shared_ptr<CLabel> labelTitle;
 	std::shared_ptr<CLabel> labelUsername;
 	std::shared_ptr<CTextBox> labelStatus;

+ 2 - 2
client/globalLobby/GlobalLobbyServerSetup.cpp

@@ -31,7 +31,7 @@ GlobalLobbyServerSetup::GlobalLobbyServerSetup()
 	pos.w = 284;
 	pos.h = 340;
 
-	background = std::make_shared<FilledTexturePlayerColored>(ImagePath::builtin("DiBoxBck"), Rect(0, 0, pos.w, pos.h));
+	filledBackground = std::make_shared<FilledTexturePlayerColored>(ImagePath::builtin("DiBoxBck"), Rect(0, 0, pos.w, pos.h));
 	labelTitle = std::make_shared<CLabel>( pos.w / 2, 20, FONT_BIG, ETextAlignment::CENTER, Colors::YELLOW, CGI->generaltexth->translate("vcmi.lobby.room.create"));
 	labelPlayerLimit = std::make_shared<CLabel>( pos.w / 2, 48, FONT_MEDIUM, ETextAlignment::CENTER, Colors::YELLOW, CGI->generaltexth->translate("vcmi.lobby.room.players.limit"));
 	labelRoomType = std::make_shared<CLabel>( pos.w / 2, 108, FONT_MEDIUM, ETextAlignment::CENTER, Colors::YELLOW, CGI->generaltexth->translate("vcmi.lobby.room.type"));
@@ -75,7 +75,7 @@ GlobalLobbyServerSetup::GlobalLobbyServerSetup()
 	buttonCreate = std::make_shared<CButton>(Point(10, 300), AnimationPath::builtin("MuBchck"), CButton::tooltip(), [this](){ onCreate(); });
 	buttonClose = std::make_shared<CButton>(Point(210, 300), AnimationPath::builtin("MuBcanc"), CButton::tooltip(), [this](){ onClose(); });
 
-	background->playerColored(PlayerColor(1));
+	filledBackground->playerColored(PlayerColor(1));
 
 	updateDescription();
 	center();

+ 1 - 1
client/globalLobby/GlobalLobbyServerSetup.h

@@ -19,7 +19,7 @@ class CToggleGroup;
 
 class GlobalLobbyServerSetup : public CWindowObject
 {
-	std::shared_ptr<FilledTexturePlayerColored> background;
+	std::shared_ptr<FilledTexturePlayerColored> filledBackground;
 	std::shared_ptr<CLabel> labelTitle;
 
 	std::shared_ptr<CLabel> labelPlayerLimit;

+ 1 - 1
client/globalLobby/GlobalLobbyWidget.h

@@ -24,7 +24,7 @@ class GlobalLobbyWidget : public InterfaceObjectConfigurable
 	std::shared_ptr<CIntObject> buildRoomList(const JsonNode &) const;
 
 public:
-	GlobalLobbyWidget(GlobalLobbyWindow * window);
+	explicit GlobalLobbyWidget(GlobalLobbyWindow * window);
 
 	std::shared_ptr<CLabel> getAccountNameLabel();
 	std::shared_ptr<CTextInput> getMessageInput();

+ 0 - 4
lib/JsonNode.cpp

@@ -72,10 +72,6 @@ JsonNode::JsonNode(JsonType Type)
 	setType(Type);
 }
 
-JsonNode::JsonNode(const uint8_t *data, size_t datasize)
-	:JsonNode(reinterpret_cast<const char*>(data), datasize)
-{}
-
 JsonNode::JsonNode(const std::byte *data, size_t datasize)
 	:JsonNode(reinterpret_cast<const char*>(data), datasize)
 {}

+ 0 - 1
lib/JsonNode.h

@@ -51,7 +51,6 @@ public:
 	JsonNode(JsonType Type = JsonType::DATA_NULL);
 	//Create tree from Json-formatted input
 	explicit JsonNode(const char * data, size_t datasize);
-	explicit JsonNode(const uint8_t * data, size_t datasize);
 	explicit JsonNode(const std::byte * data, size_t datasize);
 	//Create tree from JSON file
 	explicit JsonNode(const JsonPath & fileURI);

+ 8 - 8
lib/serializer/BinaryDeserializer.h

@@ -23,9 +23,13 @@ protected:
 public:
 	CLoaderBase(IBinaryReader * r): reader(r){};
 
-	inline int read(void * data, unsigned size)
+	inline void read(void * data, unsigned size, bool reverseEndianess)
 	{
-		return reader->read(data, size);
+		auto bytePtr = reinterpret_cast<std::byte*>(data);
+
+		reader->read(bytePtr, size);
+		if(reverseEndianess)
+			std::reverse(bytePtr, bytePtr + size);
 	};
 };
 
@@ -170,11 +174,7 @@ public:
 	template < class T, typename std::enable_if < std::is_fundamental<T>::value && !std::is_same<T, bool>::value, int  >::type = 0 >
 	void load(T &data)
 	{
-		unsigned length = sizeof(data);
-		char * dataPtr = reinterpret_cast<char *>(&data);
-		this->read(dataPtr,length);
-		if(reverseEndianess)
-			std::reverse(dataPtr, dataPtr + length);
+		this->read(static_cast<void *>(&data), sizeof(data), reverseEndianess);
 	}
 
 	template < typename T, typename std::enable_if < is_serializeable<BinaryDeserializer, T>::value, int  >::type = 0 >
@@ -439,7 +439,7 @@ public:
 	{
 		ui32 length = readAndCheckLength();
 		data.resize(length);
-		this->read((void*)data.c_str(),length);
+		this->read(static_cast<void *>(data.data()), length, false);
 	}
 
 	template<typename... TN>

+ 4 - 4
lib/serializer/BinarySerializer.h

@@ -23,9 +23,9 @@ protected:
 public:
 	CSaverBase(IBinaryWriter * w): writer(w){};
 
-	inline int write(const void * data, unsigned size)
+	inline void write(const void * data, unsigned size)
 	{
-		return writer->write(data, size);
+		writer->write(reinterpret_cast<const std::byte*>(data), size);
 	};
 };
 
@@ -145,7 +145,7 @@ public:
 	void save(const T &data)
 	{
 		// save primitive - simply dump binary data to output
-		this->write(&data,sizeof(data));
+		this->write(static_cast<const void *>(&data), sizeof(data));
 	}
 
 	template < typename T, typename std::enable_if < std::is_enum<T>::value, int  >::type = 0 >
@@ -312,7 +312,7 @@ public:
 	void save(const std::string &data)
 	{
 		save(ui32(data.length()));
-		this->write(data.c_str(),(unsigned int)data.size());
+		this->write(static_cast<const void *>(data.data()), data.size());
 	}
 	template <typename T1, typename T2>
 	void save(const std::pair<T1,T2> &data)

+ 2 - 2
lib/serializer/CLoadFile.cpp

@@ -21,7 +21,7 @@ CLoadFile::CLoadFile(const boost::filesystem::path & fname, ESerializationVersio
 //must be instantiated in .cpp file for access to complete types of all member fields
 CLoadFile::~CLoadFile() = default;
 
-int CLoadFile::read(void * data, unsigned size)
+int CLoadFile::read(std::byte * data, unsigned size)
 {
 	sfile->read(reinterpret_cast<char *>(data), size);
 	return size;
@@ -92,7 +92,7 @@ void CLoadFile::clear()
 void CLoadFile::checkMagicBytes(const std::string &text)
 {
 	std::string loaded = text;
-	read((void *)loaded.data(), static_cast<unsigned int>(text.length()));
+	read(reinterpret_cast<std::byte*>(loaded.data()), text.length());
 	if(loaded != text)
 		throw std::runtime_error("Magic bytes doesn't match!");
 }

+ 1 - 1
lib/serializer/CLoadFile.h

@@ -23,7 +23,7 @@ public:
 
 	CLoadFile(const boost::filesystem::path & fname, ESerializationVersion minimalVersion = ESerializationVersion::CURRENT); //throws!
 	virtual ~CLoadFile();
-	int read(void * data, unsigned size) override; //throws!
+	int read(std::byte * data, unsigned size) override; //throws!
 
 	void openNextFile(const boost::filesystem::path & fname, ESerializationVersion minimalVersion); //throws!
 	void clear();

+ 2 - 2
lib/serializer/CMemorySerializer.cpp

@@ -12,7 +12,7 @@
 
 VCMI_LIB_NAMESPACE_BEGIN
 
-int CMemorySerializer::read(void * data, unsigned size)
+int CMemorySerializer::read(std::byte * data, unsigned size)
 {
 	if(buffer.size() < readPos + size)
 		throw std::runtime_error(boost::str(boost::format("Cannot read past the buffer (accessing index %d, while size is %d)!") % (readPos + size - 1) % buffer.size()));
@@ -22,7 +22,7 @@ int CMemorySerializer::read(void * data, unsigned size)
 	return size;
 }
 
-int CMemorySerializer::write(const void * data, unsigned size)
+int CMemorySerializer::write(const std::byte * data, unsigned size)
 {
 	auto oldSize = buffer.size(); //and the pos to write from
 	buffer.resize(oldSize + size);

+ 2 - 2
lib/serializer/CMemorySerializer.h

@@ -25,8 +25,8 @@ public:
 	BinaryDeserializer iser;
 	BinarySerializer oser;
 
-	int read(void * data, unsigned size) override; //throws!
-	int write(const void * data, unsigned size) override;
+	int read(std::byte * data, unsigned size) override; //throws!
+	int write(const std::byte * data, unsigned size) override;
 
 	CMemorySerializer();
 

+ 3 - 3
lib/serializer/CSaveFile.cpp

@@ -21,9 +21,9 @@ CSaveFile::CSaveFile(const boost::filesystem::path &fname)
 //must be instantiated in .cpp file for access to complete types of all member fields
 CSaveFile::~CSaveFile() = default;
 
-int CSaveFile::write(const void * data, unsigned size)
+int CSaveFile::write(const std::byte * data, unsigned size)
 {
-	sfile->write((char *)data,size);
+	sfile->write(reinterpret_cast<const char *>(data), size);
 	return size;
 }
 
@@ -66,7 +66,7 @@ void CSaveFile::clear()
 
 void CSaveFile::putMagicBytes(const std::string &text)
 {
-	write(text.c_str(), static_cast<unsigned int>(text.length()));
+	write(reinterpret_cast<const std::byte*>(text.c_str()), text.length());
 }
 
 VCMI_LIB_NAMESPACE_END

+ 1 - 1
lib/serializer/CSaveFile.h

@@ -23,7 +23,7 @@ public:
 
 	CSaveFile(const boost::filesystem::path &fname); //throws!
 	~CSaveFile();
-	int write(const void * data, unsigned size) override;
+	int write(const std::byte * data, unsigned size) override;
 
 	void openNextFile(const boost::filesystem::path &fname); //throws!
 	void clear();

+ 2 - 2
lib/serializer/CSerializer.h

@@ -175,14 +175,14 @@ struct VectorizedIDType<CGHeroInstance>
 class DLL_LINKAGE IBinaryReader : public virtual CSerializer
 {
 public:
-	virtual int read(void * data, unsigned size) = 0;
+	virtual int read(std::byte * data, unsigned size) = 0;
 };
 
 /// Base class for serializers
 class DLL_LINKAGE IBinaryWriter : public virtual CSerializer
 {
 public:
-	virtual int write(const void * data, unsigned size) = 0;
+	virtual int write(const std::byte * data, unsigned size) = 0;
 };
 
 VCMI_LIB_NAMESPACE_END

+ 6 - 10
lib/serializer/Connection.cpp

@@ -24,7 +24,7 @@ class DLL_LINKAGE ConnectionPackWriter final : public IBinaryWriter
 public:
 	std::vector<std::byte> buffer;
 
-	int write(const void * data, unsigned size) final;
+	int write(const std::byte * data, unsigned size) final;
 };
 
 class DLL_LINKAGE ConnectionPackReader final : public IBinaryReader
@@ -33,25 +33,21 @@ public:
 	const std::vector<std::byte> * buffer;
 	size_t position;
 
-	int read(void * data, unsigned size) final;
+	int read(std::byte * data, unsigned size) final;
 };
 
-int ConnectionPackWriter::write(const void * data, unsigned size)
+int ConnectionPackWriter::write(const std::byte * data, unsigned size)
 {
-	const std::byte * begin_ptr = static_cast<const std::byte *>(data);
-	const std::byte * end_ptr = begin_ptr + size;
-	buffer.insert(buffer.end(), begin_ptr, end_ptr);
+	buffer.insert(buffer.end(), data, data + size);
 	return size;
 }
 
-int ConnectionPackReader::read(void * data, unsigned size)
+int ConnectionPackReader::read(std::byte * data, unsigned size)
 {
 	if (position + size > buffer->size())
 		throw std::runtime_error("End of file reached when reading received network pack!");
 
-	std::byte * begin_ptr = static_cast<std::byte *>(data);
-
-	std::copy_n(buffer->begin() + position, size, begin_ptr);
+	std::copy_n(buffer->begin() + position, size, data);
 	position += size;
 	return size;
 }

+ 1 - 1
lib/serializer/Connection.h

@@ -46,7 +46,7 @@ public:
 	std::string uuid;
 	int connectionID;
 
-	CConnection(std::weak_ptr<INetworkConnection> networkConnection);
+	explicit CConnection(std::weak_ptr<INetworkConnection> networkConnection);
 	~CConnection();
 
 	void sendPack(const CPack * pack);

+ 2 - 2
lobby/LobbyServer.cpp

@@ -205,10 +205,10 @@ void LobbyServer::onNewConnection(const NetworkConnectionPtr & connection)
 
 void LobbyServer::onDisconnected(const NetworkConnectionPtr & connection, const std::string & errorMessage)
 {
-	if (activeAccounts.count(connection))
+	if(activeAccounts.count(connection))
 		database->setAccountOnline(activeAccounts.at(connection), false);
 
-	if (activeGameRooms.count(connection))
+	if(activeGameRooms.count(connection))
 		database->setGameRoomStatus(activeGameRooms.at(connection), LobbyRoomState::CLOSED);
 
 	// NOTE: lost connection can be in only one of these lists (or in none of them)