[prev in list] [next in list] [prev in thread] [next in thread] 

List:       kde-commits
Subject:    kdesupport/strigi/src/streams
From:       Jos van den Oever <jos () vandenoever ! info>
Date:       2007-03-15 19:59:41
Message-ID: 1173988781.161862.5616.nullmailer () svn ! kde ! org
[Download RAW message or body]

SVN commit 642907 by vandenoever:

Add methods for reading big and little endian binary fields.

 M  +66 -0     textutils.cpp  
 M  +53 -0     textutils.h  


--- trunk/kdesupport/strigi/src/streams/textutils.cpp #642906:642907
@@ -133,4 +133,70 @@
     }
 }
 
+#define swap16(x) \
+      ((((x) >> 8) & 0xff) | (((x) & 0xff) << 8))
+ 
+#define swap32(x) \
+      ((((x) & 0xff000000) >> 24) | (((x) & 0x00ff0000) >>  8) \
+     | (((x) & 0x0000ff00) <<  8) | (((x) & 0x000000ff) << 24))
+#define swap64(x) \
+      ((((x) & 0xff00000000000000ull) >> 56)  \
+     | (((x) & 0x00ff000000000000ull) >> 40)  \
+     | (((x) & 0x0000ff0000000000ull) >> 24)  \
+     | (((x) & 0x000000ff00000000ull) >> 8)   \
+     | (((x) & 0x00000000ff000000ull) << 8)   \
+     | (((x) & 0x0000000000ff0000ull) << 24)  \
+     | (((x) & 0x000000000000ff00ull) << 40)  \
+     | (((x) & 0x00000000000000ffull) << 56))
 
+#ifdef __BIG_ENDIAN__
+int16_t
+readLittleEndianInt16(const char* c) {
+    return swap16(*reinterpret_cast<const int16_t*>(c));
+}
+uint16_t
+readLittleEndianUInt16(const char* c) {
+    return swap16(*reinterpret_cast<const uint16_t*>(c));
+}
+int32_t
+readLittleEndianInt32(const char* c) {
+    return swap32(*reinterpret_cast<const int32_t*>(c));
+}
+uint32_t
+readLittleEndianUInt32(const char* c) {
+    return swap32(*reinterpret_cast<const uint32_t*>(c));
+}
+int64_t
+readLittleEndianInt64(const char* c) {
+    return swap64(*reinterpret_cast<const int64_t*>(c));
+}
+uint64_t
+readLittleEndianUInt64(const char* c) {
+    return swap64(*reinterpret_cast<const uint64_t*>(c));
+}
+#else
+int16_t
+readBigEndianInt16(const char* c) {
+    return swap16(*reinterpret_cast<const int16_t*>(c));
+}
+uint16_t
+readBigEndianUInt16(const char* c) {
+    return swap16(*reinterpret_cast<const uint16_t*>(c));
+}
+int32_t
+readBigEndianInt32(const char* c) {
+    return swap32(*reinterpret_cast<const int32_t*>(c));
+}
+uint32_t
+readBigEndianUInt32(const char* c) {
+    return swap32(*reinterpret_cast<const uint32_t*>(c));
+}
+int64_t
+readBigEndianInt64(const char* c) {
+    return swap64(*reinterpret_cast<const int64_t*>(c));
+}
+uint64_t
+readBigEndianUInt64(const char* c) {
+    return swap64(*reinterpret_cast<const uint64_t*>(c));
+}
+#endif
--- trunk/kdesupport/strigi/src/streams/textutils.h #642906:642907
@@ -35,6 +35,59 @@
 
 STREAMS_EXPORT void convertNewLines(char* p);
 
+#ifdef __BIG_ENDIAN__
+STREAMS_EXPORT int16_t  readBigEndianInt16(const char* c) {
+    return *reinterpret_cast<const int16_t*>(c);
 }
+STREAMS_EXPORT uint16_t readBigEndianUInt16(const char* c) {
+    return *reinterpret_cast<const uint16_t*>(c);
+}
+STREAMS_EXPORT int32_t  readBigEndianInt32(const char* c) {
+    return *reinterpret_cast<const int32_t*>(c);
+}
+STREAMS_EXPORT uint32_t readBigEndianUInt32(const char* c) {
+    return *reinterpret_cast<const uint32_t*>(c);
+}
+STREAMS_EXPORT int64_t  readBigEndianInt64(const char* c) {
+    return *reinterpret_cast<const int64_t*>(c);
+}
+STREAMS_EXPORT uint64_t readBigEndianUInt64(const char* c) {
+    return *reinterpret_cast<const uint64_t*>(c);
+}
+STREAMS_EXPORT int16_t  readLittleEndianInt16(const char* c);
+STREAMS_EXPORT uint16_t readLittleEndianUInt16(const char* c);
+STREAMS_EXPORT int32_t  readLittleEndianInt32(const char* c);
+STREAMS_EXPORT uint32_t readLittleEndianUInt32(const char* c);
+STREAMS_EXPORT int64_t  readLittleEndianInt64(const char* c);
+STREAMS_EXPORT uint64_t readLittleEndianUInt64(const char* c);
+#else
+STREAMS_EXPORT int16_t  readLittleEndianInt16(const char* c) {
+    return *reinterpret_cast<const int16_t*>(c);
+}
+STREAMS_EXPORT uint16_t readLittleEndianUInt16(const char* c) {
+    return *reinterpret_cast<const uint16_t*>(c);
+}
+STREAMS_EXPORT int32_t  readLittleEndianInt32(const char* c) {
+    return *reinterpret_cast<const int32_t*>(c);
+}
+STREAMS_EXPORT uint32_t readLittleEndianUInt32(const char* c) {
+    return *reinterpret_cast<const uint32_t*>(c);
+}
+STREAMS_EXPORT int64_t  readLittleEndianInt64(const char* c) {
+    return *reinterpret_cast<const int64_t*>(c);
+}
+STREAMS_EXPORT uint64_t readLittleEndianUInt64(const char* c) {
+    return *reinterpret_cast<const uint64_t*>(c);
+}
+STREAMS_EXPORT int16_t  readBigEndianInt16(const char* c);
+STREAMS_EXPORT uint16_t readBigEndianUInt16(const char* c);
+STREAMS_EXPORT int32_t  readBigEndianInt32(const char* c);
+STREAMS_EXPORT uint32_t readBigEndianUInt32(const char* c);
+STREAMS_EXPORT int64_t  readBigEndianInt64(const char* c);
+STREAMS_EXPORT uint64_t readBigEndianUInt64(const char* c);
+#endif
 
+
+}
+
 #endif
[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic