Skip to content

Commit e1a19ba

Browse files
ericsalocopybara-github
authored andcommitted
upb: add 'options' arg to upb_Message_IsEqual()
PiperOrigin-RevId: 614707625
1 parent bb1c0ab commit e1a19ba

File tree

6 files changed

+30
-22
lines changed

6 files changed

+30
-22
lines changed

python/convert.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -271,9 +271,9 @@ bool PyUpb_PyToUpb(PyObject* obj, const upb_FieldDef* f, upb_MessageValue* val,
271271
}
272272

273273
bool upb_Message_IsEqualByDef(const upb_Message* msg1, const upb_Message* msg2,
274-
const upb_MessageDef* msgdef) {
274+
const upb_MessageDef* msgdef, int options) {
275275
const upb_MiniTable* m = upb_MessageDef_MiniTable(msgdef);
276-
return upb_Message_IsEqual(msg1, msg2, m);
276+
return upb_Message_IsEqual(msg1, msg2, m, options);
277277
}
278278

279279
#include "upb/port/undef.inc"

python/convert.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,6 @@ bool PyUpb_PyToUpb(PyObject* obj, const upb_FieldDef* f, upb_MessageValue* val,
3030

3131
// Returns true if the given messages (of type `m`) are equal.
3232
bool upb_Message_IsEqualByDef(const upb_Message* msg1, const upb_Message* msg2,
33-
const upb_MessageDef* msgdef);
33+
const upb_MessageDef* msgdef, int options);
3434

3535
#endif // PYUPB_CONVERT_H__

