Clean up AtomicDexRefMap
Make ClassReference, TypeReference, and MethodReference extend
DexFileReference. This enables using all of these types as the key
for AtomicDexRefMap.
Test: test-art-host
Bug: 63851220
Bug: 63756964
Change-Id: Ida3c94cadb53272cb5057e5cebc5971c1ab4d366
diff --git a/compiler/utils/atomic_dex_ref_map.h b/compiler/utils/atomic_dex_ref_map.h
index b02c9b6..fad056c 100644
--- a/compiler/utils/atomic_dex_ref_map.h
+++ b/compiler/utils/atomic_dex_ref_map.h
@@ -18,7 +18,7 @@
#define ART_COMPILER_UTILS_ATOMIC_DEX_REF_MAP_H_
#include "base/dchecked_vector.h"
-#include "dex_file.h"
+#include "dex_file_reference.h"
#include "safe_map.h"
namespace art {
@@ -26,7 +26,7 @@
class DexFile;
// Used by CompilerCallbacks to track verification information from the Runtime.
-template <typename T>
+template <typename DexFileReferenceType, typename Value>
class AtomicDexRefMap {
public:
explicit AtomicDexRefMap() {}
@@ -38,14 +38,16 @@
kInsertResultCASFailure,
kInsertResultSuccess,
};
- InsertResult Insert(DexFileReference ref, const T& expected, const T& desired);
+ InsertResult Insert(const DexFileReferenceType& ref,
+ const Value& expected,
+ const Value& desired);
// Retreive an item, returns false if the dex file is not added.
- bool Get(DexFileReference ref, T* out) const;
+ bool Get(const DexFileReferenceType& ref, Value* out) const;
// Dex files must be added before method references belonging to them can be used as keys. Not
// thread safe.
- void AddDexFile(const DexFile* dex_file, size_t max_index);
+ void AddDexFile(const DexFile* dex_file);
void AddDexFiles(const std::vector<const DexFile*>& dex_files);
bool HaveDexFile(const DexFile* dex_file) const {
@@ -60,12 +62,14 @@
private:
// Verified methods. The method array is fixed to avoid needing a lock to extend it.
- using ElementArray = dchecked_vector<Atomic<T>>;
+ using ElementArray = dchecked_vector<Atomic<Value>>;
using DexFileArrays = SafeMap<const DexFile*, ElementArray>;
const ElementArray* GetArray(const DexFile* dex_file) const;
ElementArray* GetArray(const DexFile* dex_file);
+ static size_t NumberOfDexIndices(const DexFile* dex_file);
+
DexFileArrays arrays_;
};