versioner: Build SymbolDatabase from version scripts
This commit adds a version script parser so that versioner can build
SymbolDatabase from version scripts.
Bug: 113263746
Test: ./bionic/tools/versioner/run_tests.py
Change-Id: Iedcfe36b51a62693668e07b86aa13592096262db
diff --git a/tools/versioner/src/Arch.cpp b/tools/versioner/src/Arch.cpp
index 8d1d41e..4cd9e07 100644
--- a/tools/versioner/src/Arch.cpp
+++ b/tools/versioner/src/Arch.cpp
@@ -44,20 +44,19 @@
errx(1, "unknown arch '%zu'", size_t(arch));
}
-Arch arch_from_string(const std::string& name) {
- if (name == "arm") {
- return Arch::arm;
- } else if (name == "arm64") {
- return Arch::arm64;
- } else if (name == "mips") {
- return Arch::mips;
- } else if (name == "mips64") {
- return Arch::mips64;
- } else if (name == "x86") {
- return Arch::x86;
- } else if (name == "x86_64") {
- return Arch::x86_64;
- }
+static const std::unordered_map<std::string, Arch> arch_name_map{
+ {"arm", Arch::arm},
+ {"arm64", Arch::arm64},
+ {"mips", Arch::mips},
+ {"mips64", Arch::mips64},
+ {"x86", Arch::x86},
+ {"x86_64", Arch::x86_64},
+};
- errx(1, "unknown architecture '%s'", name.c_str());
+std::optional<Arch> arch_from_string(const std::string& name) {
+ auto it = arch_name_map.find(name);
+ if (it == arch_name_map.end()) {
+ return std::nullopt;
+ }
+ return std::make_optional(it->second);
}