//===- 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
