xref: /aosp_15_r20/external/lzma/CPP/7zip/Compress/ByteSwap.cpp (revision f6dc9357d832569d4d1f5d24eacdb3935a1ae8e6)
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 
13 namespace NCompress {
14 namespace NByteSwap {
15 
16 Z7_CLASS_IMP_COM_1(CByteSwap2, ICompressFilter) };
17 Z7_CLASS_IMP_COM_1(CByteSwap4, ICompressFilter) };
18 
Z7_COM7F_IMF(CByteSwap2::Init ())19 Z7_COM7F_IMF(CByteSwap2::Init()) { return S_OK; }
20 
Z7_COM7F_IMF2(UInt32,CByteSwap2::Filter (Byte * data,UInt32 size))21 Z7_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 
Z7_COM7F_IMF(CByteSwap4::Init ())47 Z7_COM7F_IMF(CByteSwap4::Init()) { return S_OK; }
48 
Z7_COM7F_IMF2(UInt32,CByteSwap4::Filter (Byte * data,UInt32 size))49 Z7_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 
C_SwapBytesPrepareC_SwapBytesPrepare77 static struct C_SwapBytesPrepare { C_SwapBytesPrepare() { z7_SwapBytesPrepare(); } } g_SwapBytesPrepare;
78 
79 
REGISTER_FILTER_CREATE(CreateFilter2,CByteSwap2 ())80 REGISTER_FILTER_CREATE(CreateFilter2, CByteSwap2())
81 REGISTER_FILTER_CREATE(CreateFilter4, CByteSwap4())
82 
83 REGISTER_CODECS_VAR
84 {
85   REGISTER_FILTER_ITEM(CreateFilter2, CreateFilter2, 0x20302, "Swap2"),
86   REGISTER_FILTER_ITEM(CreateFilter4, CreateFilter4, 0x20304, "Swap4"),
87 };
88 
89 REGISTER_CODECS(ByteSwap)
90 
91 }}
92