Home | History | Annotate | Download | only in src
      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