zlib_helpers.nim 1.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041
  1. import zip/zlib
  2. proc compress*(source: string): string =
  3. var
  4. sourcelen = source.len
  5. destlen = sourcelen + (sourcelen.float * 0.1).int + 16
  6. result = ""
  7. result.setLen destLen
  8. var res = zlib.compress(cstring(result), addr destLen, cstring(source), sourceLen)
  9. if res != Z_OK:
  10. echo "Error occurred: ", res
  11. elif destLen < result.len:
  12. result.setLen(destLen)
  13. proc uncompress*(source: string, destLen: var int): string =
  14. result = ""
  15. result.setLen destLen
  16. var res = zlib.uncompress(cstring(result), addr destLen, cstring(source), source.len)
  17. if res != Z_OK:
  18. echo "Error occurred: ", res
  19. when true:
  20. import strutils
  21. var r = compress("Hello")
  22. echo repr(r)
  23. var ln = "Hello".len
  24. var rr = uncompress(r, ln)
  25. echo repr(rr)
  26. assert rr == "Hello"
  27. proc `*`(a: string; b: int): string {.inline.} = result = repeat(a, b)
  28. var s = "yo dude sup bruh homie" * 50
  29. r = compress(s)
  30. echo s.len, " -> ", r.len
  31. ln = s.len
  32. rr = uncompress(r, ln)
  33. echo r.len, " -> ", rr.len
  34. assert rr == s