Go to the documentation of this file.
54 VALUE value_type_class;
60 rb_gc_mark(
self->value_type_class);
61 rb_gc_mark(
self->arena);
65 "Google::Protobuf::Map",
66 {
Map_mark, RUBY_DEFAULT_FREE, NULL },
67 .flags = RUBY_TYPED_FREE_IMMEDIATELY,
81 self->value_type_class = Qnil;
82 self->value_type_info.def.msgdef = NULL;
103 const upb_msgdef *val_m =
self->value_type_info.def.msgdef;
114 from->value_type_info.type);
123 ret.type =
self->key_type;
124 ret.def.msgdef = NULL;
129 rb_check_frozen(_self);
135 VALUE
hash = rb_hash_new();
146 rb_hash_aset(
hash, key_val, val_val);
177 if (!RB_TYPE_P(val, T_DATA) || !RTYPEDDATA_P(val) ||
178 RTYPEDDATA_TYPE(val) != &
Map_type) {
179 rb_raise(
cTypeError,
"Expected Map instance");
184 rb_raise(
cTypeError,
"Map key type does not match field's key type");
186 if (
self->value_type_info.type != value_type_info.
type) {
187 rb_raise(
cTypeError,
"Map value type does not match field's value type");
189 if (
self->value_type_info.def.msgdef != value_type_info.
def.
msgdef) {
190 rb_raise(
cTypeError,
"Map value type has wrong message/enum class");
231 if (
TYPE(hashmap) == T_HASH) {
233 }
else if (RB_TYPE_P(hashmap, T_DATA) && RTYPEDDATA_P(hashmap) &&
234 RTYPEDDATA_TYPE(hashmap) == &
Map_type) {
246 rb_raise(rb_eArgError,
"Attempt to merge Map with mismatching types");
255 rb_raise(rb_eArgError,
"Unknown type merging into Map");
290 static VALUE
Map_init(
int argc, VALUE* argv, VALUE _self) {
297 if (argc < 2 || argc > 4) {
298 rb_raise(rb_eArgError,
"Map constructor expects 2, 3 or 4 arguments.");
302 self->value_type_info =
307 switch (
self->key_type) {
318 rb_raise(rb_eArgError,
"Invalid key type for map.");
322 self->value_type_info.type);
325 if (init_arg != Qnil) {
349 rb_yield_values(2, key_val, val_val);
364 VALUE
ret = rb_ary_new();
369 rb_ary_push(
ret, key_val);
384 VALUE
ret = rb_ary_new();
389 rb_ary_push(
ret, val_val);
464 rb_check_frozen(_self);
540 VALUE
Map_eq(VALUE _self, VALUE _other) {
546 if (
TYPE(_other) == T_HASH) {
595 if (!RB_OBJ_FROZEN(_self)) {
597 RB_OBJ_FREEZE(_self);
613 TypeInfo key_info = {
self->key_type};
668 VALUE
klass = rb_define_class_under(
module,
"Map", rb_cObject);
670 rb_gc_register_address(&
cMap);
693 rb_include_module(
klass, rb_mEnumerable);
OPENSSL_EXPORT const ASN1_OBJECT * obj
static VALUE Map_each(VALUE _self)
upb_msgval Convert_RubyToUpb(VALUE value, const char *name, TypeInfo type_info, upb_arena *arena)
void StringBuilder_Free(StringBuilder *b)
VALUE Convert_UpbToRuby(upb_msgval upb_val, TypeInfo type_info, VALUE arena)
static VALUE Map_new_this_type(Map *from)
const upb_fielddef * map_field_key(const upb_fielddef *field)
static VALUE Map_merge_into_self(VALUE _self, VALUE hashmap)
VALUE Descriptor_DefToClass(const upb_msgdef *m)
void upb_map_clear(upb_map *map)
void Arena_Pin(VALUE _arena, VALUE obj)
#define PBRUBY_ASSERT(expr)
void Map_register(VALUE module)
TypeInfo TypeInfo_FromClass(int argc, VALUE *argv, int skip_arg, VALUE *type_class, VALUE *init_arg)
VALUE Map_eq(VALUE _self, VALUE _other)
upb_arena * Arena_get(VALUE _arena)
upb_fieldtype_t ruby_to_fieldtype(VALUE type)
static VALUE Map_keys(VALUE _self)
grpc_core::ScopedArenaPtr arena
bool Msgval_IsEqual(upb_msgval val1, upb_msgval val2, TypeInfo type_info)
static VALUE Map_alloc(VALUE klass)
VALUE Map_deep_copy(VALUE obj)
VALUE Map_CreateHash(const upb_map *map, upb_fieldtype_t key_type, TypeInfo val_info)
static TypeInfo TypeInfo_from_type(upb_fieldtype_t type)
upb_msgval upb_mapiter_key(const upb_map *map, size_t iter)
const upb_msgdef * msgdef
unsigned __int64 uint64_t
static int merge_into_self_callback(VALUE key, VALUE val, VALUE _self)
static VALUE Map_freeze(VALUE _self)
VALUE Map_hash(VALUE _self)
uint64_t Msgval_GetHash(upb_msgval val, TypeInfo type_info, uint64_t seed)
static VALUE Map_values(VALUE _self)
void StringBuilder_PrintMsgval(StringBuilder *b, upb_msgval val, TypeInfo info)
void ObjectCache_Add(const void *key, VALUE val)
const upb_fielddef * map_field_value(const upb_fielddef *field)
VALUE Map_inspect(VALUE _self)
static void Map_mark(void *_self)
void StringBuilder_Printf(StringBuilder *b, const char *fmt,...)
bool upb_map_delete(upb_map *map, upb_msgval key)
void Map_Inspect(StringBuilder *b, const upb_map *map, upb_fieldtype_t key_type, TypeInfo val_type)
static TypeInfo TypeInfo_get(const upb_fielddef *f)
VALUE Scalar_CreateHash(upb_msgval msgval, TypeInfo type_info)
static Map * ruby_to_Map(VALUE _self)
static VALUE Map_has_key(VALUE _self, VALUE key)
VALUE Map_to_h(VALUE _self)
const FieldDescriptor * field
VALUE StringBuilder_ToRubyString(StringBuilder *b)
static VALUE Map_index_set(VALUE _self, VALUE key, VALUE val)
static upb_map * Map_GetMutable(VALUE _self)
#define ALLOC(class_name)
UniquePtr< SSL_SESSION > ret
upb_msgval Msgval_DeepCopy(upb_msgval msgval, TypeInfo type_info, upb_arena *arena)
size_t upb_map_size(const upb_map *map)
StringBuilder * StringBuilder_New()
static VALUE Map_clear(VALUE _self)
upb_map * upb_map_new(upb_arena *a, upb_fieldtype_t key_type, upb_fieldtype_t value_type)
static TypeInfo Map_keyinfo(Map *self)
const rb_data_type_t Map_type
static VALUE Map_length(VALUE _self)
static VALUE Map_index(VALUE _self, VALUE key)
static VALUE Map_dup(VALUE _self)
PHP_PROTO_OBJECT_FREE_END PHP_PROTO_OBJECT_DTOR_END intern self
void Arena_fuse(VALUE _arena, upb_arena *other)
bool upb_map_set(upb_map *map, upb_msgval key, upb_msgval val, upb_arena *arena)
static VALUE Map_delete(VALUE _self, VALUE key)
VALUE Map_GetRubyWrapper(upb_map *map, upb_fieldtype_t key_type, TypeInfo value_type, VALUE arena)
VALUE ObjectCache_Get(const void *key)
bool upb_mapiter_next(const upb_map *map, size_t *iter)
upb_msgval upb_mapiter_value(const upb_map *map, size_t iter)
bool upb_map_get(const upb_map *map, upb_msgval key, upb_msgval *val)
upb_fieldtype_t upb_fielddef_type(const upb_fielddef *f)
static VALUE Map_init(int argc, VALUE *argv, VALUE _self)
static VALUE Map_merge(VALUE _self, VALUE hashmap)
const upb_map * Map_GetUpbMap(VALUE val, const upb_fielddef *field, upb_arena *arena)
grpc
Author(s):
autogenerated on Fri May 16 2025 02:59:18