Original Post
/*
template<typename T>
struct CRLE
{
T data;
unsigned char byte;
};
*/
template<typename T>
vector<CRLE<T>> RLE(const vector<T> &vec)
{
CRLE<T> temp;
vector<CRLE<T>> result;
int freq = 1;
int i = 0, j = 0;
int end = vec.size() - 2;
for(i=0;i<end;i++)
{
temp.data = vec;
j = i + 1;
while((j < vec.size() )&& (vec[j] == temp.data))
{
freq++;
j++;
if(freq == 255)
break;
}
temp.byte = static_cast<unsigned char> (freq);
result.push_back(temp);
i = j;
freq = 1;
}
return result;
compressed = RLE<int>(fileData);
for(x =0;x<compressed.size();x++)
{
j = x;
if(compressed[x].byte > unsigned char(1))
file<<static_cast<unsigned char> (0)<<compressed[x].byte<<compressed[x].data;
else
{
while(compressed[j].byte == 1)
{
j++;
if(j >= compressed.size())
{
j--;
break;
}
}
file<<j+1;
n = j;
while(j <= x)
{
file<<compressed[x-j].data;
j--;
}
x+=n;
}
}
file.close();
vector<int> fileArray;
int mSize = sizeof(int);
ifstream input;
ofstream output;
output.open("deltaX.bmp");
size = get_file_size("delta.txt");
cout<<"file size is "<<size<<endl;
input.open("delta.txt");
while(size >=0 )
{
input>>readD;
size--;
if(readD == 0)
{
input>>readD;
size--;
for(x = static_cast<int> (readD); x > 0 ; x--)
{
input>>n;
size-=mSize;
fileArray.push_back(n);
if(size <= 0)
break;
}
}
else
{
for(x = static_cast<int> (readD); x > 0 ; x--)
{
input>>n;
size-=mSize;
fileArray.push_back(n);
if(size <= 0)
break;
}
}
if(size <= 0)
break;
}
cout<<"array size "<<fileArray.size()<<endl;
for(x = 0;x<fileArray.size();x++)
output<<fileArray[x];