|
@@ -511,8 +511,8 @@ VALUE Message_dup(VALUE _self) {
|
|
|
return new_msg;
|
|
|
}
|
|
|
|
|
|
-/* :nodoc: */
|
|
|
-static VALUE Message_deep_copy(VALUE _self) {
|
|
|
+// Internal only; used by Google::Protobuf.deep_copy.
|
|
|
+VALUE Message_deep_copy(VALUE _self) {
|
|
|
MessageHeader* self;
|
|
|
MessageHeader* new_msg_self;
|
|
|
VALUE new_msg;
|
|
@@ -742,7 +742,6 @@ VALUE build_class_from_descriptor(Descriptor* desc) {
|
|
|
rb_define_method(klass, "to_s", Message_inspect, 0);
|
|
|
rb_define_method(klass, "[]", Message_index, 1);
|
|
|
rb_define_method(klass, "[]=", Message_index_set, 2);
|
|
|
- rb_define_method(klass, "deep_copy", Message_deep_copy, 0);
|
|
|
rb_define_singleton_method(klass, "decode", Message_decode, 1);
|
|
|
rb_define_singleton_method(klass, "encode", Message_encode, 1);
|
|
|
rb_define_singleton_method(klass, "decode_json", Message_decode_json, -1);
|
|
@@ -830,3 +829,21 @@ VALUE build_module_from_enumdesc(EnumDescriptor* enumdesc) {
|
|
|
|
|
|
return mod;
|
|
|
}
|
|
|
+
|
|
|
+/*
|
|
|
+ * call-seq:
|
|
|
+ * Google::Protobuf.deep_copy(obj) => copy_of_obj
|
|
|
+ *
|
|
|
+ * Performs a deep copy of a RepeatedField instance, a Map instance, or a
|
|
|
+ * message object, recursively copying its members.
|
|
|
+ */
|
|
|
+VALUE Google_Protobuf_deep_copy(VALUE self, VALUE obj) {
|
|
|
+ VALUE klass = CLASS_OF(obj);
|
|
|
+ if (klass == cRepeatedField) {
|
|
|
+ return RepeatedField_deep_copy(obj);
|
|
|
+ } else if (klass == cMap) {
|
|
|
+ return Map_deep_copy(obj);
|
|
|
+ } else {
|
|
|
+ return Message_deep_copy(obj);
|
|
|
+ }
|
|
|
+}
|