//===- DebugCrossExSubsection.cpp -------------------------------*- C++ -*-===//
//
//                     The LLVM Compiler Infrastructure
//
// This file is distributed under the University of Illinois Open Source
// License. See LICENSE.TXT for details.
//
//===----------------------------------------------------------------------===//

#include "llvm/DebugInfo/CodeView/DebugCrossExSubsection.h"

#include "llvm/DebugInfo/CodeView/CodeViewError.h"

using namespace llvm;
using namespace llvm::codeview;

Error DebugCrossModuleExportsSubsectionRef::initialize(
    BinaryStreamReader Reader) {
  if (Reader.bytesRemaining() % sizeof(CrossModuleExport) != 0)
    return make_error<CodeViewError>(
        cv_error_code::corrupt_record,
        "Cross Scope Exports section is an invalid size!");

  uint32_t Size = Reader.bytesRemaining() / sizeof(CrossModuleExport);
  return Reader.readArray(References, Size);
}

Error DebugCrossModuleExportsSubsectionRef::initialize(BinaryStreamRef Stream) {
  BinaryStreamReader Reader(Stream);
  return initialize(Reader);
}

void DebugCrossModuleExportsSubsection::addMapping(uint32_t Local,
                                                   uint32_t Global) {
  Mappings[Local] = Global;
}

uint32_t DebugCrossModuleExportsSubsection::calculateSerializedSize() const {
  return Mappings.size() * sizeof(CrossModuleExport);
}

Error DebugCrossModuleExportsSubsection::commit(
    BinaryStreamWriter &Writer) const {
  for (const auto &M : Mappings) {
    if (auto EC = Writer.writeObject(M))
      return EC;
  }
  return Error::success();
}
