• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // Copyright 2008 Google Inc. All Rights Reserved.
2 // Author: ajenjo@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:
~CodeTableWriterInterface()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