//===-- TextStubHelpers.cpp -------------------------------------*- 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
//
//===-----------------------------------------------------------------------===/

#include "llvm/Support/MemoryBuffer.h"
#include "llvm/TextAPI/InterfaceFile.h"
#include <algorithm>
#include <string>

#ifndef TEXT_STUB_HELPERS_H
#define TEXT_STUB_HELPERS_H

namespace llvm {
struct ExportedSymbol {
  MachO::EncodeKind Kind = MachO::EncodeKind::GlobalSymbol;
  std::string Name = {};
  bool Weak = false;
  bool ThreadLocalValue = false;
  bool isData = false;
  MachO::TargetList Targets = {};
};

using ExportedSymbolSeq = std::vector<ExportedSymbol>;
using TargetToAttr = std::vector<std::pair<llvm::MachO::Target, std::string>>;
using TBDFile = std::unique_ptr<MachO::InterfaceFile>;
using TBDReexportFile = std::shared_ptr<MachO::InterfaceFile>;

inline bool operator<(const ExportedSymbol &LHS, const ExportedSymbol &RHS) {
  return std::tie(LHS.Kind, LHS.Name) < std::tie(RHS.Kind, RHS.Name);
}

inline bool operator==(const ExportedSymbol &LHS, const ExportedSymbol &RHS) {
  return std::tie(LHS.Kind, LHS.Name, LHS.Weak, LHS.ThreadLocalValue) ==
         std::tie(RHS.Kind, RHS.Name, RHS.Weak, RHS.ThreadLocalValue);
}

inline std::string stripWhitespace(std::string S) {
  llvm::erase_if(S, ::isspace);
  return S;
}

// This will transform a single InterfaceFile then compare against the other
// InterfaceFile then transform the second InterfaceFile in the same way to
// regain equality.
inline bool
checkEqualityOnTransform(MachO::InterfaceFile &FileA,
                         MachO::InterfaceFile &FileB,
                         void (*Transform)(MachO::InterfaceFile *)) {
  Transform(&FileA);
  // Files should not be equal.
  if (FileA == FileB)
    return false;
  Transform(&FileB);
  // Files should be equal.
  if (FileA != FileB)
    return false;
  return true;
}

} // namespace llvm
#endif
