// Copyright (c) 2010 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 UPDATE_ENGINE_PAYLOAD_GENERATOR_METADATA_H_
#define UPDATE_ENGINE_PAYLOAD_GENERATOR_METADATA_H_

#include <string>
#include <vector>

#include "update_engine/payload_generator/delta_diff_generator.h"
#include "update_engine/payload_generator/graph_types.h"

namespace chromeos_update_engine {

class Metadata {
 public:
  // Reads metadata from old image and new image and determines
  // the smallest way to encode the metadata for the diff.
  // If there's no change in the metadata, it creates a MOVE
  // operation. If there is a change, the smallest of REPLACE, REPLACE_BZ,
  // or BSDIFF wins. It writes the diff to data_fd and updates data_file_size
  // accordingly. It also adds the required operation to the graph and adds the
  // metadata extents to blocks.
  // Returns true on success.
  static bool DeltaReadMetadata(Graph* graph,
                                std::vector<DeltaDiffGenerator::Block>* blocks,
                                const std::string& old_image,
                                const std::string& new_image,
                                int data_fd,
                                off_t* data_file_size);

 private:
  // This should never be constructed.
  DISALLOW_IMPLICIT_CONSTRUCTORS(Metadata);
};

};  // namespace chromeos_update_engine

#endif  // UPDATE_ENGINE_PAYLOAD_GENERATOR_METADATA_H_