python/descriptor_pool.c

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -197,7 +197,8 @@ static PyObject* PyUpb_DescriptorPool_DoAddSerializedFile(
197197
goto done;
198198
}
199199
const upb_MessageDef* m = PyUpb_DescriptorPool_GetFileProtoDef();
200-
if (upb_Message_IsEqualByDef(UPB_UPCAST(proto), UPB_UPCAST(existing), m)) {
200+
if (upb_Message_IsEqualByDef(UPB_UPCAST(proto), UPB_UPCAST(existing), m,
201+
/*options=*/0)) {
201202
result = PyUpb_FileDescriptor_Get(file);
202203
goto done;
203204
}

python/message.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -575,7 +575,7 @@ static bool PyUpb_Message_IsEqual(PyUpb_Message* m1, PyObject* _m2) {
575575
const bool e2 = PyUpb_Message_IsEmpty(m2_msg, m1_msgdef, symtab);
576576
if (e1 || e2) return e1 && e2;
577577

578-
return upb_Message_IsEqualByDef(m1_msg, m2_msg, m1_msgdef);
578+
return upb_Message_IsEqualByDef(m1_msg, m2_msg, m1_msgdef, 0);
579579
}
580580

581581
static const upb_FieldDef* PyUpb_Message_InitAsMsg(PyUpb_Message* m,

upb/message/compare.c

Lines changed: 20 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -96,7 +96,8 @@ bool upb_Message_IsEmpty(const upb_Message* msg, const upb_MiniTable* m) {
9696
}
9797

9898
static bool _upb_Array_IsEqual(const upb_Array* arr1, const upb_Array* arr2,
99-
upb_CType ctype, const upb_MiniTable* m) {
99+
upb_CType ctype, const upb_MiniTable* m,
100+
int options) {
100101
// Check for trivial equality.
101102
if (arr1 == arr2) return true;
102103

@@ -109,14 +110,14 @@ static bool _upb_Array_IsEqual(const upb_Array* arr1, const upb_Array* arr2,
109110
const upb_MessageValue val1 = upb_Array_Get(arr1, i);
110111
const upb_MessageValue val2 = upb_Array_Get(arr2, i);
111112

112-
if (!upb_MessageValue_IsEqual(val1, val2, ctype, m)) return false;
113+
if (!upb_MessageValue_IsEqual(val1, val2, ctype, m, options)) return false;
113114
}
114115

115116
return true;
116117
}
117118

118119
static bool _upb_Map_IsEqual(const upb_Map* map1, const upb_Map* map2,
119-
const upb_MiniTable* m) {
120+
const upb_MiniTable* m, int options) {
120121
// Check for trivial equality.
121122
if (map1 == map2) return true;
122123

@@ -133,15 +134,17 @@ static bool _upb_Map_IsEqual(const upb_Map* map1, const upb_Map* map2,
133134
size_t iter = kUpb_Map_Begin;
134135
while (upb_Map_Next(map1, &key, &val1, &iter)) {
135136
if (!upb_Map_Get(map2, key, &val2)) return false;
136-
if (!upb_MessageValue_IsEqual(val1, val2, ctype, m2_value)) return false;
137+
if (!upb_MessageValue_IsEqual(val1, val2, ctype, m2_value, options))
138+
return false;
137139
}
138140

139141
return true;
140142
}
141143

142144
static bool _upb_Message_BaseFieldsAreEqual(const upb_Message* msg1,
143145
const upb_Message* msg2,
144-
const upb_MiniTable* m) {
146+
const upb_MiniTable* m,
147+
int options) {
145148
// Iterate over all base fields for each message.
146149
// The order will always match if the messages are equal.
147150
size_t iter1 = kUpb_BaseField_Begin;
@@ -164,13 +167,14 @@ static bool _upb_Message_BaseFieldsAreEqual(const upb_Message* msg1,
164167
bool eq;
165168
switch (UPB_PRIVATE(_upb_MiniTableField_Mode)(f1)) {
166169
case kUpb_FieldMode_Array:
167-
eq = _upb_Array_IsEqual(val1.array_val, val2.array_val, ctype, subm);
170+
eq = _upb_Array_IsEqual(val1.array_val, val2.array_val, ctype, subm,
171+
options);
168172
break;
169173
case kUpb_FieldMode_Map:
170-
eq = _upb_Map_IsEqual(val1.map_val, val2.map_val, subm);
174+
eq = _upb_Map_IsEqual(val1.map_val, val2.map_val, subm, options);
171175
break;
172176
case kUpb_FieldMode_Scalar:
173-
eq = upb_MessageValue_IsEqual(val1, val2, ctype, subm);
177+
eq = upb_MessageValue_IsEqual(val1, val2, ctype, subm, options);
174178
break;
175179
}
176180
if (!eq) return false;
@@ -179,7 +183,8 @@ static bool _upb_Message_BaseFieldsAreEqual(const upb_Message* msg1,
179183

180184
static bool _upb_Message_ExtensionsAreEqual(const upb_Message* msg1,
181185
const upb_Message* msg2,
182-
const upb_MiniTable* m) {
186+
const upb_MiniTable* m,
187+
int options) {
183188
// Must have identical extension counts.
184189
if (upb_Message_ExtensionCount(msg1) != upb_Message_ExtensionCount(msg2)) {
185190
return false;
@@ -204,13 +209,14 @@ static bool _upb_Message_ExtensionsAreEqual(const upb_Message* msg1,
204209
bool eq;
205210
switch (UPB_PRIVATE(_upb_MiniTableField_Mode)(f)) {
206211
case kUpb_FieldMode_Array:
207-
eq = _upb_Array_IsEqual(val1.array_val, val2.array_val, ctype, subm);
212+
eq = _upb_Array_IsEqual(val1.array_val, val2.array_val, ctype, subm,
213+
options);
208214
break;
209215
case kUpb_FieldMode_Map:
210216
UPB_UNREACHABLE(); // Maps cannot be extensions.
211217
break;
212218
case kUpb_FieldMode_Scalar: {
213-
eq = upb_MessageValue_IsEqual(val1, val2, ctype, subm);
219+
eq = upb_MessageValue_IsEqual(val1, val2, ctype, subm, options);
214220
break;
215221
}
216222
}
@@ -220,11 +226,11 @@ static bool _upb_Message_ExtensionsAreEqual(const upb_Message* msg1,
220226
}
221227

222228
bool upb_Message_IsEqual(const upb_Message* msg1, const upb_Message* msg2,
223-
const upb_MiniTable* m) {
229+
const upb_MiniTable* m, int options) {
224230
if (UPB_UNLIKELY(msg1 == msg2)) return true;
225231

226-
if (!_upb_Message_BaseFieldsAreEqual(msg1, msg2, m)) return false;
227-
if (!_upb_Message_ExtensionsAreEqual(msg1, msg2, m)) return false;
232+
if (!_upb_Message_BaseFieldsAreEqual(msg1, msg2, m, options)) return false;
233+
if (!_upb_Message_ExtensionsAreEqual(msg1, msg2, m, options)) return false;
228234

229235
// Check the unknown fields.
230236
size_t usize1, usize2;

upb/message/compare.h

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -30,13 +30,14 @@ UPB_API bool upb_Message_IsEmpty(const upb_Message* msg,
3030

3131
UPB_API bool upb_Message_IsEqual(const upb_Message* msg1,
3232
const upb_Message* msg2,
33-
const upb_MiniTable* m);
33+
const upb_MiniTable* m, int options);
3434

3535
// If |ctype| is a message then |m| must point to its minitable.
3636
UPB_API_INLINE bool upb_MessageValue_IsEqual(upb_MessageValue val1,
3737
upb_MessageValue val2,
3838
upb_CType ctype,
39-
const upb_MiniTable* m) {
39+
const upb_MiniTable* m,
40+
int options) {
4041
switch (ctype) {
4142
case kUpb_CType_Bool:
4243
return val1.bool_val == val2.bool_val;
@@ -57,7 +58,7 @@ UPB_API_INLINE bool upb_MessageValue_IsEqual(upb_MessageValue val1,
5758
return upb_StringView_IsEqual(val1.str_val, val2.str_val);
5859

5960
case kUpb_CType_Message:
60-
return upb_Message_IsEqual(val1.msg_val, val2.msg_val, m);
61+
return upb_Message_IsEqual(val1.msg_val, val2.msg_val, m, options);
6162

6263
default:
6364
UPB_UNREACHABLE();

0 commit comments

Comments
 (0)