int applypatch(int argc, char * argv[]){ if (argc!=4) { std::cout<<"patch command parameter:\n oldFileName diffFileName outNewFileName\n"; return 0; } const char* oldFileName=argv[1]; const char* diffFileName=argv[2]; const char* outNewFileName=argv[3]; std::cout<<"old :\"" <<oldFileName<< "\"\ndiff:\""<<diffFileName<<"\"\nout :\""<<outNewFileName<<"\"\n"; clock_t time0=clock(); { TFileStreamInput oldData(oldFileName); TFileStreamInput diffData(diffFileName); const hpatch_StreamPos_t newDataSize=readNewDataSize(diffData); TFileStreamOutput newData(outNewFileName,newDataSize); clock_t time1=clock(); if (!patch_stream(&newData, &oldData, &diffData)){ std::cout<<" patch_stream run error!!!\n"; exit(3); } clock_t time2=clock(); std::cout<<" patch_stream ok!\n"; std::cout<<"oldDataSize : "<<oldData.streamSize<<"\ndiffDataSize: "<<diffData.streamSize<<"\nnewDataSize : "<<newDataSize<<"\n"; std::cout<<"\npatch time:"<<(time2-time1)*(1000.0/CLOCKS_PER_SEC)<<" ms\n"; } clock_t time3=clock(); std::cout<<"all run time:"<<(time3-time0)*(1000.0/CLOCKS_PER_SEC)<<" ms\n"; return 0; }
int affx::TsvFileDiff::diff(affx::TsvFile& tsv1, affx::TsvFile& tsv2) { int start_diff_cnt=m_diff_cnt; // if (m_opt_do_headers) { diffHeaders(tsv1,tsv2); } if (m_opt_do_data) { diffData(tsv1,tsv2); } // return m_diff_cnt-start_diff_cnt; }
static hpatch_StreamPos_t readNewDataSize(TFileStreamInput& diffFileData){ TUInt readLength=9; if (readLength>diffFileData.streamSize) readLength=(TUInt)diffFileData.streamSize; std::vector<TByte> diffData(readLength); TByte* diffData_begin=0; if (!diffData.empty()) diffData_begin=&diffData[0]; assert(diffFileData.m_offset==0); diffFileData.read(diffFileData.streamHandle,0,diffData_begin,diffData_begin+readLength); TUInt kNewDataSizeSavedSize=-1; const hpatch_StreamPos_t newDataSize=readSavedSize(diffData,&kNewDataSizeSavedSize); diffFileData.setHeadSize(kNewDataSizeSavedSize);//4 or 9 byte return newDataSize; }