blob: 3401d64c95938ebb957b8563ff873f715a0b23c7 [file] [log] [blame]
//===-- include/flang/Semantics/module-dependences.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 FORTRAN_SEMANTICS_MODULE_DEPENDENCES_H_
#define FORTRAN_SEMANTICS_MODULE_DEPENDENCES_H_
#include <cinttypes>
#include <map>
#include <optional>
#include <string>
namespace Fortran::semantics {
using ModuleCheckSumType = std::uint64_t;
class ModuleDependences {
public:
void AddDependence(
std::string &&name, bool intrinsic, ModuleCheckSumType hash) {
if (intrinsic) {
intrinsicMap_.insert_or_assign(std::move(name), hash);
} else {
nonIntrinsicMap_.insert_or_assign(std::move(name), hash);
}
}
std::optional<ModuleCheckSumType> GetRequiredHash(
const std::string &name, bool intrinsic) {
if (intrinsic) {
if (auto iter{intrinsicMap_.find(name)}; iter != intrinsicMap_.end()) {
return iter->second;
}
} else {
if (auto iter{nonIntrinsicMap_.find(name)};
iter != nonIntrinsicMap_.end()) {
return iter->second;
}
}
return std::nullopt;
}
private:
std::map<std::string, ModuleCheckSumType> intrinsicMap_, nonIntrinsicMap_;
};
} // namespace Fortran::semantics
#endif // FORTRAN_SEMANTICS_MODULE_DEPENDENCES_H_