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

// Implementation of the byte-level differential compression used internally by
// Courgette.

#include "courgette/simple_delta.h"

#include "base/logging.h"

#include "courgette/third_party/bsdiff.h"

namespace courgette {

namespace {

Status BSDiffStatusToStatus(BSDiffStatus status) {
  switch (status) {
    case OK: return C_OK;
    case CRC_ERROR: return C_BINARY_DIFF_CRC_ERROR;
    default: return C_GENERAL_ERROR;
  }
}

}

Status ApplySimpleDelta(SourceStream* old, SourceStream* delta,
                        SinkStream* target) {
  return BSDiffStatusToStatus(ApplyBinaryPatch(old, delta, target));
}

Status GenerateSimpleDelta(SourceStream* old, SourceStream* target,
                           SinkStream* delta) {
  VLOG(1) << "GenerateSimpleDelta " << old->Remaining()
          << " " << target->Remaining();
  return BSDiffStatusToStatus(CreateBinaryPatch(old, target, delta));
}

}  // namespace courgette
