File tree Expand file tree Collapse file tree
Expand file tree Collapse file tree Original file line number Diff line number Diff line change @@ -122,27 +122,19 @@ bool RLT::forward(SliceArray<kanzi::byte>& input, SliceArray<kanzi::byte>& outpu
122122 // Main loop
123123 while (true ) {
124124 if (prev == src[srcIdx]) {
125- const uint32 v = 0x01010101 * uint32 (prev);
125+ const uint32 v = 0x01010101u * uint32 (prev);
126+ const uint32 diff = uint32 (LittleEndian::readInt32 (&src[srcIdx])) ^ v;
126127
127- if (KANZI_MEM_EQ4 ( reinterpret_cast < const kanzi::byte*>(&v), &src[srcIdx]) ) {
128+ if (diff == 0 ) {
128129 srcIdx += 4 ; run += 4 ;
129130
130131 if ((run < MAX_RUN4 ) && (srcIdx < srcEnd4))
131132 continue ;
132133 }
133134 else {
134- srcIdx++; run++;
135-
136- if (prev == src[srcIdx]) {
137- srcIdx++; run++;
138-
139- if (prev == src[srcIdx]) {
140- srcIdx++; run++;
141-
142- if ((run < MAX_RUN4 ) && (srcIdx < srcEnd4))
143- continue ;
144- }
145- }
135+ const int n = Global::trailingZeros (diff) >> 3 ;
136+ srcIdx += n;
137+ run += n;
146138 }
147139 }
148140
You can’t perform that action at this time.
0 commit comments