upb: implement upb_MiniTable_MapKey() and upb_MiniTable_MapValue()

PiperOrigin-RevId: 588418734
pull/14942/head
Eric Salo 1 year ago committed by Copybara-Service
parent 79009d9237
commit b83a1fece1
  1. 18
      upb/mini_table/internal/message.h
  2. 19
      upb/mini_table/message.h

@ -112,6 +112,24 @@ UPB_INLINE const struct upb_MiniTableEnum* UPB_PRIVATE(
m->UPB_PRIVATE(subs)[f->UPB_PRIVATE(submsg_index)]);
}
UPB_INLINE const struct upb_MiniTableField* UPB_PRIVATE(_upb_MiniTable_MapKey)(
const struct upb_MiniTable* m) {
UPB_ASSERT(UPB_PRIVATE(_upb_MiniTable_FieldCount)(m) == 2);
const struct upb_MiniTableField* f =
UPB_PRIVATE(_upb_MiniTable_GetFieldByIndex)(m, 0);
UPB_ASSERT(UPB_PRIVATE(_upb_MiniTableField_Number)(f) == 1);
return f;
}
UPB_INLINE const struct upb_MiniTableField* UPB_PRIVATE(
_upb_MiniTable_MapValue)(const struct upb_MiniTable* m) {
UPB_ASSERT(UPB_PRIVATE(_upb_MiniTable_FieldCount)(m) == 2);
const struct upb_MiniTableField* f =
UPB_PRIVATE(_upb_MiniTable_GetFieldByIndex)(m, 1);
UPB_ASSERT(UPB_PRIVATE(_upb_MiniTableField_Number)(f) == 2);
return f;
}
UPB_INLINE bool UPB_PRIVATE(_upb_MiniTable_MessageFieldIsLinked)(
const struct upb_MiniTable* m, const struct upb_MiniTableField* f) {
return UPB_PRIVATE(_upb_MiniTable_GetSubMessageTable)(m, f) != NULL;

@ -46,6 +46,18 @@ UPB_API_INLINE const upb_MiniTableEnum* upb_MiniTable_GetSubEnumTable(
return UPB_PRIVATE(_upb_MiniTable_GetSubEnumTable)(m, f);
}
// Returns the MiniTableField for the key of a map.
UPB_API_INLINE const upb_MiniTableField* upb_MiniTable_MapKey(
const upb_MiniTable* m) {
return UPB_PRIVATE(_upb_MiniTable_MapKey)(m);
}
// Returns the MiniTableField for the value of a map.
UPB_API_INLINE const upb_MiniTableField* upb_MiniTable_MapValue(
const upb_MiniTable* m) {
return UPB_PRIVATE(_upb_MiniTable_MapValue)(m);
}
// Returns true if this MiniTable field is linked to a MiniTable for the
// sub-message.
UPB_API_INLINE bool upb_MiniTable_MessageFieldIsLinked(
@ -53,13 +65,6 @@ UPB_API_INLINE bool upb_MiniTable_MessageFieldIsLinked(
return UPB_PRIVATE(_upb_MiniTable_MessageFieldIsLinked)(m, f);
}
// TODO: Implement convenience getters for map entries:
//
// upb_MiniTable_GetMapKey()
// upb_MiniTable_GetMapValue()
// These could also assert that this is indeed a map entry (well, as best we
// can. We can assert that there are two fields with field numbers 1 and 2).
// If this field is in a oneof, returns the first field in the oneof.
//
// Otherwise returns NULL.

Loading…
Cancel
Save