[openjk] 88/130: SG: Move cplane_t's archive methods into separate header

Simon McVittie smcv at debian.org
Fri Oct 28 11:09:23 UTC 2016


This is an automated email from the git hooks/post-receive script.

smcv pushed a commit to branch debian/master
in repository openjk.

commit 8f2c8d9ab551ab596c46b246b2f52327a93e9182
Author: bibendovsky <bibendovsky at hotmail.com>
Date:   Wed Aug 31 21:03:02 2016 +0300

    SG: Move cplane_t's archive methods into separate header
---
 code/game/CMakeLists.txt                        |  1 +
 code/rd-vanilla/CMakeLists.txt                  |  1 +
 codeJK2/game/CMakeLists.txt                     |  1 +
 shared/qcommon/ojk_saved_game_class_archivers.h | 54 ++++++++++++++++++++++
 shared/qcommon/ojk_saved_game_helper.h          | 61 +++++++++++++++++++++++++
 shared/qcommon/ojk_saved_game_helper_fwd.h      | 57 +++++++++++++++++++++++
 shared/qcommon/q_math.h                         | 26 -----------
 7 files changed, 175 insertions(+), 26 deletions(-)

diff --git a/code/game/CMakeLists.txt b/code/game/CMakeLists.txt
index c54a67f..c86eb42 100644
--- a/code/game/CMakeLists.txt
+++ b/code/game/CMakeLists.txt
@@ -260,6 +260,7 @@ set(SPGameCommonFiles
 	"${SPDir}/qcommon/q_shared.cpp"
 	"${SPDir}/qcommon/q_shared.h"
 	"${SharedDir}/qcommon/ojk_i_saved_game.h"
+	"${SharedDir}/qcommon/ojk_saved_game_class_archivers.h"
 	"${SharedDir}/qcommon/ojk_saved_game_helper.h"
 	"${SharedDir}/qcommon/ojk_saved_game_helper_fwd.h"
 	"${SharedDir}/qcommon/ojk_scope_guard.h"
diff --git a/code/rd-vanilla/CMakeLists.txt b/code/rd-vanilla/CMakeLists.txt
index 1dc0b57..e25c389 100644
--- a/code/rd-vanilla/CMakeLists.txt
+++ b/code/rd-vanilla/CMakeLists.txt
@@ -78,6 +78,7 @@ if(BuildSPRdVanilla OR BuildJK2SPRdVanilla)
 		"${SPDir}/qcommon/q_shared.cpp"
 		"${SPDir}/qcommon/q_shared.h"
 		"${SharedDir}/qcommon/ojk_i_saved_game.h"
+		"${SharedDir}/qcommon/ojk_saved_game_class_archivers.h"
 		"${SharedDir}/qcommon/ojk_saved_game_helper.h"
 		"${SharedDir}/qcommon/ojk_saved_game_helper_fwd.h"
 		"${SharedDir}/qcommon/ojk_scope_guard.h"
diff --git a/codeJK2/game/CMakeLists.txt b/codeJK2/game/CMakeLists.txt
index a757e29..782071a 100644
--- a/codeJK2/game/CMakeLists.txt
+++ b/codeJK2/game/CMakeLists.txt
@@ -232,6 +232,7 @@ set(JK2SPGameCommonFiles
 	"${SPDir}/qcommon/q_shared.h"
 	"${SPDir}/qcommon/strippublic.h"
 	"${SharedDir}/qcommon/ojk_i_saved_game.h"
+	"${SharedDir}/qcommon/ojk_saved_game_class_archivers.h"
 	"${SharedDir}/qcommon/ojk_saved_game_helper.h"
 	"${SharedDir}/qcommon/ojk_saved_game_helper_fwd.h"
 	"${SharedDir}/qcommon/ojk_scope_guard.h"
diff --git a/shared/qcommon/ojk_saved_game_class_archivers.h b/shared/qcommon/ojk_saved_game_class_archivers.h
new file mode 100644
index 0000000..8f4f8ce
--- /dev/null
+++ b/shared/qcommon/ojk_saved_game_class_archivers.h
@@ -0,0 +1,54 @@
+//
+// Saved game specialized archivers
+//
+
+
+#ifndef OJK_SAVED_GAME_CLASS_ARCHIVERS_INCLUDED
+#define OJK_SAVED_GAME_CLASS_ARCHIVERS_INCLUDED
+
+
+#include "q_math.h"
+#include "ojk_saved_game_helper_fwd.h"
+
+
+namespace ojk
+{
+
+
+template<>
+class SavedGameClassArchiver<cplane_t>
+{
+public:
+	static constexpr bool is_implemented()
+	{
+		return true;
+	}
+
+	static void sg_export(
+		SavedGameHelper& saved_game,
+		const cplane_t& instance)
+	{
+		saved_game.write<float>(instance.normal);
+		saved_game.write<float>(instance.dist);
+		saved_game.write<uint8_t>(instance.type);
+		saved_game.write<uint8_t>(instance.signbits);
+		saved_game.write<uint8_t>(instance.pad);
+	}
+
+	static void sg_import(
+		SavedGameHelper& saved_game,
+		cplane_t& instance)
+	{
+		saved_game.read<float>(instance.normal);
+		saved_game.read<float>(instance.dist);
+		saved_game.read<uint8_t>(instance.type);
+		saved_game.read<uint8_t>(instance.signbits);
+		saved_game.read<uint8_t>(instance.pad);
+	}
+};
+
+
+} // ojk
+
+
+#endif // OJK_SAVED_GAME_CLASS_ARCHIVERS_INCLUDED
diff --git a/shared/qcommon/ojk_saved_game_helper.h b/shared/qcommon/ojk_saved_game_helper.h
index 0cf8426..bab0227 100644
--- a/shared/qcommon/ojk_saved_game_helper.h
+++ b/shared/qcommon/ojk_saved_game_helper.h
@@ -11,6 +11,7 @@
 #include <type_traits>
 #include "ojk_saved_game_helper_fwd.h"
 #include "ojk_scope_guard.h"
+#include "ojk_saved_game_class_archivers.h"
 
 
 namespace ojk
@@ -393,12 +394,43 @@ bool SavedGameHelper::try_read(
 		std::is_same<TSrc, void>::value,
 		"Unsupported types.");
 
+	using Tag = typename std::conditional<
+		SavedGameClassArchiver<TDst>::is_implemented(),
+		ExternalTag,
+		InternalTag
+	>::type;
+
+	return try_read<TSrc>(
+		dst_value,
+		ClassTag(),
+		Tag());
+}
+
+template<typename TSrc, typename TDst>
+bool SavedGameHelper::try_read(
+	TDst& dst_value,
+	ClassTag,
+	InternalTag)
+{
 	dst_value.sg_import(
 		*this);
 
 	return !saved_game_->is_failed();
 }
 
+template<typename TSrc, typename TDst>
+bool SavedGameHelper::try_read(
+	TDst& dst_value,
+	ClassTag,
+	ExternalTag)
+{
+	SavedGameClassArchiver<TDst>::sg_import(
+		*this,
+		dst_value);
+
+	return !saved_game_->is_failed();
+}
+
 template<typename TSrc, typename TDst, int TCount>
 bool SavedGameHelper::try_read(
 	TDst(&dst_values)[TCount],
@@ -643,10 +675,39 @@ void SavedGameHelper::write(
 		std::is_same<TDst, void>::value,
 		"Unsupported types.");
 
+	using Tag = typename std::conditional<
+		SavedGameClassArchiver<TSrc>::is_implemented(),
+		ExternalTag,
+		InternalTag
+	>::type;
+
+	write<TDst>(
+		src_value,
+		ClassTag(),
+		Tag());
+}
+
+template<typename TDst, typename TSrc>
+void SavedGameHelper::write(
+	const TSrc& src_value,
+	ClassTag,
+	InternalTag)
+{
 	src_value.sg_export(
 		*this);
 }
 
+template<typename TDst, typename TSrc>
+void SavedGameHelper::write(
+	const TSrc& src_value,
+	ClassTag,
+	ExternalTag)
+{
+	SavedGameClassArchiver<TSrc>::sg_export(
+		*this,
+		src_value);
+}
+
 template<typename TDst, typename TSrc, int TCount>
 void SavedGameHelper::write(
 	const TSrc(&src_values)[TCount],
diff --git a/shared/qcommon/ojk_saved_game_helper_fwd.h b/shared/qcommon/ojk_saved_game_helper_fwd.h
index 387398d..6c06559 100644
--- a/shared/qcommon/ojk_saved_game_helper_fwd.h
+++ b/shared/qcommon/ojk_saved_game_helper_fwd.h
@@ -174,6 +174,8 @@ private:
 	class Array2dTag { public: };
 	class InplaceTag { public: };
 	class CastTag { public: };
+	class InternalTag { public: };
+	class ExternalTag { public: };
 
 
 	template<typename TSrc, typename TDst>
@@ -196,6 +198,18 @@ private:
 		TDst& dst_value,
 		ClassTag);
 
+	template<typename TSrc, typename TDst>
+	bool try_read(
+		TDst& dst_value,
+		ClassTag,
+		InternalTag);
+
+	template<typename TSrc, typename TDst>
+	bool try_read(
+		TDst& dst_value,
+		ClassTag,
+		ExternalTag);
+
 	template<typename TSrc, typename TDst, int TCount>
 	bool try_read(
 		TDst(&dst_values)[TCount],
@@ -235,6 +249,18 @@ private:
 		const TSrc& src_value,
 		ClassTag);
 
+	template<typename TDst, typename TSrc>
+	void write(
+		const TSrc& src_value,
+		ClassTag,
+		InternalTag);
+
+	template<typename TDst, typename TSrc>
+	void write(
+		const TSrc& src_value,
+		ClassTag,
+		ExternalTag);
+
 	template<typename TDst, typename TSrc, int TCount>
 	void write(
 		const TSrc(&src_values)[TCount],
@@ -260,6 +286,37 @@ private:
 }; // SavedGameHelper
 
 
+template<typename T>
+class SavedGameClassArchiver
+{
+public:
+	static constexpr bool is_implemented()
+	{
+		return false;
+	}
+
+	static void sg_export(
+		SavedGameHelper& saved_game,
+		const T& instance)
+	{
+		static_cast<void>(saved_game);
+		static_cast<void>(instance);
+
+		static_assert(false, "Not implemented.");
+	}
+
+	static void sg_import(
+		SavedGameHelper& saved_game,
+		T& instance)
+	{
+		static_cast<void>(saved_game);
+		static_cast<void>(instance);
+
+		static_assert(false, "Not implemented.");
+	}
+};
+
+
 } // ojk
 
 
