//===- InterfaceSupport.cpp - MLIR Interface Support Classes --------------===//
//
// 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
//
//===----------------------------------------------------------------------===//
//
// This file defines several support classes for defining interfaces.
//
//===----------------------------------------------------------------------===//

#include "mlir/Support/InterfaceSupport.h"
#include "llvm/Support/Debug.h"
#include "llvm/Support/raw_ostream.h"

#define DEBUG_TYPE "interfaces"

using namespace mlir;

void detail::InterfaceMap::insert(
    ArrayRef<std::pair<TypeID, void *>> elements) {
  // Insert directly into the right position to keep the interfaces sorted.
  for (auto &element : elements) {
    TypeID id = element.first;
    auto *it = llvm::lower_bound(interfaces, id, [](const auto &it, TypeID id) {
      return compare(it.first, id);
    });
    if (it != interfaces.end() && it->first == id) {
      LLVM_DEBUG(llvm::dbgs() << "Ignoring repeated interface registration");
      free(element.second);
      continue;
    }
    interfaces.insert(it, element);
  }
}
