[prev in list] [next in list] [prev in thread] [next in thread]
List: kde-commits
Subject: Re: koffice/filters/kspread/excel/sidewinder
From: Carlos Licea <carlos_licea () hotmail ! com>
Date: 2010-07-30 21:09:26
Message-ID: 201007301509.26986.carlos_licea () hotmail ! com
[Download RAW message or body]
On Jueves 29 Julio 2010 00:28:12 Marijn Kruisselbrink escribió:
> SVN commit 1156412 by mkruisselbrink:
>
> warnings--, I hope I still got all the endianness logic right :)
>
> M +5 -5 excel.cpp
> M +18 -37 utils.h
>
>
> --- trunk/koffice/filters/kspread/excel/sidewinder/excel.cpp
> #1156411:1156412 @@ -72,15 +72,15 @@
> isInteger = false;
> unsigned char* s = (unsigned char*) & rkvalue;
> unsigned char* r = (unsigned char*) & f;
> - if (Swinder::isLittleEndian()) {
> +#if Q_BYTE_ORDER == Q_LITTLE_ENDIAN
> r[0] = r[1] = r[2] = r[3] = 0;
> r[4] = s[0] & 0xfc;
> r[5] = s[1]; r[6] = s[2]; r[7] = s[3];
> - } else {
> +#else
> r[0] = r[1] = r[2] = r[3] = 0;
> r[4] = s[0] & 0xfc;
> r[5] = s[1]; r[6] = s[2]; r[7] = s[3];
> - }
> +#endif
> memcpy(&f, r, 8);
> f *= factor;
> }
> @@ -1437,9 +1437,9 @@
> return;
> }
> const unsigned long ft2 = readU16(startPict + 6);
> - Q_ASSERT(ft2 == 0x0008);
> + Q_ASSERT(ft2 == 0x0008); Q_UNUSED(ft2);
> const unsigned long cb2 = readU16(startPict + 8);
> - Q_ASSERT(cb2 == 0x0002);
> + Q_ASSERT(cb2 == 0x0002); Q_UNUSED(cb2);
> const unsigned long opts2 = readU16(startPict + 10);
> //const bool fAutoPict = opts2 & 0x01;
> fDde = opts2 & 0x02; // dynamic data exchange reference?
> --- trunk/koffice/filters/kspread/excel/sidewinder/utils.h #1156411:1156412
> @@ -103,47 +103,28 @@
> ptr[9], ptr[9], ptr[10], ptr[11], ptr[12], ptr[13], ptr[14],
> ptr[15]); }
>
> -typedef double& data_64;
> -static inline void convert_64(data_64 convert)
> -{
> - register unsigned char temp;
> - register unsigned int u_int_temp;
> - temp = ((unsigned char*) & convert)[0];
> - ((unsigned char*)&convert)[0] = ((unsigned char*) & convert)[3];
> - ((unsigned char*)&convert)[3] = temp;
> - temp = ((unsigned char*) & convert)[1];
> - ((unsigned char*)&convert)[1] = ((unsigned char*) & convert)[2];
> - ((unsigned char*)&convert)[2] = temp;
> - temp = ((unsigned char*) & convert)[4];
> - ((unsigned char*)&convert)[4] = ((unsigned char*) & convert)[7];
> - ((unsigned char*)&convert)[7] = temp;
> - temp = ((unsigned char*) & convert)[5];
> - ((unsigned char*)&convert)[5] = ((unsigned char*) & convert)[6];
> - ((unsigned char*)&convert)[6] = temp;
> -
> - u_int_temp = ((unsigned int *) & convert)[0];
> - ((unsigned int *)&convert)[0] = ((unsigned int *) & convert)[1];
> - ((unsigned int *)&convert)[1] = u_int_temp;
> -}
> -
> -static inline bool isLittleEndian(void)
> -{
> - long i = 0x44332211;
> - unsigned char* a = (unsigned char*) & i;
> - return (*a == 0x11);
> -}
> -
> -
> // FIXME check that double is 64 bits
> static inline double readFloat64(const void*p)
> {
> - const double* ptr = (const double*) p;
> double num = 0.0;
> - num = *ptr;
> -
> - if (!isLittleEndian())
> - convert_64(num);
> -
> +#if Q_BYTE_ORDER == Q_LITTLE_ENDIAN
> + memcpy(&num, p, sizeof num);
> +#else
> + union {
> + double v1;
> + char v2[8];
> + } x;
> + char* b = (char*)p;
> + x.v2[0] = b[7];
> + x.v2[1] = b[6];
> + x.v2[2] = b[5];
> + x.v2[3] = b[4];
> + x.v2[4] = b[3];
> + x.v2[5] = b[2];
> + x.v2[6] = b[1];
> + x.v2[7] = b[0];
> + num = x.v1;
> +#endif
> return num;
> }
Can't you just use QtEndian?
--
Carlos Licea
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic