Repository: thrift Updated Branches: refs/heads/master 53349926e -> 7f4be5f18
THRIFT-3382 - C++: TBase class for generated structs added Client: C++ Patch: Adam Beberg <[email protected]> TBase.h is now part of C++ Thrift library and TBase is used as base class for all structs generated from user defined structs (when not generating in template mode) This closes #653 Project: http://git-wip-us.apache.org/repos/asf/thrift/repo Commit: http://git-wip-us.apache.org/repos/asf/thrift/commit/673c9413 Tree: http://git-wip-us.apache.org/repos/asf/thrift/tree/673c9413 Diff: http://git-wip-us.apache.org/repos/asf/thrift/diff/673c9413 Branch: refs/heads/master Commit: 673c94137aa91e3efc2ee08bbd88f6ba1bbf3a2f Parents: 5334992 Author: Konrad Grochowski <[email protected]> Authored: Thu Nov 5 20:06:00 2015 +0100 Committer: Konrad Grochowski <[email protected]> Committed: Thu Nov 5 20:13:05 2015 +0100 ---------------------------------------------------------------------- compiler/cpp/src/generate/t_cpp_generator.cc | 13 +++++--- lib/cpp/Makefile.am | 3 +- lib/cpp/src/thrift/TBase.h | 38 +++++++++++++++++++++++ 3 files changed, 49 insertions(+), 5 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/thrift/blob/673c9413/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 782aa40..91c5b29 100644 --- a/compiler/cpp/src/generate/t_cpp_generator.cc +++ b/compiler/cpp/src/generate/t_cpp_generator.cc @@ -116,7 +116,7 @@ public: bool read = true, bool write = true, bool swap = false, - bool stream = false); + bool is_user_struct = false); void generate_struct_definition(std::ofstream& out, std::ofstream& force_cpp_out, t_struct* tstruct, @@ -368,6 +368,7 @@ void t_cpp_generator::init_generator() { << endl << "#include <thrift/Thrift.h>" << endl << "#include <thrift/TApplicationException.h>" << endl + << "#include <thrift/TBase.h>" << endl << "#include <thrift/protocol/TProtocol.h>" << endl << "#include <thrift/transport/TTransport.h>" << endl << endl; @@ -872,10 +873,14 @@ void t_cpp_generator::generate_struct_declaration(ofstream& out, bool read, bool write, bool swap, - bool stream) { + bool is_user_struct) { string extends = ""; if (is_exception) { extends = " : public ::apache::thrift::TException"; + } else { + if (is_user_struct && !gen_templates_) { + extends = " : public virtual ::apache::thrift::TBase"; + } } // Get members @@ -1082,7 +1087,7 @@ void t_cpp_generator::generate_struct_declaration(ofstream& out, } out << endl; - if (stream) { + if (is_user_struct) { out << indent() << "virtual "; generate_struct_print_method_decl(out, NULL); out << ";" << endl; @@ -1105,7 +1110,7 @@ void t_cpp_generator::generate_struct_declaration(ofstream& out, << " &b);" << endl << endl; } - if (stream) { + if (is_user_struct) { generate_struct_ostream_operator(out, tstruct); } } http://git-wip-us.apache.org/repos/asf/thrift/blob/673c9413/lib/cpp/Makefile.am ---------------------------------------------------------------------- diff --git a/lib/cpp/Makefile.am b/lib/cpp/Makefile.am index 80e8917..dac840a 100755 --- a/lib/cpp/Makefile.am +++ b/lib/cpp/Makefile.am @@ -159,7 +159,8 @@ include_thrift_HEADERS = \ src/thrift/TApplicationException.h \ src/thrift/TLogging.h \ src/thrift/cxxfunctional.h \ - src/thrift/TToString.h + src/thrift/TToString.h \ + src/thrift/TBase.h include_concurrencydir = $(include_thriftdir)/concurrency include_concurrency_HEADERS = \ http://git-wip-us.apache.org/repos/asf/thrift/blob/673c9413/lib/cpp/src/thrift/TBase.h ---------------------------------------------------------------------- diff --git a/lib/cpp/src/thrift/TBase.h b/lib/cpp/src/thrift/TBase.h new file mode 100644 index 0000000..a274bcd --- /dev/null +++ b/lib/cpp/src/thrift/TBase.h @@ -0,0 +1,38 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +#ifndef _THRIFT_TBASE_H_ +#define _THRIFT_TBASE_H_ 1 + +#include <thrift/Thrift.h> +#include <thrift/protocol/TProtocol.h> + +namespace apache { +namespace thrift { + +class TBase { +public: + virtual ~TBase(){}; + virtual uint32_t read(protocol::TProtocol* iprot) = 0; + virtual uint32_t write(protocol::TProtocol* oprot) const = 0; +}; +} +} // apache::thrift + +#endif // #ifndef _THRIFT_TBASE_H_
