int main(int argc, char ** argv) { if(argc!=4) { cout << "Checks the array class generating <length> elements between 0 and <maxv> using <seed> as seed for the numbers generation" << endl << endl; cout << "usage: " << argv[0] << " <seed> <length> <maxv>" << endl; return 0; } srand(transform(string(argv[1]))); uint len = transform(string(argv[2])); uint maxv = transform(string(argv[3])); //cout << "maxv = " << maxv << endl; //cout << "len = " << len << endl; Array a(len,maxv); for(uint i=0;i<len;i++) { a.setField(i,rand()%maxv); cout << "s[" << i << "]=" << a[i] << endl; } HuffmanCoder * hc = new HuffmanCoder(a); cout << "Max length: " << hc->maxLength() << endl; for(size_t i=0;i<len;i++) { size_t ptr = 0; uint stream[10]; cout << "coding " << a[i] << ": "; ptr = hc->encode(a[i],stream,ptr); for(size_t k=0;k<ptr;k++) cout << bitget(stream,k); cout << endl; } return 0; }
int _tmain(int argc, _TCHAR* argv[]) { HuffmanCoder H; //string lorem = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa \ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa \ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa \ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa \ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa \ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa \ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa \ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa \ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa \ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa \ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa \ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa \ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa \ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa \ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa \ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa \ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa \ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa \ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"; //string lorem = "Lorem ipsum dolor sit amet, \ consectetur adipiscing elit. \ Videamus animi partes, \ quarum est conspectus illustrior; \ Quae cum essent dicta, \ finem fecimus et ambulandi et disputandi. \ Ad corpus diceres pertinere, \ sed ea, quae dixi, ad corpusne refers? \ Duo Reges: constructio interrete. \ Expectoque quid ad id, \ quod quaerebam, respondeas. \ Nunc ita separantur, ut disiuncta sint, \ quo nihil potest esse perversius. \ At miser, si in flagitiosa et \ vitiosa vita afflueret voluptatibus."; string lorem; ifstream myfile("C:\\Users\\Sam\\Desktop\\Compressor\\Genesis.txt"); for(int i = 0; myfile && i<16000; i++) { lorem += myfile.get(); } myfile.close(); cout << "read" << endl; string coded = H.encode(lorem); cout << lorem.length()*8 << "->" << coded.length() << endl; PAUSE return 0; }
void EncodeBuffer::encodeCachedValue(unsigned int value, unsigned int numBits, PixelCache & cache, HuffmanCoder & escapeCoder0, HuffmanCoder & escapeCoder1) { unsigned int index; DBG("encodePixelCache.\n"); if (cache.lookup(value, index)) { encodeIndex(index); } else { encodeEscapeIndex(); // To transmit the value, use run-length coding with the static // Huffman code implemented by the supplied "escapeCoder" object //X encodeValue(value, numBits, numBits); unsigned int srcMask = 0x1; unsigned int pixelValue = ((value & srcMask) ? 1 : 0); encodeDirect(pixelValue, 1); for (unsigned int x = 0; x < numBits;) { unsigned int runStart = x; if (pixelValue) { while (x < numBits) { if (!(value & srcMask)) break; srcMask <<= 1; x++; } } else { while (x < numBits) { if (value & srcMask) break; srcMask <<= 1; x++; } } unsigned int runLength = x - runStart; if (pixelValue) { escapeCoder1.encode(runLength - 1, *this); pixelValue = 0; } else { escapeCoder0.encode(runLength - 1, *this); pixelValue = 1; } } } }