[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