Repository: thrift
Updated Branches:
  refs/heads/master 80a44f84f -> 7ca13f550


THRIFT-2526 Assignment operators and copy constructors in c++ don't copy the 
__isset struct

Client: cpp
Patch: Doug Judd


Project: http://git-wip-us.apache.org/repos/asf/thrift/repo
Commit: http://git-wip-us.apache.org/repos/asf/thrift/commit/7ca13f55
Tree: http://git-wip-us.apache.org/repos/asf/thrift/tree/7ca13f55
Diff: http://git-wip-us.apache.org/repos/asf/thrift/diff/7ca13f55

Branch: refs/heads/master
Commit: 7ca13f5507af5c67e0e93a2774f2b122374e0276
Parents: 80a44f8
Author: Roger Meier <[email protected]>
Authored: Thu May 29 22:40:32 2014 +0200
Committer: Roger Meier <[email protected]>
Committed: Thu May 29 22:40:32 2014 +0200

----------------------------------------------------------------------
 compiler/cpp/src/generate/t_cpp_generator.cc | 11 +++++++++++
 1 file changed, 11 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/thrift/blob/7ca13f55/compiler/cpp/src/generate/t_cpp_generator.cc
----------------------------------------------------------------------
diff --git a/compiler/cpp/src/generate/t_cpp_generator.cc 
b/compiler/cpp/src/generate/t_cpp_generator.cc
index f985492..771af46 100755
--- a/compiler/cpp/src/generate/t_cpp_generator.cc
+++ b/compiler/cpp/src/generate/t_cpp_generator.cc
@@ -831,11 +831,17 @@ void t_cpp_generator::generate_copy_constructor(
 
   const vector<t_field*>& members = tstruct->get_members();
   vector<t_field*>::const_iterator f_iter;
+  bool has_nonrequired_fields = false;
   for (f_iter = members.begin(); f_iter != members.end(); ++f_iter) {
+    if ((*f_iter)->get_req() != t_field::T_REQUIRED)
+      has_nonrequired_fields = true;
     indent(out) << (*f_iter)->get_name() << " = " << tmp_name << "." <<
       (*f_iter)->get_name() << ";" << endl;
   }
 
+  if (has_nonrequired_fields)
+    indent(out) << "__isset = " << tmp_name << ".__isset;" << endl;
+
   indent_down();
   indent(out) << "}" << endl;
 }
@@ -852,10 +858,15 @@ void t_cpp_generator::generate_assignment_operator(
 
   const vector<t_field*>& members = tstruct->get_members();
   vector<t_field*>::const_iterator f_iter;
+  bool has_nonrequired_fields = false;
   for (f_iter = members.begin(); f_iter != members.end(); ++f_iter) {
+    if ((*f_iter)->get_req() != t_field::T_REQUIRED)
+      has_nonrequired_fields = true;
     indent(out) << (*f_iter)->get_name() << " = " << tmp_name << "." <<
       (*f_iter)->get_name() << ";" << endl;
   }
+  if (has_nonrequired_fields)
+    indent(out) << "__isset = " << tmp_name << ".__isset;" << endl;
 
   indent(out) << "return *this;" << endl;
   indent_down();

Reply via email to