Factor out duplicated code into helper function
diff --git a/compiler/cpp/src/thrift/generate/t_cpp_generator.cc b/compiler/cpp/src/thrift/generate/t_cpp_generator.cc
index fecfa4b..a77982f 100644
--- a/compiler/cpp/src/thrift/generate/t_cpp_generator.cc
+++ b/compiler/cpp/src/thrift/generate/t_cpp_generator.cc
@@ -302,6 +302,12 @@
*/
bool is_struct_storage_not_throwing(t_struct* tstruct) const;
+ /**
+ * Helper function to determine whether any of the members of our struct
+ * has a default value.
+ */
+ bool has_field_with_default_value(t_struct* tstruct);
+
private:
/**
* Returns the include prefix to use for a file generated by program, or the
@@ -968,6 +974,24 @@
out << "\n";
}
+bool t_cpp_generator::has_field_with_default_value(t_struct* tstruct)
+{
+ vector<t_field*>::const_iterator m_iter;
+ const vector<t_field*>& members = tstruct->get_members();
+
+ for (m_iter = members.begin(); m_iter != members.end(); ++m_iter) {
+ t_type* t = get_true_type((*m_iter)->get_type());
+ if (is_reference(*m_iter) || t->is_string()) {
+ t_const_value* cv = (*m_iter)->get_value();
+ if (cv != nullptr) {
+ return true;
+ }
+ }
+ }
+
+ return false;
+}
+
void t_cpp_generator::generate_default_constructor(ostream& out,
t_struct* tstruct,
bool is_exception) {
@@ -975,18 +999,7 @@
vector<t_field*>::const_iterator m_iter;
const vector<t_field*>& members = tstruct->get_members();
- // TODO(barth) this is duplicated from generate_struct_declaration
- bool has_default_value = false;
- for (m_iter = members.begin(); m_iter != members.end(); ++m_iter) {
- t_type* t = get_true_type((*m_iter)->get_type());
- if (is_reference(*m_iter) || t->is_string()) {
- t_const_value* cv = (*m_iter)->get_value();
- if (cv != nullptr) {
- has_default_value = true;
- break;
- }
- }
- }
+ bool has_default_value = has_field_with_default_value(tstruct);
std::string clsname_ctor = tstruct->get_name() + "::" + tstruct->get_name() + "()";
indent(out) << clsname_ctor << (has_default_value ? "" : " noexcept");
@@ -1271,18 +1284,8 @@
<< endl;
}
- bool has_default_value = false;
- for (m_iter = members.begin(); m_iter != members.end(); ++m_iter) {
- t_type* t = get_true_type((*m_iter)->get_type());
- if (is_reference(*m_iter) || t->is_string()) {
- t_const_value* cv = (*m_iter)->get_value();
- if (cv != nullptr) {
- has_default_value = true;
- break;
- }
- }
- }
-
+ bool has_default_value = has_field_with_default_value(tstruct);
+
// Default constructor
std::string clsname_ctor = tstruct->get_name() + "()";
indent(out) << clsname_ctor << (has_default_value ? "" : " noexcept") << ";" << endl;