Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(723)

Side by Side Diff: third_party/protobuf/ruby/ext/google/protobuf_c/repeated_field.c

Issue 2495533002: third_party/protobuf: Update to HEAD (83d681ee2c) (Closed)
Patch Set: Make chrome settings proto generated file a component Created 4 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Protocol Buffers - Google's data interchange format 1 // Protocol Buffers - Google's data interchange format
2 // Copyright 2014 Google Inc. All rights reserved. 2 // Copyright 2014 Google Inc. All rights reserved.
3 // https://developers.google.com/protocol-buffers/ 3 // https://developers.google.com/protocol-buffers/
4 // 4 //
5 // Redistribution and use in source and binary forms, with or without 5 // Redistribution and use in source and binary forms, with or without
6 // modification, are permitted provided that the following conditions are 6 // modification, are permitted provided that the following conditions are
7 // met: 7 // met:
8 // 8 //
9 // * Redistributions of source code must retain the above copyright 9 // * Redistributions of source code must retain the above copyright
10 // notice, this list of conditions and the following disclaimer. 10 // notice, this list of conditions and the following disclaimer.
(...skipping 226 matching lines...) Expand 10 before | Expand all | Expand 10 after
237 self->size++; 237 self->size++;
238 } 238 }
239 239
240 void* RepeatedField_index_native(VALUE _self, int index) { 240 void* RepeatedField_index_native(VALUE _self, int index) {
241 RepeatedField* self = ruby_to_RepeatedField(_self); 241 RepeatedField* self = ruby_to_RepeatedField(_self);
242 upb_fieldtype_t field_type = self->field_type; 242 upb_fieldtype_t field_type = self->field_type;
243 int element_size = native_slot_size(field_type); 243 int element_size = native_slot_size(field_type);
244 return RepeatedField_memoryat(self, index, element_size); 244 return RepeatedField_memoryat(self, index, element_size);
245 } 245 }
246 246
247 int RepeatedField_size(VALUE _self) {
248 RepeatedField* self = ruby_to_RepeatedField(_self);
249 return self->size;
250 }
251
247 /* 252 /*
248 * Private ruby method, used by RepeatedField.pop 253 * Private ruby method, used by RepeatedField.pop
249 */ 254 */
250 VALUE RepeatedField_pop_one(VALUE _self) { 255 VALUE RepeatedField_pop_one(VALUE _self) {
251 RepeatedField* self = ruby_to_RepeatedField(_self); 256 RepeatedField* self = ruby_to_RepeatedField(_self);
252 upb_fieldtype_t field_type = self->field_type; 257 upb_fieldtype_t field_type = self->field_type;
253 VALUE field_type_class = self->field_type_class; 258 VALUE field_type_class = self->field_type_class;
254 int element_size = native_slot_size(field_type); 259 int element_size = native_slot_size(field_type);
255 int index; 260 int index;
256 void* memory; 261 void* memory;
(...skipping 178 matching lines...) Expand 10 before | Expand all | Expand 10 after
435 } 440 }
436 441
437 /* 442 /*
438 * call-seq: 443 * call-seq:
439 * RepeatedField.hash => hash_value 444 * RepeatedField.hash => hash_value
440 * 445 *
441 * Returns a hash value computed from this repeated field's elements. 446 * Returns a hash value computed from this repeated field's elements.
442 */ 447 */
443 VALUE RepeatedField_hash(VALUE _self) { 448 VALUE RepeatedField_hash(VALUE _self) {
444 RepeatedField* self = ruby_to_RepeatedField(_self); 449 RepeatedField* self = ruby_to_RepeatedField(_self);
445 450 st_index_t h = rb_hash_start(0);
446 VALUE hash = LL2NUM(0); 451 VALUE hash_sym = rb_intern("hash");
447
448 upb_fieldtype_t field_type = self->field_type; 452 upb_fieldtype_t field_type = self->field_type;
449 VALUE field_type_class = self->field_type_class; 453 VALUE field_type_class = self->field_type_class;
450 size_t elem_size = native_slot_size(field_type); 454 size_t elem_size = native_slot_size(field_type);
451 size_t off = 0; 455 size_t off = 0;
452 for (int i = 0; i < self->size; i++, off += elem_size) { 456 for (int i = 0; i < self->size; i++, off += elem_size) {
453 void* mem = ((uint8_t *)self->elements) + off; 457 void* mem = ((uint8_t *)self->elements) + off;
454 VALUE elem = native_slot_get(field_type, field_type_class, mem); 458 VALUE elem = native_slot_get(field_type, field_type_class, mem);
455 hash = rb_funcall(hash, rb_intern("<<"), 1, INT2NUM(2)); 459 h = rb_hash_uint(h, NUM2LONG(rb_funcall(elem, hash_sym, 0)));
456 hash = rb_funcall(hash, rb_intern("^"), 1,
457 rb_funcall(elem, rb_intern("hash"), 0));
458 } 460 }
461 h = rb_hash_end(h);
459 462
460 return hash; 463 return INT2FIX(h);
461 } 464 }
462 465
463 /* 466 /*
464 * call-seq: 467 * call-seq:
465 * RepeatedField.+(other) => repeated field 468 * RepeatedField.+(other) => repeated field
466 * 469 *
467 * Returns a new repeated field that contains the concatenated list of this 470 * Returns a new repeated field that contains the concatenated list of this
468 * repeated field's elements and other's elements. The other (second) list may 471 * repeated field's elements and other's elements. The other (second) list may
469 * be either another repeated field or a Ruby array. 472 * be either another repeated field or a Ruby array.
470 */ 473 */
(...skipping 171 matching lines...) Expand 10 before | Expand all | Expand 10 after
642 rb_define_method(klass, "dup", RepeatedField_dup, 0); 645 rb_define_method(klass, "dup", RepeatedField_dup, 0);
643 // Also define #clone so that we don't inherit Object#clone. 646 // Also define #clone so that we don't inherit Object#clone.
644 rb_define_method(klass, "clone", RepeatedField_dup, 0); 647 rb_define_method(klass, "clone", RepeatedField_dup, 0);
645 rb_define_method(klass, "==", RepeatedField_eq, 1); 648 rb_define_method(klass, "==", RepeatedField_eq, 1);
646 rb_define_method(klass, "to_ary", RepeatedField_to_ary, 0); 649 rb_define_method(klass, "to_ary", RepeatedField_to_ary, 0);
647 rb_define_method(klass, "hash", RepeatedField_hash, 0); 650 rb_define_method(klass, "hash", RepeatedField_hash, 0);
648 rb_define_method(klass, "+", RepeatedField_plus, 1); 651 rb_define_method(klass, "+", RepeatedField_plus, 1);
649 rb_define_method(klass, "concat", RepeatedField_concat, 1); 652 rb_define_method(klass, "concat", RepeatedField_concat, 1);
650 rb_include_module(klass, rb_mEnumerable); 653 rb_include_module(klass, rb_mEnumerable);
651 } 654 }
OLDNEW
« no previous file with comments | « third_party/protobuf/ruby/ext/google/protobuf_c/protobuf.c ('k') | third_party/protobuf/ruby/ext/google/protobuf_c/storage.c » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698