libclamunrar/rarvm.hpp
01eebc13
 #ifndef _RAR_VM_
 #define _RAR_VM_
 
 #define VM_MEMSIZE                  0x40000
 #define VM_MEMMASK           (VM_MEMSIZE-1)
 
 enum VM_StandardFilters {
   VMSF_NONE, VMSF_E8, VMSF_E8E9, VMSF_ITANIUM, VMSF_RGB, VMSF_AUDIO, 
   VMSF_DELTA
 };
 
 struct VM_PreparedProgram
 {
   VM_PreparedProgram() 
   {
     FilteredDataSize=0;
     Type=VMSF_NONE;
   }
   VM_StandardFilters Type;
   uint InitR[7];
   byte *FilteredData;
   uint FilteredDataSize;
 };
 
 class RarVM
 {
   private:
     bool ExecuteStandardFilter(VM_StandardFilters FilterType);
     uint FilterItanium_GetBits(byte *Data,uint BitPos,uint BitCount);
     void FilterItanium_SetBits(byte *Data,uint BitField,uint BitPos,uint BitCount);
 
     byte *Mem;
     uint R[8];
   public:
     RarVM();
     ~RarVM();
     void Init();
     void Prepare(byte *Code,uint CodeSize,VM_PreparedProgram *Prg);
     void Execute(VM_PreparedProgram *Prg);
     void SetMemory(size_t Pos,byte *Data,size_t DataSize);
     static uint ReadData(BitInput &Inp);
 };
 
 #endif