From b2507dbb0c9869acb8ff7fab6d3cd5b415a7c6ec Mon Sep 17 00:00:00 2001 From: Bryan Duxbury Date: Wed, 22 Feb 2012 21:14:10 +0000 Subject: [PATCH] THRIFT-1518. cpp: Generated C++ code only sends the first optional field in the write() function for a struct There was some incorrect else if logic added to the CPP generated code, which this patch replaces with the proper functionality. Patch: Thomas Wiggins git-svn-id: https://svn.apache.org/repos/asf/thrift/trunk@1292508 13f79535-47bb-0310-9956-ffa450edef68 --- compiler/cpp/src/generate/t_cpp_generator.cc | 20 +++----------------- 1 file changed, 3 insertions(+), 17 deletions(-) diff --git a/compiler/cpp/src/generate/t_cpp_generator.cc b/compiler/cpp/src/generate/t_cpp_generator.cc index db19c90c..08a6fbea 100755 --- a/compiler/cpp/src/generate/t_cpp_generator.cc +++ b/compiler/cpp/src/generate/t_cpp_generator.cc @@ -1368,26 +1368,14 @@ void t_cpp_generator::generate_struct_writer(ofstream& out, indent(out) << "xfer += oprot->writeStructBegin(\"" << name << "\");" << endl; - bool first = true; for (f_iter = fields.begin(); f_iter != fields.end(); ++f_iter) { bool check_if_set = (*f_iter)->get_req() == t_field::T_OPTIONAL || (*f_iter)->get_type()->is_xception(); if (check_if_set) { - if (first) { - first = false; - out << - endl << - indent() << "if "; - } else { - out << - " else if "; - } - out << "(this->__isset." << (*f_iter)->get_name() << ") {" << endl; + out << endl << indent() << "if (this->__isset." << (*f_iter)->get_name() << ") {" << endl; indent_up(); } else { - if (!first) - out << endl; - first = true; + out << endl; } // Write field header @@ -1411,9 +1399,7 @@ void t_cpp_generator::generate_struct_writer(ofstream& out, } } - if (!first) { - out << endl; - } + out << endl; // Write the struct map out << -- 2.17.1