From b7f58ff3468149a0a49c43bf3798aed008dc8764 Mon Sep 17 00:00:00 2001 From: Mark Slee Date: Sat, 2 Sep 2006 21:59:28 +0000 Subject: [PATCH] More Thfirt code-gen improvements Summary: Move read/write struct methods into PHP class definition, make struct read non-static in Java git-svn-id: https://svn.apache.org/repos/asf/incubator/thrift/trunk@664776 13f79535-47bb-0310-9956-ffa450edef68 --- compiler/cpp/src/generate/t_java_generator.cc | 29 +++++++------- compiler/cpp/src/generate/t_php_generator.cc | 38 +++++++++---------- 2 files changed, 33 insertions(+), 34 deletions(-) diff --git a/compiler/cpp/src/generate/t_java_generator.cc b/compiler/cpp/src/generate/t_java_generator.cc index 1b466f70..66361d5f 100644 --- a/compiler/cpp/src/generate/t_java_generator.cc +++ b/compiler/cpp/src/generate/t_java_generator.cc @@ -174,12 +174,13 @@ void t_java_generator::generate_java_struct_definition(ofstream &out, generate_java_struct_writer(out, tstruct); } scope_down(out); + out << endl; } void t_java_generator::generate_java_struct_reader(ofstream& out, t_struct* tstruct) { out << - indent() << "public static " << tstruct->get_name() << " read(TProtocol _iprot, TTransport _itrans) throws TException {" << endl; + indent() << "public void read(TProtocol _iprot, TTransport _itrans) throws TException {" << endl; indent_up(); const vector& fields = tstruct->get_members(); @@ -187,7 +188,6 @@ void t_java_generator::generate_java_struct_reader(ofstream& out, // Declare stack tmp variables out << - indent() << tstruct->get_name() << " _value = new " << tstruct->get_name() << "();" << endl << indent() << "TField _field;" << endl << indent() << "TStruct _struct = _iprot.readStructBegin(_itrans);" << endl; @@ -222,9 +222,9 @@ void t_java_generator::generate_java_struct_reader(ofstream& out, indent(out) << "case " << (*f_iter)->get_key() << ":" << endl; indent_up(); - generate_deserialize_field(out, *f_iter, "_value."); + generate_deserialize_field(out, *f_iter, "this."); out << - indent() << "_value.__isset." << (*f_iter)->get_name() << " = true;" << endl; + indent() << "this.__isset." << (*f_iter)->get_name() << " = true;" << endl; indent(out) << "break;" << endl; indent_down(); @@ -245,8 +245,7 @@ void t_java_generator::generate_java_struct_reader(ofstream& out, scope_down(out); out << - indent() << "_iprot.readStructEnd(_itrans);" << endl << - indent() << "return _value;" << endl; + indent() << "_iprot.readStructEnd(_itrans);" << endl; indent_down(); out << @@ -290,8 +289,7 @@ void t_java_generator::generate_java_struct_writer(ofstream& out, indent_down(); out << - indent() << "}" << endl << - endl; + indent() << "}" << endl; } void t_java_generator::generate_java_struct_result_writer(ofstream& out, @@ -545,7 +543,8 @@ void t_java_generator::generate_service_client(t_service* tservice) { f_service_ << indent() << "TMessage _msg = _iprot.readMessageBegin(_itrans);" << endl << - indent() << resultname << " __result = " << resultname << ".read(_iprot, _itrans);" << endl << + indent() << resultname << " __result = new " << resultname << "();" << endl << + indent() << "__result.read(_iprot, _itrans);" << endl << indent() << "_iprot.readMessageEnd(_itrans);" << endl << endl; @@ -722,7 +721,8 @@ void t_java_generator::generate_process_function(t_service* tservice, string resultname = tfunction->get_name() + "_result"; f_service_ << - indent() << argsname << " __args = " << argsname << ".read(_iprot, _itrans);" << endl << + indent() << argsname << " __args = new " << argsname << "();" << endl << + indent() << "__args.read(_iprot, _itrans);" << endl << indent() << "_iprot.readMessageEnd(_itrans);" << endl; t_struct* xs = tfunction->get_xceptions(); @@ -890,7 +890,8 @@ void t_java_generator::generate_deserialize_struct(ofstream& out, t_struct* tstruct, string prefix) { out << - indent() << prefix << " = " << tstruct->get_name() << ".read(_iprot, _itrans);" << endl; + indent() << prefix << " = new " << tstruct->get_name() << "();" << endl << + indent() << prefix << ".read(_iprot, _itrans);" << endl; } void t_java_generator::generate_deserialize_container(ofstream& out, @@ -1292,10 +1293,12 @@ string t_java_generator::declare_field(t_field* tfield, bool init) { break; } - } else if (ttype->is_enum()) { + } else if (ttype->is_enum()) { result += " = 0"; + } else if (ttype->is_container()) { + result += " = new " + type_name(ttype) + "()"; } else { - result += " = new " + type_name(tfield->get_type()) + "()"; + result += " = null"; } } return result + ";"; diff --git a/compiler/cpp/src/generate/t_php_generator.cc b/compiler/cpp/src/generate/t_php_generator.cc index 6f4b76ad..74b73b9e 100644 --- a/compiler/cpp/src/generate/t_php_generator.cc +++ b/compiler/cpp/src/generate/t_php_generator.cc @@ -118,8 +118,6 @@ void t_php_generator::generate_xception(t_struct* txception) { void t_php_generator::generate_php_struct(t_struct* tstruct, bool is_exception) { generate_php_struct_definition(f_types_, tstruct, is_exception); - generate_php_struct_reader(f_types_, tstruct); - generate_php_struct_writer(f_types_, tstruct); } /** @@ -153,8 +151,12 @@ void t_php_generator::generate_php_struct_definition(ofstream& out, "public $" << (*m_iter)->get_name() << " = null;" << endl; } - indent_down(); + out << endl; + + generate_php_struct_reader(out, tstruct); + generate_php_struct_writer(out, tstruct); + indent_down(); out << indent() << "}" << endl << endl; @@ -166,8 +168,7 @@ void t_php_generator::generate_php_struct_reader(ofstream& out, vector::const_iterator f_iter; indent(out) << - "function read_struct_" << tstruct->get_name() << - "($iprot, $itrans, &$value) " << endl; + "public function read($iprot, $itrans) " << endl; scope_up(out); out << @@ -223,7 +224,7 @@ void t_php_generator::generate_php_struct_reader(ofstream& out, indent(out) << "case " << (*f_iter)->get_key() << ":" << endl; indent_up(); - generate_deserialize_field(out, *f_iter, "value->"); + generate_deserialize_field(out, *f_iter, "this->"); indent(out) << "break;" << endl; indent_down(); @@ -267,12 +268,10 @@ void t_php_generator::generate_php_struct_writer(ofstream& out, if (binary_inline_) { indent(out) << - "function write_struct_" << name << - "(&$_output, &$value) {" << endl; + "public function write(&$_output) {" << endl; } else { indent(out) << - "function write_struct_" << name << - "($oprot, $otrans, &$value) {" << endl; + "public function write($oprot, $otrans) {" << endl; } indent_up(); @@ -299,7 +298,7 @@ void t_php_generator::generate_php_struct_writer(ofstream& out, } // Write field contents - generate_serialize_field(out, *f_iter, "value->"); + generate_serialize_field(out, *f_iter, "this->"); // Write field closer if (!binary_inline_) { @@ -370,8 +369,6 @@ void t_php_generator::generate_service_helpers(t_service* tservice) { for (f_iter = functions.begin(); f_iter != functions.end(); ++f_iter) { t_struct* ts = (*f_iter)->get_arglist(); generate_php_struct_definition(f_service_, ts, false); - generate_php_struct_reader(f_service_, ts); - generate_php_struct_writer(f_service_, ts); generate_php_function_helpers(*f_iter); } } @@ -396,7 +393,6 @@ void t_php_generator::generate_php_function_helpers(t_function* tfunction) { } generate_php_struct_definition(f_service_, &result, false); - generate_php_struct_reader(f_service_, &result); } /** @@ -543,11 +539,11 @@ void t_php_generator::generate_service_client(t_service* tservice) { // Write to the stream if (binary_inline_) { f_service_ << - indent() << "write_struct_" << argsname << "($_output, $__args);" << endl << + indent() << "$__args->write($_output, $__args);" << endl << indent() << "$this->_otrans->write($_output);" << endl; } else { f_service_ << - indent() << "write_struct_" << argsname << "($this->_oprot, $this->_otrans, $__args);" << endl << + indent() << "$__args->write($this->_oprot, $this->_otrans);" << endl << indent() << "$this->_oprot->writeMessageEnd($this->_otrans);" << endl; } @@ -594,7 +590,7 @@ void t_php_generator::generate_service_client(t_service* tservice) { f_service_ << indent() << "$__result = new " << resultname << "();" << endl << - indent() << "read_struct_" << resultname << "($this->_iprot, $this->_otrans, $__result);" << endl; + indent() << "$__result->read($this->_iprot, $this->_otrans);" << endl; if (!binary_inline_) { f_service_ << @@ -794,7 +790,7 @@ void t_php_generator::generate_deserialize_struct(ofstream &out, string prefix) { out << indent() << "$" << prefix << " = new " << tstruct->get_name() << "();" << endl << - indent() << "$xfer += read_struct_" << tstruct->get_name() << "($iprot, $itrans, $" << prefix << ");" << endl; + indent() << "$xfer += $" << prefix << "->read($iprot, $itrans);" << endl; } void t_php_generator::generate_deserialize_container(ofstream &out, @@ -1067,10 +1063,10 @@ void t_php_generator::generate_serialize_struct(ofstream &out, string prefix) { if (binary_inline_) { indent(out) << - "$xfer += write_struct_" << tstruct->get_name() << "($_output, $" << prefix << ");" << endl; + "$xfer += $" << prefix << "->write($_output);" << endl; } else { indent(out) << - "$xfer += write_struct_" << tstruct->get_name() << "($oprot, $otrans, $" << prefix << ");" << endl; + "$xfer += $" << prefix << "->write($oprot, $otrans);" << endl; } } @@ -1363,7 +1359,7 @@ string t_php_generator ::type_to_enum(t_type* type) { } } else if (type->is_enum()) { return "TType::I32"; - } else if (type->is_struct()) { + } else if (type->is_struct() || type->is_xception()) { return "TType::STRUCT"; } else if (type->is_map()) { return "TType::MAP"; -- 2.17.1