//===- Object.h -------------------------------------------------*- C++ -*-===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
//
//===----------------------------------------------------------------------===//

#ifndef LLVM_TOOLS_LLVM_OBJCOPY_WASM_OBJECT_H
#define LLVM_TOOLS_LLVM_OBJCOPY_WASM_OBJECT_H

#include "llvm/ADT/ArrayRef.h"
#include "llvm/ADT/StringRef.h"
#include "llvm/Object/Wasm.h"
#include "llvm/Support/MemoryBuffer.h"
#include <vector>

namespace llvm {
namespace objcopy {
namespace wasm {

struct Section {
  // For now, each section is only an opaque binary blob with no distinction
  // between custom and known sections.
  uint8_t SectionType;
  StringRef Name;
  ArrayRef<uint8_t> Contents;
};

struct Object {
  llvm::wasm::WasmObjectHeader Header;
  // For now don't discriminate between kinds of sections.
  std::vector<Section> Sections;

  void addSectionWithOwnedContents(Section NewSection,
                                   std::unique_ptr<MemoryBuffer> &&Content);
  void removeSections(function_ref<bool(const Section &)> ToRemove);

private:
  std::vector<std::unique_ptr<MemoryBuffer>> OwnedContents;
};

} // end namespace wasm
} // end namespace objcopy
} // end namespace llvm

#endif // LLVM_TOOLS_LLVM_OBJCOPY_WASM_OBJECT_H
