(svn r13552) -Codechange: use TTD_ENDIAN comparations instead of tests if TTD_[BIG/LITTLE]_ENDIAN is defined
authorsmatz
Tue, 17 Jun 2008 19:38:00 +0000
changeset 10998 04f58fa3dbb0
parent 10997 968df7476121
child 11003 0cfeb1bc55a7
(svn r13552) -Codechange: use TTD_ENDIAN comparations instead of tests if TTD_[BIG/LITTLE]_ENDIAN is defined
projects/openttd_vs80.vcproj
projects/openttd_vs90.vcproj
source.list
src/core/endian_func.hpp
src/core/endian_type.hpp
src/endian_check.cpp
src/minilzo.cpp
src/screenshot.cpp
src/sound/cocoa_s.cpp
src/strings.cpp
--- a/projects/openttd_vs80.vcproj	Tue Jun 17 17:25:22 2008 +0000
+++ b/projects/openttd_vs80.vcproj	Tue Jun 17 19:38:00 2008 +0000
@@ -1000,6 +1000,10 @@
 				>
 			</File>
 			<File
+				RelativePath=".\..\src\core\endian_type.hpp"
+				>
+			</File>
+			<File
 				RelativePath=".\..\src\engine_base.h"
 				>
 			</File>
--- a/projects/openttd_vs90.vcproj	Tue Jun 17 17:25:22 2008 +0000
+++ b/projects/openttd_vs90.vcproj	Tue Jun 17 19:38:00 2008 +0000
@@ -997,6 +997,10 @@
 				>
 			</File>
 			<File
+				RelativePath=".\..\src\core\endian_type.hpp"
+				>
+			</File>
+			<File
 				RelativePath=".\..\src\engine_base.h"
 				>
 			</File>
--- a/source.list	Tue Jun 17 17:25:22 2008 +0000
+++ b/source.list	Tue Jun 17 19:38:00 2008 +0000
@@ -175,6 +175,7 @@
 effectvehicle_base.h
 elrail_func.h
 core/endian_func.hpp
+core/endian_type.hpp
 engine_base.h
 engine_func.h
 engine_gui.h
--- a/src/core/endian_func.hpp	Tue Jun 17 17:25:22 2008 +0000
+++ b/src/core/endian_func.hpp	Tue Jun 17 19:38:00 2008 +0000
@@ -5,26 +5,11 @@
 #ifndef ENDIAN_FUNC_H
 #define ENDIAN_FUNC_H
 
+#include "endian_type.hpp"
 #include "bitmath_func.hpp"
 
-#if defined(ARM) || defined(__arm__) || defined(__alpha__)
-	#define OTTD_ALIGNMENT
-#endif
-
-/* Windows has always LITTLE_ENDIAN */
-#if defined(WIN32) || defined(__OS2__) || defined(WIN64)
-	#define TTD_LITTLE_ENDIAN
-#elif !defined(TESTING)
-	/* Else include endian[target/host].h, which has the endian-type, autodetected by the Makefile */
-	#if defined(STRGEN)
-		#include "endian_host.h"
-	#else
-		#include "endian_target.h"
-	#endif
-#endif /* WIN32 || __OS2__ || WIN64 */
-
 /* Setup alignment and conversion macros */
-#if defined(TTD_BIG_ENDIAN)
+#if TTD_ENDIAN == TTD_BIG_ENDIAN
 	#define FROM_BE16(x) (x)
 	#define FROM_BE32(x) (x)
 	#define TO_BE16(x)   (x)
@@ -46,7 +31,7 @@
 	#define TO_LE16(x)   (x)
 	#define TO_LE32(x)   (x)
 	#define TO_LE32X(x)  (x)
