Octane v1.01.20 - The Open Compression Toolkit for C++ | http://octane.sourceforge.net/ |
#include <compressor.hpp>
Inheritance diagram for OctaneCompressor:
Definition at line 45 of file compressor.hpp.
Public Member Functions | |
OctaneCompressor (bool registerme=false) | |
constructor | |
virtual | ~OctaneCompressor () |
destructor | |
virtual std::string | GetName () |
provide a unique name for the coder, used in some cases to automatically register the object with a manager | |
virtual std::string | GetDescription () |
optionally provide a longer (maybe 20-60 characters) description | |
virtual std::string | GetHelpInformation () |
optionally provide more information about the object on request for help | |
virtual unsigned short int | GetCompressorStateFileGUID () |
Return a universally unique unsigned-short-int id# for a predefined dictionary id file. | |
virtual OctaneCompressor * | MakeCompressorInstantiation ()=0 |
Instantiate a compressor from this class (like a factory). | |
virtual std::string | GetClassName () |
Get the assigned name of an instantiated compressor. | |
std::string | GetInstantiatedName () |
Get the user-set instantiated object name for this compressor. | |
unsigned short int | GetGuid () |
Get guid. | |
void | SetInstantiatedName (std::string val) |
Set the user-set instantiated object name for this compressor. | |
void | SetInfo (std::string compressorname, unsigned short int compressorguid) |
Set details (compressor name and guid) from file. | |
virtual void | ResetState () |
Reset the state of the compressor to its initial state. | |
virtual void | SynchronizeStateForNewStream () |
Synchronize state for a new stream - this will be called each time before beginning a new parsing stream. | |
virtual bool | PrepareForCompression () |
Prepare for parsing mode, this will be called parsing begins. | |
virtual void | SetupAnyDefaultParser () |
Some compressors contains parsers which begin ready to parse, without any 'training'. | |
virtual bool | IsReadyToCompress () |
is the compressor ready to compress? Normally this is false until a dictionary is built or loaded. | |
bool | Compress (bitreader &from, bitwriter &to, bool needtowriteheader, bool savedecompressstateinfo) |
The Compress function is an API wrapper around a protected function which does the actual compression, in order to perform some timing/stats gathering functions. | |
bool | Decompress (bitreader &from, bitwriter &to, bool needtoreadheader) |
The Decompress function is an API wrapper around a protected function which does the actual compression, in order to perform some timing/stats gathering functions. | |
bool | CreateSymbolsAndModelsUsingStream (bitreader &from) |
Wrappers around the actual calls to DoProtected.., in order to perform some timing and space measurement. | |
bool | Save (bitwriter &to, bool fortempdecompressiononly) |
Wrappers around the actual calls to DoProtected.., in order to perform some timing and space measurement. | |
bool | Load (bitreader &from) |
Normally the compressor manager loads the header of a saved file and dynamically instantiates a compressor, but we provide this function for manually calling load on an already instantiated compressor. | |
bool | LoadState (bitreader &from) |
Wrappers around the actual calls to DoProtected.., in order to perform some timing and space measurement. | |
void | ResetStatistics () |
Reset the cumulative statistics tracking. | |
unsigned int | GetStatistics_Cumulative_Compression_BytesRead () |
cumulative stats, can be reset with ResetCumulativeStatistics() | |
unsigned int | GetStatistics_Cumulative_Decompression_BytesRead () |
cumulative stats, can be reset with ResetCumulativeStatistics() | |
unsigned int | GetStatistics_Cumulative_Compression_BytesWritten () |
cumulative stats, can be reset with ResetCumulativeStatistics() | |
unsigned int | GetStatistics_Cumulative_Decompression_BytesWritten () |
cumulative stats, can be reset with ResetCumulativeStatistics() | |
float | GetStatistics_Cumulative_Compression_Bitrate () |
cumulative stats, can be reset with ResetCumulativeStatistics(); bit rate is in bits per bytes. | |
float | GetStatistics_Cumulative_Decompression_Bitrate () |
cumulative stats, can be reset with ResetCumulativeStatistics(); bit rate is in bits per bytes. | |
float | GetStatistics_Cumulative_Compression_Ratio () |
cumulative stats, can be reset with ResetCumulativeStatistics(); bit ratio is decompressedsize/compressedsize. | |
float | GetStatistics_Cumulative_Decompression_Ratio () |
cumulative stats, can be reset with ResetCumulativeStatistics(); bit ratio is decompressedsize/compressedsize. | |
float | GetStatistics_Cumulative_Compression_ExecutionTime () |
cumulative stats, can be reset with ResetCumulativeStatistics(); time is in seconds. | |
float | GetStatistics_Cumulative_Decompression_ExecutionTime () |
cumulative stats, can be reset with ResetCumulativeStatistics(); time is in seconds. | |
float | GetStatistics_Cumulative_ExecutionTime () |
cumulative stats, can be reset with ResetCumulativeStatistics(); this returns the sum of compression+decompression times; time is in seconds. | |
int | GetStatistics_Cumulative_ErrorCount () |
cumulative stats, can be reset with ResetCumulativeStatistics(); number of errors since last reset. | |
unsigned int | GetStatistics_LastOperation_Compression_BytesRead () |
returns the statistics for the last operation. | |
unsigned int | GetStatistics_LastOperation_Decompression_BytesRead () |
returns the statistics for the last operation. | |
unsigned int | GetStatistics_LastOperation_Compression_BytesWritten () |
returns the statistics for the last operation. | |
unsigned int | GetStatistics_LastOperation_Decompression_BytesWritten () |
returns the statistics for the last operation. | |
unsigned int | GetStatistics_LastOperation_State_BytesRead () |
returns the statistics for the last operation on state data. | |
unsigned int | GetStatistics_LastOperation_State_BytesWritten () |
returns the statistics for the last operation on state data. | |
float | GetStatistics_LastOperation_Compression_Bitrate () |
returns the statistics for the last operation; bit rate is in bits per bytes. | |
float | GetStatistics_LastOperation_Decompression_Bitrate () |
returns the statistics for the last operation; bit rate is in bits per bytes. | |
float | GetStatistics_LastOperation_Compression_Ratio () |
returns the statistics for the last operation; bit ratio is decompressedsize/compressedsize. | |
float | GetStatistics_LastOperation_Decompression_Ratio () |
returns the statistics for the last operation; bit ratio is decompressedsize/compressedsize. | |
float | GetStatistics_LastOperation_Compression_ExecutionTime () |
returns the statistics for the last operation; time is in seconds. | |
float | GetStatistics_LastOperation_Decompression_ExecutionTime () |
returns the statistics for the last operation; time is in seconds. | |
float | GetStatistics_LastOperation_ExecutionTime () |
returns the statistics for the last operation; this returns the sum of compression+decompression times; time is in seconds. | |
float | GetStatistics_LastOperation_State_ExecutionTime () |
returns the statistics for the last state operation; time is in seconds. | |
int | GetStatistics_LastOperation_ErrorCount () |
returns number of errors during the last operation. | |
void | Add_LastOperation_Compression_BytesRead (int val) |
kludge fixup to manually adjust counts (useful for when we read a header through a separate call) | |
void | Add_LastOperation_Compression_BytesWritten (int val) |
kludge fixup to manually adjust counts (useful for when we read a header through a separate call) | |
void | Add_LastOperation_Decompression_BytesRead (int val) |
kludge fixup to manually adjust counts (useful for when we read a header through a separate call) | |
void | Add_LastOperation_Decompression_BytesWritten (int val) |
kludge fixup to manually adjust counts (useful for when we read a header through a separate call) | |
bool | SaveCompressionHeader (bitwriter &to, bool savedecompressstateinfo) |
Save header info for a compression stream (either supershort 1 byte, or long state info). | |
bool | LoadCompressionHeader (bitreader &from) |
Load header info for a compression stream (either supershort 1 byte, or long state info). | |
bool | SaveGUID (bitwriter &to) |
Save GUID field. | |
Static Public Member Functions | |
int | LoadGUID (bitreader &from) |
Load GUID field. | |
Protected Member Functions | |
virtual bool | DoProtectedCompress (bitreader &from, bitwriter &to)=0 |
This is the member function which does the actual compression, and this is the function that should be subclasses by derived classes. | |
virtual bool | DoProtectedDecompress (bitreader &from, bitwriter &to)=0 |
This is the member function which does the actual decompression, and this is the function that should be subclasses by derived classes. | |
virtual bool | DoProtectedCreateSymbolsAndModelsUsingStream (bitreader &from) |
This is the member function which does the actual training on an input in order to generate parsers/modelers/coders, and this is the function that should be subclasses by derived classes. | |
virtual bool | DoProtectedSaveState (bitwriter &to, bool fortempdecompressiononly) |
This is the member function which does the actual saving of state, and this is the function that should be subclasses by derived classes. | |
virtual bool | DoProtectedLoadState (bitreader &from) |
This is the member function which does the actual loading of state, and this is the function that should be subclasses by derived classes. | |
Protected Attributes | |
std::string | instantiatedname |
name of instantiated instance of this class | |
unsigned short int | guid |
unique short id for a compressor |
|
provide a unique name for the coder, used in some cases to automatically register the object with a manager
Reimplemented from OctaneClass. Definition at line 55 of file compressor.hpp. References GetInstantiatedName().
00055 {return GetInstantiatedName();}; |
|
optionally provide a longer (maybe 20-60 characters) description
Reimplemented from OctaneClass. Reimplemented in mtfllCompressor, SampleCompressor, SampleStatCompressor, OctaneCompressor_Statistical, SubStrHuffCompressor, and zleCompressor. Definition at line 56 of file compressor.hpp. Referenced by OctaneTester::ListCompressors(), and OctaneTester::ShowHelp().
00056 {return "Base Compressor";}; |
|
optionally provide more information about the object on request for help
Reimplemented from OctaneClass. Reimplemented in OctaneCompressor_Statistical. Definition at line 57 of file compressor.hpp.
00057 {return "";}; |
|
Return a universally unique unsigned-short-int id# for a predefined dictionary id file. This number is used to very compactly identify a preset compressor+statefile(dictionary) for use when transmission bandwidth is at a premium, such as in an online chat program with very short transmission (<<80 characters per transmission).
Definition at line 62 of file compressor.hpp. References guid. Referenced by OctaneTester::ListCompressors().
00062 {return guid;}; |
|
Prepare for parsing mode, this will be called parsing begins.
Reimplemented in OctaneCompressor_Statistical. Definition at line 90 of file compressor.hpp.
00090 {return true;}; |
|
Some compressors contains parsers which begin ready to parse, without any 'training'. Here is where such a parser should be initialized. Reimplemented in OctaneCompressor_Statistical. Definition at line 93 of file compressor.hpp.
00093 {;}; |
|
is the compressor ready to compress? Normally this is false until a dictionary is built or loaded.
Reimplemented in SampleCompressor, and OctaneCompressor_Statistical. Definition at line 96 of file compressor.hpp. Referenced by OctaneTester::CheckCompressorReady().
00096 {return true;}; |
|
The Decompress function is an API wrapper around a protected function which does the actual compression, in order to perform some timing/stats gathering functions.
Definition at line 77 of file compressor.cpp. References bitwriter::align_byte(), DoProtectedDecompress(), LoadCompressionHeader(), OctaneTimer::start(), OctaneTimer::stop(), bitwriter::tell_byte(), and bitreader::tell_byte(). Referenced by OctaneTester::RunCommand_Decompress(), and OctaneTester::RunCommand_TestString().
00078 { 00079 // just wrap the calls to derived classes 00080 bool bretv; 00081 OctaneTimer octanetimer; 00082 size_t fromstart,tostart; 00083 00084 // do decompression and measure it 00085 octanetimer.start(); 00086 fromstart=from.tell_byte(); 00087 tostart=to.tell_byte(); 00088 00089 if (needtoreadheader) 00090 { 00091 // this decompress could be called before the header is read, or after it. 00092 // if the header is already read by caller, we wont try to re-read it here. 00093 // if it hasn't been read yet, we can read it here, and it MUST match our current compressor. 00094 // load header - this is either a supershort GUID only (usually only 1 byte), or the complete stateinfo for the compressor 00095 bretv=LoadCompressionHeader(from); 00096 } 00097 00098 // do decompression 00099 bretv=DoProtectedDecompress(from,to); 00100 00101 // align output bitwriter (this must be performed when we finish) 00102 to.align_byte(); 00103 00104 // finish measurements 00105 LastOperation_Decompression_ExecutionTime=octanetimer.stop(); 00106 Cumulative_Decompression_ExecutionTime+=LastOperation_Decompression_ExecutionTime; 00107 LastOperation_Decompression_BytesRead=from.tell_byte()-fromstart; 00108 Cumulative_Decompression_BytesRead+=LastOperation_Decompression_BytesRead; 00109 LastOperation_Decompression_BytesWritten=to.tell_byte()-tostart; 00110 Cumulative_Decompression_BytesWritten+=LastOperation_Decompression_BytesWritten; 00111 00112 // update error counts 00113 if (!bretv) 00114 { 00115 ++Cumulative_ErrorCount; 00116 ++LastOperation_ErrorCount; 00117 } 00118 00119 // return success 00120 return bretv; 00121 } |
|
Wrappers around the actual calls to DoProtected.., in order to perform some timing and space measurement. This function also saves HEADER info which identifies the compressor class, which is read by CompressorManager Definition at line 151 of file compressor.cpp. References DoProtectedSaveState(), GetClassName(), GetInstantiatedName(), guid, bitwriter::put(), OctaneTimer::start(), OctaneTimer::stop(), and bitwriter::tell_byte(). Referenced by OctaneTester::RunCommand_SaveCompressor(), and SaveCompressionHeader().
00152 { 00153 // wrap call to save state and measure it 00154 bool bretv; 00155 size_t tostart; 00156 OctaneTimer octanetimer; 00157 00158 // do state save and measure it 00159 octanetimer.start(); 00160 tostart=to.tell_byte(); 00161 00162 // save compressor header (see OctaneCompressor::Save() for where this is written) 00163 string tempstring=GetClassName(); 00164 to.put(tempstring); 00165 tempstring=GetInstantiatedName(); 00166 to.put(tempstring); 00167 to.put(guid); 00168 00169 // now call derived protected method to save state 00170 bretv=DoProtectedSaveState(to,fortempdecompressiononly); 00171 00172 // measure result 00173 LastOperation_State_BytesWritten=to.tell_byte()-tostart; 00174 LastOperation_State_ExecutionTime=octanetimer.stop(); 00175 00176 // update error counts 00177 if (!bretv) 00178 { 00179 ++Cumulative_ErrorCount; 00180 ++LastOperation_ErrorCount; 00181 } 00182 00183 // return success 00184 return bretv; 00185 } |
|
Normally the compressor manager loads the header of a saved file and dynamically instantiates a compressor, but we provide this function for manually calling load on an already instantiated compressor. It reads the header, verifies it is for proper class, and then calls LoadState(). Definition at line 188 of file compressor.cpp. References bitreader::get(), GetClassName(), instantiatedname, and LoadState(). Referenced by LoadCompressionHeader().
00189 { 00190 // Normally the compressor manager loads the header of a saved file and dynamically instantiates a compressor, 00191 // but we provide this function for manually calling load on an already instantiated compressor. 00192 // It reads the header, verifies it is for proper class, and then calls LoadState(). 00193 bool bretv; 00194 00195 // read standard compressor header (see OctaneCompressor::Save() for where this is written) 00196 string compressorclassname; 00197 string compressorname; 00198 short int compressorguid; 00199 from.get(compressorclassname); 00200 from.get(compressorname); 00201 from.get(compressorguid); 00202 00203 if (compressorclassname!=GetClassName()) 00204 { 00205 cout << "Error: class name from file does not match compressor class name being read; load aborted."<<endl; 00206 return false; 00207 } 00208 00209 // set name but not guid 00210 if (instantiatedname=="") 00211 instantiatedname=compressorname; 00212 00213 // now load state 00214 bretv=LoadState(from); 00215 return bretv; 00216 } |
|
This is the member function which does the actual compression, and this is the function that should be subclasses by derived classes. It is wrapped by the public API call Compress() which performs some measurements on compression speed and streamsize.
Implemented in mtfllCompressor, SampleCompressor, OctaneCompressor_Statistical, and zleCompressor. Referenced by Compress(). |
|
This is the member function which does the actual decompression, and this is the function that should be subclasses by derived classes. It is wrapped by the public API call Decompress() which performs some measurements on decompression speed and streamsize.
Implemented in mtfllCompressor, SampleCompressor, OctaneCompressor_Statistical, and zleCompressor. Referenced by Decompress(). |
|
This is the member function which does the actual training on an input in order to generate parsers/modelers/coders, and this is the function that should be subclasses by derived classes. It is wrapped by the public API call CreateSymbolsAndModelsUsingStream() which performs some measurements on speed and streamsize.
Reimplemented in SampleCompressor, and OctaneCompressor_Statistical. Definition at line 142 of file compressor.hpp. Referenced by CreateSymbolsAndModelsUsingStream().
00142 {return true;}; |
|
This is the member function which does the actual saving of state, and this is the function that should be subclasses by derived classes. It is wrapped by the public API call SaveState() which performs some measurements on speed and streamsize.
Reimplemented from OctaneClass. Reimplemented in SampleCompressor, and OctaneCompressor_Statistical. Definition at line 148 of file compressor.hpp. Referenced by Save().
00148 {return true;}; |
|
This is the member function which does the actual loading of state, and this is the function that should be subclasses by derived classes. It is wrapped by the public API call LoadState() which performs some measurements on speed and streamsize.
Reimplemented from OctaneClass. Reimplemented in SampleCompressor, and OctaneCompressor_Statistical. Definition at line 154 of file compressor.hpp. Referenced by LoadState().
00154 {return true;}; |
|
returns number of errors during the last operation.
Definition at line 217 of file compressor.hpp.
00217 {return LastOperation_ErrorCount;};
|
|
Save header info for a compression stream (either supershort 1 byte, or long state info).
Definition at line 283 of file compressor.cpp. References bitwriter::put_byte(), Save(), and SaveGUID(). Referenced by Compress().
00284 { 00285 if (savedecompressstateinfo) 00286 { 00287 // save the state information for the compressor prior to the data 00288 // first write a special byte signifying that full state info follows 00289 to.put_byte((unsigned char)254); 00290 Save(to,true); 00291 } 00292 else 00293 { 00294 // save only the GUID of the compressor 00295 // if the GUID is valid, it should let receiver know which decompressor to use, or otherwise issue a warning 00296 SaveGUID(to); 00297 } 00298 00299 // return success 00300 return true; 00301 } |
|
Save GUID field.
Definition at line 336 of file compressor.cpp. References guid, and bitwriter::put_byte(). Referenced by SaveCompressionHeader().
00337 { 00338 // save a short guid 00339 to.put_byte((unsigned char)guid); 00340 // return success 00341 return true; 00342 } |
|
Load GUID field.
Definition at line 346 of file compressor.cpp. References bitreader::get_byte(). Referenced by LoadCompressionHeader(), and OctaneTester::RunCommand_Decompress().
00347 { 00348 // load a short guid 00349 unsigned char c; 00350 00351 // read first character 00352 c=from.get_byte(); 00353 00354 // special NONGUID character 00355 if (c==254) 00356 return -1; 00357 00358 return c; 00359 } |