Fetching contributors…
Cannot retrieve contributors at this time
88 lines (71 sloc) 2.25 KB
#ifndef _RAR_RECVOL_
#define _RAR_RECVOL_
#define REV5_SIGN "Rar!\x1aRev"
#define REV5_SIGN_SIZE 8
class RecVolumes3
File *SrcFile[256];
Array<byte> Buf;
#ifdef RAR_SMP
ThreadPool *RSThreadPool;
RecVolumes3(bool TestOnly);
void Make(RAROptions *Cmd,wchar *ArcName);
bool Restore(RAROptions *Cmd,const wchar *Name,bool Silent);
void Test(RAROptions *Cmd,const wchar *Name);
struct RecVolItem
File *f;
wchar Name[NM];
uint CRC;
uint64 FileSize;
bool New; // Newly created RAR volume.
bool Valid; // If existing RAR volume is valid.
class RecVolumes5;
struct RecRSThreadData
RecVolumes5 *RecRSPtr;
RSCoder16 *RS;
bool Encode;
uint DataNum;
const byte *Data;
size_t StartPos;
size_t Size;
class RecVolumes5
void ProcessRS(RAROptions *Cmd,uint DataNum,const byte *Data,uint MaxRead,bool Encode);
void ProcessRS(RAROptions *Cmd,uint MaxRead,bool Encode);
uint ReadHeader(File *RecFile,bool FirstRev);
Array<RecVolItem> RecItems;
byte *RealReadBuffer; // Real pointer returned by 'new'.
byte *ReadBuffer; // Pointer aligned for SSE instructions.
byte *RealBuf; // Real pointer returned by 'new'.
byte *Buf; // Store ECC or recovered data here, aligned for SSE.
size_t RecBufferSize; // Buffer area allocated for single volume.
uint DataCount; // Number of archives.
uint RecCount; // Number of recovery volumes.
uint TotalCount; // Total number of archives and recovery volumes.
bool *ValidFlags; // Volume validity flags for recovering.
uint MissingVolumes; // Number of missing or bad RAR volumes.
#ifdef RAR_SMP
ThreadPool *RecThreadPool;
RecRSThreadData ThreadData[MaxPoolThreads]; // Store thread parameters.
public: // 'public' only because called from thread functions.
void ProcessAreaRS(RecRSThreadData *td);
RecVolumes5(bool TestOnly);
bool Restore(RAROptions *Cmd,const wchar *Name,bool Silent);
void Test(RAROptions *Cmd,const wchar *Name);
bool RecVolumesRestore(RAROptions *Cmd,const wchar *Name,bool Silent);
void RecVolumesTest(RAROptions *Cmd,Archive *Arc,const wchar *Name);