Index: sdch/open_vcdiff/depot/opensource/open-vcdiff/src/google/vcdecoder.h |
=================================================================== |
--- sdch/open_vcdiff/depot/opensource/open-vcdiff/src/google/vcdecoder.h (revision 2678) |
+++ sdch/open_vcdiff/depot/opensource/open-vcdiff/src/google/vcdecoder.h (working copy) |
@@ -1,189 +0,0 @@ |
-// Copyright 2008 Google Inc. |
-// Author: Lincoln Smith |
-// |
-// Licensed under the Apache License, Version 2.0 (the "License"); |
-// you may not use this file except in compliance with the License. |
-// You may obtain a copy of the License at |
-// |
-// http://www.apache.org/licenses/LICENSE-2.0 |
-// |
-// Unless required by applicable law or agreed to in writing, software |
-// distributed under the License is distributed on an "AS IS" BASIS, |
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
-// See the License for the specific language governing permissions and |
-// limitations under the License. |
- |
-#ifndef OPEN_VCDIFF_VCDECODER_H_ |
-#define OPEN_VCDIFF_VCDECODER_H_ |
- |
-#include <cstddef> // size_t |
-#include <string> |
-#include "google/output_string.h" |
- |
-namespace open_vcdiff { |
- |
-using std::string; |
- |
-class VCDiffStreamingDecoderImpl; |
- |
-// A streaming decoder class. Takes a dictionary (source) file and a delta |
-// file, and produces the original target file. It is intended to process |
-// the partial contents of the delta file as they arrive, in "chunks". |
-// As soon as a chunk of bytes is received from a file read or from a network |
-// transmission, it can be passed to DecodeChunk(), which will then output |
-// as much of the target file as it can. |
-// |
-// The client should use this class as follows: |
-// VCDiffStreamingDecoder v; |
-// v.StartDecoding(dictionary_ptr, dictionary_size); |
-// while (any data left) { |
-// if (!v.DecodeChunk(data, len, &output_string)) { |
-// handle error; |
-// break; |
-// } |
-// process(output_string); // might have no new data, though |
-// } |
-// if (!v.FinishDecoding()) { ... handle error ... } |
-// |
-// I.e., the allowed pattern of calls is |
-// StartDecoding DecodeChunk* FinishDecoding |
-// |
-// NOTE: It is not necessary to call FinishDecoding if DecodeChunk |
-// returns false. When DecodeChunk returns false to signal an |
-// error, it resets its state and is ready for a new StartDecoding. |
-// If FinishDecoding is called, it will also return false. |
-// |
-class VCDiffStreamingDecoder { |
- public: |
- VCDiffStreamingDecoder(); |
- ~VCDiffStreamingDecoder(); |
- |
- // Resets the dictionary contents to "dictionary_ptr[0,dictionary_size-1]" |
- // and sets up the data structures for decoding. Note that the dictionary |
- // contents are not copied, and the client is responsible for ensuring that |
- // dictionary_ptr is valid until FinishDecoding is called. |
- // |
- void StartDecoding(const char* dictionary_ptr, size_t dictionary_size); |
- |
- // Accepts "data[0,len-1]" as additional data received in the |
- // compressed stream. If any chunks of data can be fully decoded, |
- // they are appended to output_string. |
- // |
- // Returns true on success, and false if the data was malformed |
- // or if there was an error in decoding it (e.g. out of memory, etc.). |
- // |
- // Note: we *append*, so the old contents of output_string stick around. |
- // This convention differs from the non-streaming Encode/Decode |
- // interfaces in VCDiffDecoder. |
- // |
- // output_string is guaranteed to be resized no more than once for each |
- // window in the VCDIFF delta file. This rule is irrespective |
- // of the number of calls to DecodeString(). |
- // |
- template<class OutputType> |
- bool DecodeChunk(const char* data, size_t len, OutputType* output) { |
- OutputString<OutputType> output_string(output); |
- return DecodeChunkToInterface(data, len, &output_string); |
- } |
- |
- bool DecodeChunkToInterface(const char* data, size_t len, |
- OutputStringInterface* output_string); |
- |
- // Finishes decoding after all data has been received. Returns true |
- // if decoding of the entire stream was successful. FinishDecoding() |
- // must be called for the current target before StartDecoding() can be |
- // called for a different target. |
- // |
- bool FinishDecoding(); |
- |
- // The decoder can create a version of the output target string with XML tags |
- // added to indicate where each section of the decoded text came from. This |
- // can assist in debugging the decoder and/or determining the effectiveness of |
- // a particular dictionary. The following XML tags will be added. Despite |
- // the formatting of this example, newlines will not be added between tags. |
- // <dmatch>This text matched with the dictionary</dmatch> |
- // <bmatch>This text matched earlier target output</bmatch> |
- // <literal>This text found no match</literal> |
- // |
- // Calling EnableAnnotatedOutput() will enable this feature. The interface |
- // GetAnnotatedOutput() can be used to retrieve the annotated text. It is |
- // recommended to use this feature only when the target data consists of HTML |
- // or other human-readable text. |
- |
- // Enables the annotated output feature. After this method is called, new |
- // target windows added to output_string by DecodeChunk() will also be added |
- // to the annotated output, and can be retrieved using GetAnnotatedOutput(). |
- // If annotated output is already enabled, this function has no effect. |
- void EnableAnnotatedOutput(); |
- |
- // Disables the annotated output feature. After calling this method, |
- // GetAnnotatedOutput() will produce an empty string until |
- // EnableAnnotatedOutput() is called again. |
- void DisableAnnotatedOutput(); |
- |
- // Replaces annotated_output with a copy of the annotated output string. |
- // Annotated output collection begins when EnableAnnotatedOutput() is called. |
- // The annotated output will be cleared each time StartDecoding() is called, |
- // but not when FinishDecoding() is called. |
- template<class OutputType> |
- void GetAnnotatedOutput(OutputType* annotated_output) { |
- OutputString<OutputType> output_string(annotated_output); |
- GetAnnotatedOutputToInterface(&output_string); |
- } |
- |
- void GetAnnotatedOutputToInterface(OutputStringInterface* annotated_output); |
- |
- private: |
- VCDiffStreamingDecoderImpl* const impl_; |
- |
- // Make the copy constructor and assignment operator private |
- // so that they don't inadvertently get used. |
- explicit VCDiffStreamingDecoder(const VCDiffStreamingDecoder&); |
- void operator=(const VCDiffStreamingDecoder&); |
-}; |
- |
-// A simpler (non-streaming) interface to the VCDIFF decoder that can be used |
-// if the entire delta file is available. |
-// |
-class VCDiffDecoder { |
- public: |
- VCDiffDecoder() { } |
- ~VCDiffDecoder() { } |
- |
- /***** Simple interface *****/ |
- |
- // Replaces old contents of "*target" with the result of decoding |
- // the bytes found in "encoding." |
- // |
- // Returns true if "encoding" was a well-formed sequence of |
- // instructions, and returns false if not. |
- // |
- template<class OutputType> |
- bool Decode(const char* dictionary_ptr, |
- size_t dictionary_size, |
- const string& encoding, |
- OutputType* target) { |
- OutputString<OutputType> output_string(target); |
- return DecodeToInterface(dictionary_ptr, |
- dictionary_size, |
- encoding, |
- &output_string); |
- } |
- |
- private: |
- bool DecodeToInterface(const char* dictionary_ptr, |
- size_t dictionary_size, |
- const string& encoding, |
- OutputStringInterface* target); |
- |
- VCDiffStreamingDecoder decoder_; |
- |
- // Make the copy constructor and assignment operator private |
- // so that they don't inadvertently get used. |
- explicit VCDiffDecoder(const VCDiffDecoder&); |
- void operator=(const VCDiffDecoder&); |
-}; |
- |
-}; // namespace open_vcdiff |
- |
-#endif // OPEN_VCDIFF_VCDECODER_H_ |