diff options
Diffstat (limited to 'llvm/lib/DWARFLinkerParallel/IndexedValuesMap.h')
| -rw-r--r-- | llvm/lib/DWARFLinkerParallel/IndexedValuesMap.h | 49 |
1 files changed, 49 insertions, 0 deletions
diff --git a/llvm/lib/DWARFLinkerParallel/IndexedValuesMap.h b/llvm/lib/DWARFLinkerParallel/IndexedValuesMap.h new file mode 100644 index 000000000000..0dc8de860a42 --- /dev/null +++ b/llvm/lib/DWARFLinkerParallel/IndexedValuesMap.h @@ -0,0 +1,49 @@ +//===- IndexedValuesMap.h ---------------------------------------*- 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 +// +//===----------------------------------------------------------------------===// + +#ifndef LLVM_LIB_DWARFLINKERPARALLEL_INDEXEDVALUESMAP_H +#define LLVM_LIB_DWARFLINKERPARALLEL_INDEXEDVALUESMAP_H + +#include "llvm/ADT/DenseMap.h" +#include "llvm/ADT/SmallVector.h" +#include <cstdint> +#include <utility> + +namespace llvm { +namespace dwarflinker_parallel { + +template <typename T> class IndexedValuesMap { +public: + uint64_t getValueIndex(T Value) { + typename ValueToIndexMapTy::iterator It = ValueToIndexMap.find(Value); + if (It == ValueToIndexMap.end()) { + It = ValueToIndexMap.insert(std::make_pair(Value, Values.size())).first; + Values.push_back(Value); + } + return It->second; + } + + const SmallVector<T> &getValues() { return Values; } + + void clear() { + ValueToIndexMap.clear(); + Values.clear(); + } + + bool empty() { return Values.empty(); } + +protected: + using ValueToIndexMapTy = DenseMap<T, uint64_t>; + ValueToIndexMapTy ValueToIndexMap; + SmallVector<T> Values; +}; + +} // end of namespace dwarflinker_parallel +} // end namespace llvm + +#endif // LLVM_LIB_DWARFLINKERPARALLEL_INDEXEDVALUESMAP_H |
