예제 #1
0
파일: main.cpp 프로젝트: vkevroletin/Moroz
int main(int argc, char* argv[]) {
  CmdLineParser cmdp;
  if (false == cmdp.parse_cmd_line(argc, argv)) {
    cerr << "    error: " << cmdp.last_error << "\n";
    cmdp.print_help();
  } else {
    BaseCompressor* zip = cmdp.compression == CmdLineParser:: COMPR_HAFFMAN ?
      (BaseCompressor*) new Haffman() : (BaseCompressor*) new LZW();
    try {
      switch (cmdp.action) {
      case (CmdLineParser::ACT_COMPRESSION): {
        zip->compress(cmdp.files);
      } break;
      case (CmdLineParser::ACT_DECOMPRESSION): {
        zip->decompress(cmdp.files[0]);
      } break;
      case (CmdLineParser::ACT_PRINT_HELP):{
        cmdp.print_help();
      }
      }
    }
    catch (Error& e) {
      std::cerr << e.message();
    }
  }

  return 0;
}
예제 #2
0
void OutputStream::compress( std::ostream* ostream )
{
    _fields.clear();
    if ( !isBinary() ) return;
    
    std::stringstream schemaSource;
    if ( _useSchemaData )
    {
        _fields.push_back( "SchemaData" );
        
        std::string schemaData;
        for ( std::map<std::string, std::string>::iterator itr=_inbuiltSchemaMap.begin();
              itr!=_inbuiltSchemaMap.end(); ++itr )
        {
            schemaData += itr->first + '=';
            schemaData += itr->second;
            schemaData += '\n';
        }
        
        int size = schemaData.size();
        schemaSource.write( (char*)&size, INT_SIZE );
        schemaSource.write( schemaData.c_str(), size );
        
        _inbuiltSchemaMap.clear();
        _fields.pop_back();
    }
    
    if ( !_compressorName.empty() )
    {
        _fields.push_back( "Compression" );
        BaseCompressor* compressor = Registry::instance()->getObjectWrapperManager()->findCompressor(_compressorName);
        if ( !compressor || !ostream )
        {
            _fields.pop_back();
            return;
        }
        
        if ( !compressor->compress(*ostream, schemaSource.str() + _compressSource.str()) )
            throwException( "OutputStream: Failed to compress stream." );
        if ( getException() ) return;
        _fields.pop_back();
    }
    else if ( _useSchemaData )
    {
        std::string str = schemaSource.str() + _compressSource.str();
        ostream->write( str.c_str(), str.size() );
    }
}