xref: /llvm-project/mlir/lib/Support/InterfaceSupport.cpp (revision 891fad0448fc560877e67c980754c1c4a5c83735)
1c878d03dSBenjamin Kramer //===- InterfaceSupport.cpp - MLIR Interface Support Classes --------------===//
2c878d03dSBenjamin Kramer //
3c878d03dSBenjamin Kramer // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4c878d03dSBenjamin Kramer // See https://llvm.org/LICENSE.txt for license information.
5c878d03dSBenjamin Kramer // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6c878d03dSBenjamin Kramer //
7c878d03dSBenjamin Kramer //===----------------------------------------------------------------------===//
8c878d03dSBenjamin Kramer //
9c878d03dSBenjamin Kramer // This file defines several support classes for defining interfaces.
10c878d03dSBenjamin Kramer //
11c878d03dSBenjamin Kramer //===----------------------------------------------------------------------===//
12c878d03dSBenjamin Kramer 
13c878d03dSBenjamin Kramer #include "mlir/Support/InterfaceSupport.h"
14c878d03dSBenjamin Kramer #include "llvm/Support/Debug.h"
15c878d03dSBenjamin Kramer #include "llvm/Support/raw_ostream.h"
16c878d03dSBenjamin Kramer 
17c878d03dSBenjamin Kramer #define DEBUG_TYPE "interfaces"
18c878d03dSBenjamin Kramer 
19c878d03dSBenjamin Kramer using namespace mlir;
20c878d03dSBenjamin Kramer 
insert(TypeID interfaceId,void * conceptImpl)2183a635c0SRiver Riddle void detail::InterfaceMap::insert(TypeID interfaceId, void *conceptImpl) {
22c878d03dSBenjamin Kramer   // Insert directly into the right position to keep the interfaces sorted.
2383a635c0SRiver Riddle   auto *it =
2483a635c0SRiver Riddle       llvm::lower_bound(interfaces, interfaceId, [](const auto &it, TypeID id) {
25c878d03dSBenjamin Kramer         return compare(it.first, id);
26c878d03dSBenjamin Kramer       });
2783a635c0SRiver Riddle   if (it != interfaces.end() && it->first == interfaceId) {
28*891fad04SKohei Yamaguchi     LLVM_DEBUG(llvm::dbgs() << "Ignoring repeated interface registration\n");
2983a635c0SRiver Riddle     free(conceptImpl);
3083a635c0SRiver Riddle     return;
31c878d03dSBenjamin Kramer   }
3283a635c0SRiver Riddle   interfaces.insert(it, {interfaceId, conceptImpl});
33c878d03dSBenjamin Kramer }
34