Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- vector<char> Compress(vector<char> a, int size) {
- int pointer = 0, counter = 0;
- vector<char> temp;
- while (pointer < size - 1) {
- if (a[pointer] != a[pointer + 1]) {
- while (pointer + counter < size - 1 && a[pointer + counter] != a[pointer + counter + 1]) {
- counter++;
- if (counter == 128)
- break;
- }
- temp.push_back(counter);
- if (pointer + counter < size - 1) {
- for (int i = 0; i < counter; i++) {
- temp.push_back(a[pointer + i]);
- }
- }
- else {
- for (int i = 0; i < counter + 1; i++) {
- temp.push_back(a[pointer + i]);
- }
- counter++;
- }
- pointer += counter;
- counter = 0;
- }
- else {
- while (pointer + counter < size - 1 && a[pointer + counter] == a[pointer + counter + 1]) {
- counter++;
- if (counter == 127)
- break;
- }
- if (pointer + counter >= size - 1) {
- counter++;
- }
- temp.push_back(-counter);
- temp.push_back(a[pointer]);
- pointer += counter;
- counter = 0;
- }
- }
- return temp;
- }
- vector<char> Decompress(vector<char> a, int size) {
- int pointer = 0, counter = 0;
- vector<char> temp;
- while (pointer < size - 1) {
- counter = a[pointer];
- if (counter < 0) {
- counter = -counter;
- for (int i = 0; i < counter; i++) {
- temp.push_back(a[pointer + 1]);
- }
- pointer += 2;
- }
- else {
- for (int i = 0; i < counter; i++) {
- temp.push_back(a[pointer + i + 1]);
- }
- pointer += counter;
- pointer++;
- }
- }
- temp.push_back(a[pointer]);
- return temp;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement