1// ByteSwap.cpp 2 3#include "StdAfx.h" 4 5#include "../../../C/SwapBytes.h" 6 7#include "../../Common/MyCom.h" 8 9#include "../ICoder.h" 10 11#include "../Common/RegisterCodec.h" 12 13namespace NCompress { 14namespace NByteSwap { 15 16Z7_CLASS_IMP_COM_1(CByteSwap2, ICompressFilter) }; 17Z7_CLASS_IMP_COM_1(CByteSwap4, ICompressFilter) }; 18 19Z7_COM7F_IMF(CByteSwap2::Init()) { return S_OK; } 20 21Z7_COM7F_IMF2(UInt32, CByteSwap2::Filter(Byte *data, UInt32 size)) 22{ 23 const UInt32 kMask = 2 - 1; 24 size &= ~kMask; 25 /* 26 if ((unsigned)(ptrdiff_t)data & kMask) 27 { 28 if (size == 0) 29 return 0; 30 const Byte *end = data + (size_t)size; 31 do 32 { 33 const Byte b0 = data[0]; 34 data[0] = data[1]; 35 data[1] = b0; 36 data += kStep; 37 } 38 while (data != end); 39 } 40 else 41 */ 42 z7_SwapBytes2((UInt16 *)(void *)data, size >> 1); 43 return size; 44} 45 46 47Z7_COM7F_IMF(CByteSwap4::Init()) { return S_OK; } 48 49Z7_COM7F_IMF2(UInt32, CByteSwap4::Filter(Byte *data, UInt32 size)) 50{ 51 const UInt32 kMask = 4 - 1; 52 size &= ~kMask; 53 /* 54 if ((unsigned)(ptrdiff_t)data & kMask) 55 { 56 if (size == 0) 57 return 0; 58 const Byte *end = data + (size_t)size; 59 do 60 { 61 const Byte b0 = data[0]; 62 const Byte b1 = data[1]; 63 data[0] = data[3]; 64 data[1] = data[2]; 65 data[2] = b1; 66 data[3] = b0; 67 data += kStep; 68 } 69 while (data != end); 70 } 71 else 72 */ 73 z7_SwapBytes4((UInt32 *)(void *)data, size >> 2); 74 return size; 75} 76 77static struct C_SwapBytesPrepare { C_SwapBytesPrepare() { z7_SwapBytesPrepare(); } } g_SwapBytesPrepare; 78 79 80REGISTER_FILTER_CREATE(CreateFilter2, CByteSwap2()) 81REGISTER_FILTER_CREATE(CreateFilter4, CByteSwap4()) 82 83REGISTER_CODECS_VAR 84{ 85 REGISTER_FILTER_ITEM(CreateFilter2, CreateFilter2, 0x20302, "Swap2"), 86 REGISTER_FILTER_ITEM(CreateFilter4, CreateFilter4, 0x20304, "Swap4"), 87}; 88 89REGISTER_CODECS(ByteSwap) 90 91}} 92