THRIFT-2421: Tree/Recursive struct support in thrift
Client: cpp
also fix mixed tabs and ignore RecursiveTest binary
diff --git a/.gitignore b/.gitignore
index 90d5308..bff0826 100644
--- a/.gitignore
+++ b/.gitignore
@@ -19,14 +19,15 @@
*.swp
*.m4
*~
+
+.*project
+junit*.properties
gen-*
Makefile
Makefile.in
autom4te.cache
node_modules
-.project
-.pydevproject
.sonar
.DS_Store
.svn
@@ -75,6 +76,7 @@
/lib/cpp/test/OptionalRequiredTest
/lib/cpp/test/SpecializationTest
/lib/cpp/test/ReflectionTest
+/lib/cpp/test/RecursiveTest
/lib/cpp/test/TFDTransportTest
/lib/cpp/test/TFileTransportTest
/lib/cpp/test/TPipedTransportTest
diff --git a/compiler/cpp/src/generate/t_cpp_generator.cc b/compiler/cpp/src/generate/t_cpp_generator.cc
index c9a44ef..92eab2f 100755
--- a/compiler/cpp/src/generate/t_cpp_generator.cc
+++ b/compiler/cpp/src/generate/t_cpp_generator.cc
@@ -157,7 +157,7 @@
void generate_deserialize_struct (std::ofstream& out,
t_struct* tstruct,
std::string prefix="",
- bool pointer=false);
+ bool pointer=false);
void generate_deserialize_container (std::ofstream& out,
t_type* ttype,
@@ -185,7 +185,7 @@
void generate_serialize_struct (std::ofstream& out,
t_struct* tstruct,
std::string prefix="",
- bool pointer=false);
+ bool pointer=false);
void generate_serialize_container (std::ofstream& out,
t_type* ttype,
@@ -864,7 +864,7 @@
indent(out) << "if (this == &" << tmp_name << ") return *this;" << endl;
indent(out) << "if (" << (*f_iter)->get_name() << ") {" << endl;
indent(out) << " *" << (*f_iter)->get_name() << " = *" << tmp_name << "." <<
- (*f_iter)->get_name() << ";" << endl;
+ (*f_iter)->get_name() << ";" << endl;
indent(out) << "} else {" << endl;
indent(out) << " " << (*f_iter)->get_name() << " = new " << type << "(*" << tmp_name << "." <<
(*f_iter)->get_name() << ");" << endl;
@@ -1137,8 +1137,8 @@
}
void t_cpp_generator::generate_struct_definition(ofstream& out,
- t_struct* tstruct,
- bool setters) {
+ t_struct* tstruct,
+ bool setters) {
// Get members
vector<t_field*>::const_iterator m_iter;
const vector<t_field*>& members = tstruct->get_members();
@@ -1153,8 +1153,8 @@
for (m_iter = members.begin(); m_iter != members.end(); ++m_iter) {
if (is_reference(*m_iter)) {
- out << indent() <<
- "delete " << (*m_iter)->get_name() << ";" << endl;
+ out << indent() <<
+ "delete " << (*m_iter)->get_name() << ";" << endl;
}
}
@@ -1166,20 +1166,20 @@
if (setters) {
for (m_iter = members.begin(); m_iter != members.end(); ++m_iter) {
out <<
- endl <<
- indent() << "void " << tstruct->get_name() << "::__set_" << (*m_iter)->get_name() <<
+ endl <<
+ indent() << "void " << tstruct->get_name() << "::__set_" << (*m_iter)->get_name() <<
"(" << type_name((*m_iter)->get_type(), false, true);
out << " val) {" << endl;
indent_up();
if (is_reference((*m_iter))) {
- std::string type = type_name((*m_iter)->get_type());
- indent(out) << "if (" << (*m_iter)->get_name() << ") {" << endl;
- indent(out) << " *" << (*m_iter)->get_name() << " = val;" << endl;
- indent(out) << "} else {" << endl;
- indent(out) << " " << (*m_iter)->get_name() << " = new " << type << "(val);" << endl;
- indent(out) << "}" << endl;
+ std::string type = type_name((*m_iter)->get_type());
+ indent(out) << "if (" << (*m_iter)->get_name() << ") {" << endl;
+ indent(out) << " *" << (*m_iter)->get_name() << " = val;" << endl;
+ indent(out) << "} else {" << endl;
+ indent(out) << " " << (*m_iter)->get_name() << " = new " << type << "(val);" << endl;
+ indent(out) << "}" << endl;
} else {
- out << indent() << (*m_iter)->get_name() << " = val;" << endl;
+ out << indent() << (*m_iter)->get_name() << " = val;" << endl;
}
indent_down();
@@ -1187,12 +1187,12 @@
// for optional fields change __isset.name to true
bool is_optional = (*m_iter)->get_req() == t_field::T_OPTIONAL;
if (is_optional) {
- out <<
- indent() <<
- indent() << "__isset." << (*m_iter)->get_name() << " = true;" << endl;
+ out <<
+ indent() <<
+ indent() << "__isset." << (*m_iter)->get_name() << " = true;" << endl;
}
out <<
- indent()<< "}" << endl;
+ indent()<< "}" << endl;
}
}
out << endl;
@@ -4075,7 +4075,7 @@
void t_cpp_generator::generate_deserialize_struct(ofstream& out,
t_struct* tstruct,
string prefix,
- bool pointer) {
+ bool pointer) {
if (pointer) {
indent(out) << "if (!" << prefix << ") { " << endl;
indent(out) << " " << prefix << " = new " << type_name(tstruct) << ";" << endl;
@@ -4247,7 +4247,7 @@
generate_serialize_struct(out,
(t_struct*)type,
name,
- is_reference(tfield));
+ is_reference(tfield));
} else if (type->is_container()) {
generate_serialize_container(out, type, name);
} else if (type->is_base_type() || type->is_enum()) {
@@ -4311,7 +4311,7 @@
void t_cpp_generator::generate_serialize_struct(ofstream& out,
t_struct* tstruct,
string prefix,
- bool pointer) {
+ bool pointer) {
if (pointer) {
indent(out) << "if (" << prefix << ") {" << endl;
indent(out) << " xfer += " << prefix << "->write(oprot); " << endl;