-#endif /* TTD_BIG_ENDIAN */
+#endif /* TTD_ENDIAN == TTD_BIG_ENDIAN */
 
 static inline uint16 ReadLE16Aligned(const void *x)
 {
@@ -55,11 +40,11 @@
 
 static inline uint16 ReadLE16Unaligned(const void *x)
 {
-#ifdef OTTD_ALIGNMENT
+#if OTTD_ALIGNMENT == 1
 	return ((const byte*)x)[0] | ((const byte*)x)[1] << 8;
 #else
 	return FROM_LE16(*(const uint16*)x);
-#endif
+#endif /* OTTD_ALIGNMENT == 1 */
 }
 
 #endif /* ENDIAN_FUNC_HPP */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/core/endian_type.hpp	Tue Jun 17 19:38:00 2008 +0000
@@ -0,0 +1,29 @@
+/* $Id$ */
+
+/** @file endian_type.hpp Definition of various endian-dependant macros. */
+
+#ifndef ENDIAN_TYPE_H
+#define ENDIAN_TYPE_H
+
+#if defined(ARM) || defined(__arm__) || defined(__alpha__)
+	#define OTTD_ALIGNMENT 1
+#else
+	#define OTTD_ALIGNMENT 0
+#endif
+
+#define TTD_LITTLE_ENDIAN 0
+#define TTD_BIG_ENDIAN 1
+
+/* Windows has always LITTLE_ENDIAN */
+#if defined(WIN32) || defined(__OS2__) || defined(WIN64)
+	#define TTD_ENDIAN TTD_LITTLE_ENDIAN
+#elif !defined(TESTING)
+	/* Else include endian[target/host].h, which has the endian-type, autodetected by the Makefile */
+	#if defined(STRGEN)
+		#include "endian_host.h"
+	#else
+		#include "endian_target.h"
+	#endif
+#endif /* WIN32 || __OS2__ || WIN64 */
+
+#endif /* ENDIAN_TYPE_HPP */
--- a/src/endian_check.cpp	Tue Jun 17 17:25:22 2008 +0000
+++ b/src/endian_check.cpp	Tue Jun 17 19:38:00 2008 +0000
@@ -12,6 +12,21 @@
 #include <stdio.h>
 #include <string.h>
 
+/** Supported endian types */
+enum Endian {
+	ENDIAN_LITTLE, ///< little endian
+	ENDIAN_BIG     ///< big endian
+};
+
+/**
+ * Shortcut to printf("#define TTD_*_ENDIAN 0/1")
+ * @param endian endian type to define
+ */
+static inline void printf_endian(Endian endian)
+{
+	printf("#define TTD_ENDIAN %s\n", endian == ENDIAN_LITTLE ? "TTD_LITTLE_ENDIAN" : "TTD_BIG_ENDIAN");
+}
+
 /**
  * Main call of the endian_check program
  * @param argc argument count
@@ -30,23 +45,23 @@
 	printf("#ifndef ENDIAN_H\n#define ENDIAN_H\n");
 
 	if (force_LE == 1) {
-		printf("#define TTD_LITTLE_ENDIAN\n");
+		printf_endian(ENDIAN_LITTLE);
 	} else if (force_BE == 1) {
-		printf("#define TTD_BIG_ENDIAN\n");
+		printf_endian(ENDIAN_BIG);
 	} else if (force_PREPROCESSOR == 1) {
 		/* Support for universal binaries on OSX
 		 * Universal binaries supports both PPC and x86
 		 * If a compiler for OSX gets this setting, it will always pick the correct endian and no test is needed
 		 */
 		printf("#ifdef __BIG_ENDIAN__\n");
-		printf("#define TTD_BIG_ENDIAN\n");
+		printf_endian(ENDIAN_BIG);
 		printf("#else\n");
-		printf("#define TTD_LITTLE_ENDIAN\n");
+		printf_endian(ENDIAN_LITTLE);
 		printf("#endif\n");
 	} else if (*(short*)endian_test == 1 ) {
-		printf("#define TTD_LITTLE_ENDIAN\n");
+		printf_endian(ENDIAN_LITTLE);
 	} else {
-		printf("#define TTD_BIG_ENDIAN\n");
+		printf_endian(ENDIAN_BIG);
 	}
 	printf("#endif\n");
 
--- a/src/minilzo.cpp	Tue Jun 17 17:25:22 2008 +0000
+++ b/src/minilzo.cpp	Tue Jun 17 19:38:00 2008 +0000
@@ -230,9 +230,9 @@
 #  error "LZO_ALIGNED_OK_4 must not be defined on this system"
 #endif
 
-#define LZO_LITTLE_ENDIAN	   1234
-#define LZO_BIG_ENDIAN		  4321
-#define LZO_PDP_ENDIAN		  3412
+#define LZO_LITTLE_ENDIAN 1234
+#define LZO_BIG_ENDIAN    4321
+#define LZO_PDP_ENDIAN    3412
 
 #if !defined(LZO_BYTE_ORDER)
 #  if defined(MFX_BYTE_ORDER)
--- a/src/screenshot.cpp	Tue Jun 17 17:25:22 2008 +0000
+++ b/src/screenshot.cpp	Tue Jun 17 19:38:00 2008 +0000
@@ -247,12 +247,12 @@
 		sig_bit.gray  = 8;
 		png_set_sBIT(png_ptr, info_ptr, &sig_bit);
 
-#ifdef TTD_LITTLE_ENDIAN
+#if TTD_ENDIAN == TTD_LITTLE_ENDIAN
 		png_set_bgr(png_ptr);
 		png_set_filler(png_ptr, 0, PNG_FILLER_AFTER);
 #else
 		png_set_filler(png_ptr, 0, PNG_FILLER_BEFORE);
-#endif
+#endif /* TTD_ENDIAN == TTD_LITTLE_ENDIAN */
 	}
 
 	/* use by default 64k temp memory */
--- a/src/sound/cocoa_s.cpp	Tue Jun 17 17:25:22 2008 +0000
+++ b/src/sound/cocoa_s.cpp	Tue Jun 17 19:38:00 2008 +0000
@@ -24,7 +24,7 @@
 #include "../debug.h"
 #include "../driver.h"
 #include "../mixer.h"
-#include "../core/endian_func.hpp"
+#include "../core/endian_type.hpp"
 
 #include "cocoa_s.h"
 
@@ -61,9 +61,9 @@
 	requestedDesc.mBitsPerChannel = 16;
 	requestedDesc.mFormatFlags |= kLinearPCMFormatFlagIsSignedInteger;
 
-#ifdef TTD_BIG_ENDIAN
+#if TTD_ENDIAN == TTD_BIG_ENDIAN
 	requestedDesc.mFormatFlags |= kLinearPCMFormatFlagIsBigEndian;
-#endif
+#endif /* TTD_ENDIAN == TTD_BIG_ENDIAN */
 
 	requestedDesc.mFramesPerPacket = 1;
 	requestedDesc.mBytesPerFrame = requestedDesc.mBitsPerChannel * requestedDesc.mChannelsPerFrame / 8;
--- a/src/strings.cpp	Tue Jun 17 17:25:22 2008 +0000
+++ b/src/strings.cpp	Tue Jun 17 19:38:00 2008 +0000
@@ -1251,11 +1251,11 @@
 		return false;
 	}
 
-#if defined(TTD_BIG_ENDIAN)
+#if TTD_ENDIAN == TTD_BIG_ENDIAN
 	for (i = 0; i != 32; i++) {
 		lang_pack->offsets[i] = ReadLE16Aligned(&lang_pack->offsets[i]);
 	}
-#endif
+#endif /* TTD_ENDIAN == TTD_BIG_ENDIAN */
 
 	tot_count = 0;
 	for (i = 0; i != 32; i++) {