Speed up LZSS encoding
authorNick Downing <nick@ndcode.org>
Fri, 17 Jun 2022 13:33:50 +0000 (23:33 +1000)
committerNick Downing <nick@ndcode.org>
Fri, 17 Jun 2022 13:37:58 +0000 (23:37 +1000)
loader/lzss_encode.py

index ddea002..dfbf2c7 100755 (executable)
@@ -64,13 +64,19 @@ while i >= 0:
     pair = bin[i - 1], bin[i]
     j = heads.get(pair, -1)
     while j != -1 and j - i <= MAX_DIST:
-      assert bin[i] == bin[j]
-      assert bin[i - 1] == bin[j - 1]
-      k = 2
-      while k < MAX_LEN and i - k >= 1 and bin[i - k] == bin[j - k]:
-        k += 1
-      if k > _len:
-        _len = k
+      #assert bin[i - 1:i + 1] == bin[j - 1:j + 1]
+      if (
+        _len < MAX_LEN and
+          i - _len >= 0 and
+          bin[i - _len:i - 1] == bin[j - _len:j - 1]
+      ):
+        _len += 1
+        while (
+          _len < MAX_LEN and
+            i - _len >= 0 and
+            bin[i - _len] == bin[j - _len]
+        ):
+          _len += 1
         dist = j - i
       j = links[j]
   lzss.append((_len, dist))