| //===- 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(TypeID interfaceId, void *conceptImpl) { | |
| // Insert directly into the right position to keep the interfaces sorted. | |
| auto *it = | |
| llvm::lower_bound(interfaces, interfaceId, [](const auto &it, TypeID id) { | |
| return compare(it.first, id); | |
| }); | |
| if (it != interfaces.end() && it->first == interfaceId) { | |
| LLVM_DEBUG(llvm::dbgs() << "Ignoring repeated interface registration\n"); | |
| free(conceptImpl); | |
| return; | |
| } | |
| interfaces.insert(it, {interfaceId, conceptImpl}); | |
| } |