diff --git a/shared/qcommon/q_math.h b/shared/qcommon/q_math.h
index 4005e58..bf337f4 100644
--- a/shared/qcommon/q_math.h
+++ b/shared/qcommon/q_math.h
@@ -24,9 +24,6 @@ along with this program; if not, see <http://www.gnu.org/licenses/>.
 
 #include "q_platform.h"
 
-#ifdef __cplusplus
-#include "ojk_saved_game_helper_fwd.h"
-#endif // __cplusplus
 
 #if defined(__cplusplus)
 extern "C" {
@@ -184,29 +181,6 @@ typedef struct cplane_s {
 	byte	type;			// for fast side tests: 0,1,2 = axial, 3 = nonaxial
 	byte	signbits;		// signx + (signy<<1) + (signz<<2), used as lookup during collision
 	byte	pad[2];
-
-
-#ifdef __cplusplus
-	void sg_export(
-		ojk::SavedGameHelper& saved_game) const
-	{
-		saved_game.write<float>(normal);
-		saved_game.write<float>(dist);
-		saved_game.write<uint8_t>(type);
-		saved_game.write<uint8_t>(signbits);
-		saved_game.write<uint8_t>(pad);
-	}
-
-	void sg_import(
-		ojk::SavedGameHelper& saved_game)
-	{
-		saved_game.read<float>(normal);
-		saved_game.read<float>(dist);
-		saved_game.read<uint8_t>(type);
-		saved_game.read<uint8_t>(signbits);
-		saved_game.read<uint8_t>(pad);
-	}
-#endif // __cplusplus
 } cplane_t;
 
 void SetPlaneSignbits( cplane_t *out );

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-games/openjk.git



More information about the Pkg-games-commits mailing list