(svn r13552) -Codechange: use TTD_ENDIAN comparations instead of tests if TTD_[BIG/LITTLE]_ENDIAN is defined

pull/155/head
smatz 16 years ago
parent 4e2e078743
commit cf489a25b0

@ -999,6 +999,10 @@
RelativePath=".\..\src\core\endian_func.hpp"
>
</File>
<File
RelativePath=".\..\src\core\endian_type.hpp"
>
</File>
<File
RelativePath=".\..\src\engine_base.h"
>

@ -996,6 +996,10 @@
RelativePath=".\..\src\core\endian_func.hpp"
>
</File>
<File
RelativePath=".\..\src\core\endian_type.hpp"
>
</File>
<File
RelativePath=".\..\src\engine_base.h"
>

@ -175,6 +175,7 @@ effectvehicle_func.h
effectvehicle_base.h
elrail_func.h
core/endian_func.hpp
core/endian_type.hpp
engine_base.h
engine_func.h
engine_gui.h

@ -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 ReadLE16Aligned(const void *x)
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 */

@ -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 */

@ -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 @@ int main (int argc, char *argv[])
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");

@ -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)

@ -247,12 +247,12 @@ static bool MakePNGImage(const char *name, ScreenshotCallback *callb, void *user
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 */

@ -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 @@ const char *SoundDriver_Cocoa::Start(const char * const *parm)
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;

@ -1251,11 +1251,11 @@ bool ReadLanguagePack(int lang_index)
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++) {

Loading…
Cancel
Save