Advertisement
Guest User

Untitled

a guest
Jan 29th, 2020
66
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.74 KB | None | 0 0
  1. struct kod
  2. {
  3. long long int ile;
  4. long long int gdzie;
  5. long long int wartosc;
  6.  
  7. };
  8.  
  9. void lz77_compression(vector<uint8_t>& input, queue<kod>& coded)
  10. {
  11. long long int lengSlownika = 128;
  12. //long long int lengSlownika = 2048;
  13. //unsigned int lengSlownika = 16384;
  14.  
  15. kod out;
  16. long long int pos = 0; //wskaznik aktualnego polozenia
  17. long long int data_left = input.size(); //ilośc pozostałych danych do wysweitlenia
  18.  
  19. long long int bSlownik; //poczatek slownika
  20. long long int eSlownik; //koniec slownika
  21.  
  22. long long int match; //ilosc miejsc gdzie nastąpiło dopasowanie przed aktualna pozycja
  23. long long int match_old;
  24. long long int lMatch; //dlugosc dopasowania
  25. long long int lMatch_old;
  26. long long int lMatch2; //do wielokrotnego dopasowania wartosci gdy "wyjdziemy za bufor"
  27.  
  28. while (data_left > 1)
  29. {
  30. bSlownik = (pos <= lengSlownika) ? 0 : pos - lengSlownika;
  31. eSlownik = pos;
  32.  
  33. match = 0;
  34. match_old = 0;
  35. lMatch = 0;
  36. lMatch_old = 0;
  37. lMatch2 = 0;
  38.  
  39. for (long long int i = bSlownik; i < eSlownik; ++i) //przejscie po slowniku
  40. {
  41. if (input[i] == input[pos])
  42. {
  43. match = i - pos;
  44.  
  45. lMatch = lMatch2 = 0;
  46. while (input[i + lMatch2] == input[pos + lMatch])
  47. {
  48. ++lMatch; ++lMatch2;
  49. if (i + lMatch2 >= eSlownik)
  50. lMatch2 = 0;
  51.  
  52. if (pos + lMatch == input.size() - 1)
  53. break;
  54. }
  55.  
  56. if (lMatch >= lMatch_old)
  57. {
  58. match_old = match;
  59. lMatch_old = lMatch;
  60. }
  61. }
  62. }
  63.  
  64. out.ile = lMatch_old;
  65. out.gdzie = match_old;
  66. if (pos + lMatch_old < input.size());
  67. out.wartosc = input[pos + lMatch_old];
  68. coded.push(out);
  69.  
  70. data_left -= lMatch_old + 1;
  71. pos += lMatch_old + 1;
  72. }
  73. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement