AAPT2: Fix resource table load time regression

A previous change (deee395) caused duplicate entries to be created for
entries eith entry ids greater than 0x0ff. This is because the wrong
data type was used (uint8_t instead of uint16_t). This made loading in
resources slower as well since more entries had to be iterated over.

Bug: 36051266
Test: Dumping all resources in 700 apks found in the android tree took 1
minute instead of 5 minutes. Created a test in aapt2_tests.

Change-Id: I1c3d830da517a56ac3496221dbe605c72e0c6014
diff --git a/tools/aapt2/ResourceTable.cpp b/tools/aapt2/ResourceTable.cpp
index 58b5e8f..23322ab 100644
--- a/tools/aapt2/ResourceTable.cpp
+++ b/tools/aapt2/ResourceTable.cpp
@@ -51,7 +51,7 @@
 
 template <typename T>
 static bool less_than_struct_with_name_and_id(const std::unique_ptr<T>& lhs,
-                                              const std::pair<StringPiece, Maybe<uint8_t>>& rhs) {
+                                              const std::pair<StringPiece, Maybe<uint16_t>>& rhs) {
   int name_cmp = lhs->name.compare(0, lhs->name.size(), rhs.first.data(), rhs.first.size());
   return name_cmp < 0 || (name_cmp == 0 && rhs.second && lhs->id < rhs.second);
 }
@@ -141,7 +141,7 @@
   return types.emplace(iter, std::move(new_type))->get();
 }
 
-ResourceEntry* ResourceTableType::FindEntry(const StringPiece& name, const Maybe<uint8_t> id) {
+ResourceEntry* ResourceTableType::FindEntry(const StringPiece& name, const Maybe<uint16_t> id) {
   const auto last = entries.end();
   auto iter = std::lower_bound(entries.begin(), last, std::make_pair(name, id),
       less_than_struct_with_name_and_id<ResourceEntry>);
@@ -152,7 +152,7 @@
 }
 
 ResourceEntry* ResourceTableType::FindOrCreateEntry(const StringPiece& name,
-                                                    const Maybe<uint8_t> id) {
+                                                    const Maybe<uint16_t > id) {
   auto last = entries.end();
   auto iter = std::lower_bound(entries.begin(), last, std::make_pair(name, id),
                                less_than_struct_with_name_and_id<ResourceEntry>);
@@ -450,7 +450,7 @@
   }
 
   ResourceEntry* entry = type->FindOrCreateEntry(name.entry, use_id ? res_id.entry_id()
-                                                                    : Maybe<uint8_t>());
+                                                                    : Maybe<uint16_t>());
 
   // Check for entries appearing twice with two different entry ids
   if (check_id && entry->id && entry->id.value() != res_id.entry_id()) {
@@ -561,7 +561,7 @@
   }
 
   ResourceEntry* entry = type->FindOrCreateEntry(name.entry, use_id ? res_id.entry_id()
-                                                                    : Maybe<uint8_t>());
+                                                                    : Maybe<uint16_t>());
 
   // Check for entries appearing twice with two different entry ids
   if (check_id && entry->id && entry->id.value() != res_id.entry_id()) {