Add missing reflexive equality operators to RetainPtr<>
Use where appropriate.
Change-Id: Ibf17ff88d9669e45498d3eabbfbfd8d97944b536
Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/59470
Commit-Queue: Tom Sepez <tsepez@chromium.org>
Reviewed-by: Lei Zhang <thestig@chromium.org>
diff --git a/core/fpdfapi/edit/cpdf_creator.cpp b/core/fpdfapi/edit/cpdf_creator.cpp
index 8a8edd7..00936a3 100644
--- a/core/fpdfapi/edit/cpdf_creator.cpp
+++ b/core/fpdfapi/edit/cpdf_creator.cpp
@@ -154,7 +154,7 @@
return false;
std::unique_ptr<CPDF_Encryptor> encryptor;
- if (GetCryptoHandler() && pObj != m_pEncryptDict.Get())
+ if (GetCryptoHandler() && pObj != m_pEncryptDict)
encryptor = pdfium::MakeUnique<CPDF_Encryptor>(GetCryptoHandler(), objnum);
if (!pObj->WriteTo(m_Archive.get(), encryptor.get()))
diff --git a/core/fpdfapi/page/cpdf_colorspace.cpp b/core/fpdfapi/page/cpdf_colorspace.cpp
index 1365f8a..c20abba 100644
--- a/core/fpdfapi/page/cpdf_colorspace.cpp
+++ b/core/fpdfapi/page/cpdf_colorspace.cpp
@@ -1130,7 +1130,7 @@
return 0;
const CPDF_Object* pBaseObj = pArray->GetDirectObjectAt(1);
- if (pBaseObj == m_pArray.Get())
+ if (pBaseObj == m_pArray)
return 0;
auto* pDocPageData = CPDF_DocPageData::FromDocument(pDoc);
@@ -1229,7 +1229,7 @@
m_Type = Colorant;
const CPDF_Object* pAltCS = pArray->GetDirectObjectAt(2);
- if (pAltCS == m_pArray.Get())
+ if (pAltCS == m_pArray)
return 0;
m_pAltCS = Load(pDoc, pAltCS, pVisited);
@@ -1309,7 +1309,7 @@
return 0;
const CPDF_Object* pAltCS = pArray->GetDirectObjectAt(2);
- if (!pAltCS || pAltCS == m_pArray.Get())
+ if (!pAltCS || pAltCS == m_pArray)
return 0;
m_pAltCS = Load(pDoc, pAltCS, pVisited);
diff --git a/core/fpdfapi/page/cpdf_patterncs.cpp b/core/fpdfapi/page/cpdf_patterncs.cpp
index 1887ae6..1c5dc6c 100644
--- a/core/fpdfapi/page/cpdf_patterncs.cpp
+++ b/core/fpdfapi/page/cpdf_patterncs.cpp
@@ -23,7 +23,7 @@
const CPDF_Array* pArray,
std::set<const CPDF_Object*>* pVisited) {
const CPDF_Object* pBaseCS = pArray->GetDirectObjectAt(1);
- if (pBaseCS == m_pArray.Get())
+ if (pBaseCS == m_pArray)
return 0;
auto* pDocPageData = CPDF_DocPageData::FromDocument(pDoc);
diff --git a/core/fpdfapi/parser/cpdf_object_avail.cpp b/core/fpdfapi/parser/cpdf_object_avail.cpp
index 9d92c11..1dc5125 100644
--- a/core/fpdfapi/parser/cpdf_object_avail.cpp
+++ b/core/fpdfapi/parser/cpdf_object_avail.cpp
@@ -92,7 +92,7 @@
const CPDF_ReadValidator::Session parse_session(validator_);
const CPDF_Object* direct = holder_->GetOrParseIndirectObject(obj_num);
- if (direct == root_.Get())
+ if (direct == root_)
continue;
if (validator_->has_read_problems() ||
@@ -117,9 +117,9 @@
// Skip if this object if it's an inlined root, the parent object or
// explicitily excluded.
- const bool skip = (walker.GetParent() && obj == root_.Get()) ||
+ const bool skip = (walker.GetParent() && obj == root_) ||
walker.dictionary_key() == "Parent" ||
- (obj != root_.Get() && ExcludeObject(obj));
+ (obj != root_ && ExcludeObject(obj));
// We need to parse the object before we can do the exclusion check.
// This is because the exclusion check may check against a referenced
diff --git a/core/fpdfapi/parser/cpdf_object_walker_unittest.cpp b/core/fpdfapi/parser/cpdf_object_walker_unittest.cpp
index 7de4e9a..4dde72f 100644
--- a/core/fpdfapi/parser/cpdf_object_walker_unittest.cpp
+++ b/core/fpdfapi/parser/cpdf_object_walker_unittest.cpp
@@ -112,7 +112,7 @@
int non_array_objects = 0;
CPDF_ObjectWalker walker(root_array.Get());
while (const CPDF_Object* obj = walker.GetNext()) {
- if (obj != root_array.Get() && obj->IsArray()) {
+ if (obj != root_array && obj->IsArray()) {
// skip other array except root.
walker.SkipWalkIntoCurrentObject();
}
diff --git a/core/fpdfapi/parser/cpdf_reference.cpp b/core/fpdfapi/parser/cpdf_reference.cpp
index 8341ca1..d50db34 100644
--- a/core/fpdfapi/parser/cpdf_reference.cpp
+++ b/core/fpdfapi/parser/cpdf_reference.cpp
@@ -107,7 +107,7 @@
RetainPtr<CPDF_Object> CPDF_Reference::MakeReference(
CPDF_IndirectObjectHolder* holder) const {
- ASSERT(holder == m_pObjList.Get());
+ ASSERT(holder == m_pObjList);
// Do not allow reference to reference, just create other reference for same
// object.
return pdfium::MakeRetain<CPDF_Reference>(holder, GetRefObjNum());
diff --git a/core/fxcrt/retain_ptr.h b/core/fxcrt/retain_ptr.h
index 688a622..5cfc231 100644
--- a/core/fxcrt/retain_ptr.h
+++ b/core/fxcrt/retain_ptr.h
@@ -125,6 +125,16 @@
mutable intptr_t m_nRefCount = 0;
};
+template <typename T, typename U>
+inline bool operator==(const U* lhs, const RetainPtr<T>& rhs) {
+ return rhs == lhs;
+}
+
+template <typename T, typename U>
+inline bool operator!=(const U* lhs, const RetainPtr<T>& rhs) {
+ return rhs != lhs;
+}
+
} // namespace fxcrt
using fxcrt::ReleaseDeleter;
diff --git a/core/fxcrt/retain_ptr_unittest.cpp b/core/fxcrt/retain_ptr_unittest.cpp
index 4405cd2..47277df 100644
--- a/core/fxcrt/retain_ptr_unittest.cpp
+++ b/core/fxcrt/retain_ptr_unittest.cpp
@@ -217,6 +217,17 @@
EXPECT_FALSE(obj1_ptr1 == obj2_ptr1);
}
+TEST(RetainPtr, EqualsReflexive) {
+ PseudoRetainable obj1;
+ PseudoRetainable obj2;
+ RetainPtr<PseudoRetainable> obj1_ptr(&obj1);
+ RetainPtr<PseudoRetainable> obj2_ptr(&obj2);
+ EXPECT_TRUE(&obj1 == obj1_ptr);
+ EXPECT_FALSE(&obj1 == obj2_ptr);
+ EXPECT_FALSE(&obj2 == obj1_ptr);
+ EXPECT_TRUE(&obj2 == obj2_ptr);
+}
+
TEST(RetainPtr, NotEquals) {
PseudoRetainable obj1;
PseudoRetainable obj2;
@@ -236,6 +247,17 @@
EXPECT_TRUE(obj1_ptr1 != obj2_ptr1);
}
+TEST(RetainPtr, NotEqualsReflexive) {
+ PseudoRetainable obj1;
+ PseudoRetainable obj2;
+ RetainPtr<PseudoRetainable> obj1_ptr(&obj1);
+ RetainPtr<PseudoRetainable> obj2_ptr(&obj2);
+ EXPECT_FALSE(&obj1 != obj1_ptr);
+ EXPECT_TRUE(&obj1 != obj2_ptr);
+ EXPECT_TRUE(&obj2 != obj1_ptr);
+ EXPECT_FALSE(&obj2 != obj2_ptr);
+}
+
TEST(RetainPtr, LessThan) {
PseudoRetainable objs[2];
RetainPtr<PseudoRetainable> obj1_ptr(&objs[0]);
diff --git a/xfa/fwl/cfwl_messagekillfocus.h b/xfa/fwl/cfwl_messagekillfocus.h
index 56cfc39..b94fc3f 100644
--- a/xfa/fwl/cfwl_messagekillfocus.h
+++ b/xfa/fwl/cfwl_messagekillfocus.h
@@ -23,7 +23,7 @@
std::unique_ptr<CFWL_Message> Clone() override;
bool IsFocusedOnWidget(const CFWL_Widget* pWidget) const {
- return pWidget == m_pSetFocus.Get();
+ return pWidget == m_pSetFocus;
}
private: