// Copyright 2017 The Chromium OS Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#ifndef _BSDIFF_DIFF_ENCODER_H_
#define _BSDIFF_DIFF_ENCODER_H_

#include <stdint.h>

#include "bsdiff/bz2_compressor.h"
#include "bsdiff/patch_writer_interface.h"

namespace bsdiff {

// Helper class to encapsulate the diff and extra stream generation logic
// derived from the old and new file buffers. Using this class is impossible to
// produce an invalid or incomplete bsdiff patch, since it has checks in place
// verifying its correct usage.

class DiffEncoder {
 public:
  // Initialize the DiffEncoder with the old and new file buffers, as well as
  // the path writer used. The |patch| will be initialized when calling Init().
  DiffEncoder(PatchWriterInterface* patch,
              const uint8_t* old_buf,
              uint64_t old_size,
              const uint8_t* new_buf,
              uint64_t new_size)
      : patch_(patch),
        old_buf_(old_buf),
        old_size_(old_size),
        new_buf_(new_buf),
        new_size_(new_size) {}

  // Initialize the diff encoder and the underlying patch.
  bool Init();

  // Add a new control triplet entry to the patch. The |entry.diff_size| bytes
  // for the diff stream and the |entry.extra_size| bytes for the extra stream
  // will be computed and added to the corresponding streams in the patch.
  // Returns whether the operation succeeded. The operation can fail if either
  // the old or new files are referenced out of bounds.
  bool AddControlEntry(const ControlEntry& entry);

  // Finalize the patch writing process and close the underlying patch writer.
  bool Close();

 private:
  // Pointer to the patch we are writing to.
  PatchWriterInterface* patch_;

  // Old and new file buffers.
  const uint8_t* old_buf_;
  uint64_t old_size_;
  const uint8_t* new_buf_;
  uint64_t new_size_;

  // Bytes of the new_buf_ already written.
  uint64_t written_output_{0};

  // The current position in the old buf.
  int64_t old_pos_{0};
};

}  // namespace bsdiff

#endif  // _BSDIFF_DIFF_ENCODER_H_
