1 // Copyright 2008 Google Inc. All Rights Reserved. 2 // Author: ajenjo (at) google.com (Lincoln Smith) 3 // 4 // Definition of an abstract class that describes the interface between the 5 // encoding engine (which finds the best string matches between the source and 6 // target data) and the code table writer. The code table writer is passed a 7 // series of Add, Copy, and Run instructions and produces an output file in the 8 // desired format. 9 10 #ifndef OPEN_VCDIFF_CODETABLEWRITER_INTERFACE_H_ 11 #define OPEN_VCDIFF_CODETABLEWRITER_INTERFACE_H_ 12 13 #include <stddef.h> // size_t 14 15 namespace open_vcdiff { 16 17 class OutputStringInterface; 18 19 // The method calls after construction should follow this pattern: 20 // {{Add|Copy|Run}* Output}* 21 // 22 // Output() will produce an encoding using the given series of Add, Copy, 23 // and/or Run instructions. One implementation of the interface 24 // (VCDiffCodeTableWriter) produces a VCDIFF delta window, but other 25 // implementations may be used to produce other output formats, or as test 26 // mocks, or to gather encoding statistics. 27 // 28 class CodeTableWriterInterface { 29 public: 30 virtual ~CodeTableWriterInterface() { } 31 32 // Encode an ADD opcode with the "size" bytes starting at data 33 virtual void Add(const char* data, size_t size) = 0; 34 35 // Encode a COPY opcode with args "offset" (into dictionary) and "size" bytes. 36 virtual void Copy(int32_t offset, size_t size) = 0; 37 38 // Encode a RUN opcode for "size" copies of the value "byte". 39 virtual void Run(size_t size, unsigned char byte) = 0; 40 41 // Finishes encoding and appends the encoded delta window to the output 42 // string. The output string is not null-terminated and may contain embedded 43 // '\0' characters. 44 virtual void Output(OutputStringInterface* out) = 0; 45 46 // Returns the number of target bytes processed, which is the sum of all the 47 // size arguments passed to Add(), Copy(), and Run(). 48 virtual size_t target_length() const = 0; 49 }; 50 51 } // namespace open_vcdiff 52 53 #endif // OPEN_VCDIFF_CODETABLEWRITER_INTERFACE_H_ 54