You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@thrift.apache.org by hc...@apache.org on 2014/11/18 10:02:59 UTC
[31/37] thrift git commit: THRIFT-2729: C++ - .clang-format created
and applied
http://git-wip-us.apache.org/repos/asf/thrift/blob/74260aa9/compiler/cpp/src/generate/t_d_generator.cc
----------------------------------------------------------------------
diff --git a/compiler/cpp/src/generate/t_d_generator.cc b/compiler/cpp/src/generate/t_d_generator.cc
index 622fb29..ca76485 100644
--- a/compiler/cpp/src/generate/t_d_generator.cc
+++ b/compiler/cpp/src/generate/t_d_generator.cc
@@ -43,7 +43,7 @@ using std::set;
using std::string;
using std::vector;
-static const string endl = "\n"; // avoid ostream << std::endl flushes
+static const string endl = "\n"; // avoid ostream << std::endl flushes
/**
* D code generator.
@@ -54,19 +54,17 @@ static const string endl = "\n"; // avoid ostream << std::endl flushes
* the passed entity.
*/
class t_d_generator : public t_oop_generator {
- public:
- t_d_generator(
- t_program* program,
- const std::map<string, string>& parsed_options,
- const string& option_string)
- : t_oop_generator(program)
- {
- (void) parsed_options;
- (void) option_string;
+public:
+ t_d_generator(t_program* program,
+ const std::map<string, string>& parsed_options,
+ const string& option_string)
+ : t_oop_generator(program) {
+ (void)parsed_options;
+ (void)option_string;
out_dir_base_ = "gen-d";
}
- protected:
+protected:
virtual void init_generator() {
// Make output directory
MKDIR(get_out_dir().c_str());
@@ -77,7 +75,7 @@ class t_d_generator : public t_oop_generator {
while ((loc = dir.find(".")) != string::npos) {
subdir = subdir + "/" + dir.substr(0, loc);
MKDIR(subdir.c_str());
- dir = dir.substr(loc+1);
+ dir = dir.substr(loc + 1);
}
if (!dir.empty()) {
subdir = subdir + "/" + dir;
@@ -91,21 +89,19 @@ class t_d_generator : public t_oop_generator {
f_types_.open(f_types_name.c_str());
// Print header
- f_types_ <<
- autogen_comment() <<
- "module " << render_package(*program_) << program_name_ << "_types;" << endl <<
- endl;
+ f_types_ << autogen_comment() << "module " << render_package(*program_) << program_name_
+ << "_types;" << endl << endl;
print_default_imports(f_types_);
// Include type modules from other imported programs.
const vector<t_program*>& includes = program_->get_includes();
for (size_t i = 0; i < includes.size(); ++i) {
- f_types_ <<
- "import " << render_package(*(includes[i])) <<
- includes[i]->get_name() << "_types;" << endl;
+ f_types_ << "import " << render_package(*(includes[i])) << includes[i]->get_name()
+ << "_types;" << endl;
}
- if (!includes.empty()) f_types_ << endl;
+ if (!includes.empty())
+ f_types_ << endl;
}
virtual void close_generator() {
@@ -115,32 +111,26 @@ class t_d_generator : public t_oop_generator {
virtual void generate_consts(std::vector<t_const*> consts) {
if (!consts.empty()) {
- string f_consts_name = package_dir_+program_name_+"_constants.d";
+ string f_consts_name = package_dir_ + program_name_ + "_constants.d";
ofstream f_consts;
f_consts.open(f_consts_name.c_str());
- f_consts <<
- autogen_comment() <<
- "module " << render_package(*program_) << program_name_ << "_constants;" << endl
- << endl;
+ f_consts << autogen_comment() << "module " << render_package(*program_) << program_name_
+ << "_constants;" << endl << endl;
print_default_imports(f_consts);
- f_consts <<
- "import " << render_package(*get_program()) << program_name_ << "_types;" << endl <<
- endl;
+ f_consts << "import " << render_package(*get_program()) << program_name_ << "_types;" << endl
+ << endl;
vector<t_const*>::iterator c_iter;
for (c_iter = consts.begin(); c_iter != consts.end(); ++c_iter) {
string name = (*c_iter)->get_name();
t_type* type = (*c_iter)->get_type();
- indent(f_consts) << "immutable(" << render_type_name(type) << ") " <<
- name << ";" << endl;
+ indent(f_consts) << "immutable(" << render_type_name(type) << ") " << name << ";" << endl;
}
- f_consts <<
- endl <<
- "static this() {" << endl;
+ f_consts << endl << "static this() {" << endl;
indent_up();
bool first = true;
@@ -155,27 +145,23 @@ class t_d_generator : public t_oop_generator {
if (!is_immutable_type(type)) {
f_consts << "cast(immutable(" << render_type_name(type) << ")) ";
}
- f_consts <<
- render_const_value(type, (*c_iter)->get_value()) << ";" << endl;
+ f_consts << render_const_value(type, (*c_iter)->get_value()) << ";" << endl;
}
indent_down();
- indent(f_consts) <<
- "}" << endl;
+ indent(f_consts) << "}" << endl;
}
}
virtual void generate_typedef(t_typedef* ttypedef) {
- f_types_ <<
- indent() << "alias " << render_type_name(ttypedef->get_type()) << " " <<
- ttypedef->get_symbolic() << ";" << endl << endl;
+ f_types_ << indent() << "alias " << render_type_name(ttypedef->get_type()) << " "
+ << ttypedef->get_symbolic() << ";" << endl << endl;
}
virtual void generate_enum(t_enum* tenum) {
vector<t_enum_value*> constants = tenum->get_constants();
string enum_name = tenum->get_name();
- f_types_ <<
- indent() << "enum " << enum_name << " {" << endl;
+ f_types_ << indent() << "enum " << enum_name << " {" << endl;
indent_up();
@@ -213,21 +199,17 @@ class t_d_generator : public t_oop_generator {
string f_servicename = package_dir_ + svc_name + ".d";
std::ofstream f_service;
f_service.open(f_servicename.c_str());
- f_service <<
- autogen_comment() <<
- "module " << render_package(*program_) << svc_name << ";" << endl <<
- endl;
+ f_service << autogen_comment() << "module " << render_package(*program_) << svc_name << ";"
+ << endl << endl;
print_default_imports(f_service);
- f_service << "import " << render_package(*get_program()) << program_name_ <<
- "_types;" << endl;
+ f_service << "import " << render_package(*get_program()) << program_name_ << "_types;" << endl;
t_service* extends_service = tservice->get_extends();
if (extends_service != NULL) {
- f_service <<
- "import " << render_package(*(extends_service->get_program())) <<
- extends_service->get_name() << ";" << endl;
+ f_service << "import " << render_package(*(extends_service->get_program()))
+ << extends_service->get_name() << ";" << endl;
}
f_service << endl;
@@ -237,8 +219,7 @@ class t_d_generator : public t_oop_generator {
extends = " : " + render_type_name(tservice->get_extends());
}
- f_service <<
- indent() << "interface " << svc_name << extends << " {" << endl;
+ f_service << indent() << "interface " << svc_name << extends << " {" << endl;
indent_up();
// Collect all the exception types service methods can throw so we can
@@ -261,12 +242,14 @@ class t_d_generator : public t_oop_generator {
}
// Alias the exception types into the current scope.
- if (!exception_types.empty()) f_service << endl;
+ if (!exception_types.empty())
+ f_service << endl;
set<t_type*>::const_iterator et_iter;
for (et_iter = exception_types.begin(); et_iter != exception_types.end(); ++et_iter) {
- indent(f_service) << "alias " << render_package(*(*et_iter)->get_program()) <<
- (*et_iter)->get_program()->get_name() << "_types" << "." <<
- (*et_iter)->get_name() << " " << (*et_iter)->get_name() << ";" << endl;
+ indent(f_service) << "alias " << render_package(*(*et_iter)->get_program())
+ << (*et_iter)->get_program()->get_name() << "_types"
+ << "." << (*et_iter)->get_name() << " " << (*et_iter)->get_name() << ";"
+ << endl;
}
// Write the method metadata.
@@ -274,9 +257,8 @@ class t_d_generator : public t_oop_generator {
indent_up();
bool first = true;
for (fn_iter = functions.begin(); fn_iter != functions.end(); ++fn_iter) {
- if ((*fn_iter)->get_arglist()->get_members().empty() &&
- (*fn_iter)->get_xceptions()->get_members().empty() &&
- !(*fn_iter)->is_oneway()) {
+ if ((*fn_iter)->get_arglist()->get_members().empty()
+ && (*fn_iter)->get_xceptions()->get_members().empty() && !(*fn_iter)->is_oneway()) {
continue;
}
@@ -286,13 +268,12 @@ class t_d_generator : public t_oop_generator {
meta << ",";
}
- meta << endl <<
- indent() << "TMethodMeta(`" << (*fn_iter)->get_name() << "`, " << endl;
+ meta << endl << indent() << "TMethodMeta(`" << (*fn_iter)->get_name() << "`, " << endl;
indent_up();
indent(meta) << "[";
bool first = true;
- const vector<t_field*> ¶ms = (*fn_iter)->get_arglist()->get_members();
+ const vector<t_field*>& params = (*fn_iter)->get_arglist()->get_members();
vector<t_field*>::const_iterator p_iter;
for (p_iter = params.begin(); p_iter != params.end(); ++p_iter) {
if (first) {
@@ -312,14 +293,11 @@ class t_d_generator : public t_oop_generator {
meta << "]";
- if (!(*fn_iter)->get_xceptions()->get_members().empty() ||
- (*fn_iter)->is_oneway()) {
- meta << "," << endl <<
- indent() << "[";
+ if (!(*fn_iter)->get_xceptions()->get_members().empty() || (*fn_iter)->is_oneway()) {
+ meta << "," << endl << indent() << "[";
bool first = true;
- const vector<t_field*>& exceptions =
- (*fn_iter)->get_xceptions()->get_members();
+ const vector<t_field*>& exceptions = (*fn_iter)->get_xceptions()->get_members();
vector<t_field*>::const_iterator ex_iter;
for (ex_iter = exceptions.begin(); ex_iter != exceptions.end(); ++ex_iter) {
if (first) {
@@ -328,36 +306,31 @@ class t_d_generator : public t_oop_generator {
meta << ", ";
}
- meta << "TExceptionMeta(`" << (*ex_iter)->get_name() <<
- "`, " << (*ex_iter)->get_key() << ", `" <<
- (*ex_iter)->get_type()->get_name() << "`)";
+ meta << "TExceptionMeta(`" << (*ex_iter)->get_name() << "`, " << (*ex_iter)->get_key()
+ << ", `" << (*ex_iter)->get_type()->get_name() << "`)";
}
meta << "]";
}
if ((*fn_iter)->is_oneway()) {
- meta << "," << endl <<
- indent() << "TMethodType.ONEWAY";
+ meta << "," << endl << indent() << "TMethodType.ONEWAY";
}
indent_down();
- meta << endl <<
- indent() << ")";
+ meta << endl << indent() << ")";
}
indent_down();
string meta_str(meta.str());
if (!meta_str.empty()) {
- f_service << endl <<
- indent() << "enum methodMeta = [" << meta_str << endl <<
- indent() << "];" << endl;
+ f_service << endl << indent() << "enum methodMeta = [" << meta_str << endl << indent() << "];"
+ << endl;
}
indent_down();
indent(f_service) << "}" << endl;
-
// Server skeleton generation.
string f_skeletonname = package_dir_ + svc_name + "_server.skeleton.d";
std::ofstream f_skeleton;
@@ -366,89 +339,68 @@ class t_d_generator : public t_oop_generator {
f_skeleton.close();
}
- private:
- /**
- * Writes a server skeleton for the passed service to out.
- */
- void print_server_skeleton(ostream &out, t_service* tservice) {
- string svc_name = tservice->get_name();
-
- out <<
- "/*" << endl <<
- " * This auto-generated skeleton file illustrates how to build a server. If you" << endl <<
- " * intend to customize it, you should edit a copy with another file name to " << endl <<
- " * avoid overwriting it when running the generator again." << endl <<
- " */" << endl <<
- "module " << render_package(*tservice->get_program()) << svc_name << "_server;" << endl <<
- endl <<
- "import std.stdio;" << endl <<
- "import thrift.codegen.processor;" << endl <<
- "import thrift.protocol.binary;" << endl <<
- "import thrift.server.simple;" << endl <<
- "import thrift.server.transport.socket;" << endl <<
- "import thrift.transport.buffered;" << endl <<
- "import thrift.util.hashset;" << endl <<
- endl <<
- "import " << render_package(*tservice->get_program()) << svc_name << ";" << endl <<
- "import " << render_package(*get_program()) << program_name_ << "_types;" << endl <<
- endl <<
- endl <<
- "class " << svc_name << "Handler : " << svc_name << " {" << endl;
+private:
+ /**
+ * Writes a server skeleton for the passed service to out.
+ */
+ void print_server_skeleton(ostream& out, t_service* tservice) {
+ string svc_name = tservice->get_name();
+
+ out << "/*" << endl
+ << " * This auto-generated skeleton file illustrates how to build a server. If you" << endl
+ << " * intend to customize it, you should edit a copy with another file name to " << endl
+ << " * avoid overwriting it when running the generator again." << endl << " */" << endl
+ << "module " << render_package(*tservice->get_program()) << svc_name << "_server;" << endl
+ << endl << "import std.stdio;" << endl << "import thrift.codegen.processor;" << endl
+ << "import thrift.protocol.binary;" << endl << "import thrift.server.simple;" << endl
+ << "import thrift.server.transport.socket;" << endl << "import thrift.transport.buffered;"
+ << endl << "import thrift.util.hashset;" << endl << endl << "import "
+ << render_package(*tservice->get_program()) << svc_name << ";" << endl << "import "
+ << render_package(*get_program()) << program_name_ << "_types;" << endl << endl << endl
+ << "class " << svc_name << "Handler : " << svc_name << " {" << endl;
+
+ indent_up();
+ out << indent() << "this() {" << endl << indent() << " // Your initialization goes here."
+ << endl << indent() << "}" << endl << endl;
+
+ vector<t_function*> functions = tservice->get_functions();
+ vector<t_function*>::iterator f_iter;
+ for (f_iter = functions.begin(); f_iter != functions.end(); ++f_iter) {
+ out << indent();
+ print_function_signature(out, *f_iter);
+ out << " {" << endl;
indent_up();
- out <<
- indent() << "this() {" << endl <<
- indent() << " // Your initialization goes here." << endl <<
- indent() << "}" << endl <<
- endl;
-
- vector<t_function*> functions = tservice->get_functions();
- vector<t_function*>::iterator f_iter;
- for (f_iter = functions.begin(); f_iter != functions.end(); ++f_iter) {
- out << indent();
- print_function_signature(out, *f_iter);
- out << " {" << endl;
-
- indent_up();
-
- out <<
- indent() << "// Your implementation goes here." << endl <<
- indent() << "writeln(\"" << (*f_iter)->get_name() << " called\");" << endl;
-
- t_base_type* rt = (t_base_type*)(*f_iter)->get_returntype();
- if (rt->get_base() != t_base_type::TYPE_VOID) {
- indent(out) << "return typeof(return).init;" << endl;
- }
- indent_down();
+ out << indent() << "// Your implementation goes here." << endl << indent() << "writeln(\""
+ << (*f_iter)->get_name() << " called\");" << endl;
- out <<
- indent() << "}" << endl <<
- endl;
+ t_base_type* rt = (t_base_type*)(*f_iter)->get_returntype();
+ if (rt->get_base() != t_base_type::TYPE_VOID) {
+ indent(out) << "return typeof(return).init;" << endl;
}
indent_down();
- out <<
- "}" << endl <<
- endl;
- out <<
- indent() << "void main() {" << endl;
- indent_up();
- out <<
- indent() << "auto protocolFactory = new TBinaryProtocolFactory!();" << endl <<
- indent() << "auto processor = new TServiceProcessor!" << svc_name << "(new " << svc_name << "Handler);" << endl <<
- indent() << "auto serverTransport = new TServerSocket(9090);" << endl <<
- indent() << "auto transportFactory = new TBufferedTransportFactory;" << endl <<
-
- indent() << "auto server = new TSimpleServer(" << endl <<
- indent() << " processor, serverTransport, transportFactory, protocolFactory);" << endl <<
- indent() << "server.serve();" << endl;
- indent_down();
- out <<
- "}" << endl;
+ out << indent() << "}" << endl << endl;
}
+ indent_down();
+ out << "}" << endl << endl;
+
+ out << indent() << "void main() {" << endl;
+ indent_up();
+ out << indent() << "auto protocolFactory = new TBinaryProtocolFactory!();" << endl << indent()
+ << "auto processor = new TServiceProcessor!" << svc_name << "(new " << svc_name
+ << "Handler);" << endl << indent() << "auto serverTransport = new TServerSocket(9090);"
+ << endl << indent() << "auto transportFactory = new TBufferedTransportFactory;" << endl
+ << indent() << "auto server = new TSimpleServer(" << endl << indent()
+ << " processor, serverTransport, transportFactory, protocolFactory);" << endl << indent()
+ << "server.serve();" << endl;
+ indent_down();
+ out << "}" << endl;
+ }
+
/**
* Writes the definition of a struct or an exception type to out.
*/
@@ -465,11 +417,12 @@ class t_d_generator : public t_oop_generator {
// Declare all fields.
vector<t_field*>::const_iterator m_iter;
for (m_iter = members.begin(); m_iter != members.end(); ++m_iter) {
- indent(out) << render_type_name((*m_iter)->get_type()) << " " <<
- (*m_iter)->get_name() << ";" << endl;
+ indent(out) << render_type_name((*m_iter)->get_type()) << " " << (*m_iter)->get_name() << ";"
+ << endl;
}
- if (!members.empty()) indent(out) << endl;
+ if (!members.empty())
+ indent(out) << endl;
indent(out) << "mixin TStructHelpers!(";
if (!members.empty()) {
@@ -489,8 +442,7 @@ class t_d_generator : public t_oop_generator {
}
out << endl;
- indent(out) << "TFieldMeta(`" << (*m_iter)->get_name() << "`, " <<
- (*m_iter)->get_key();
+ indent(out) << "TFieldMeta(`" << (*m_iter)->get_name() << "`, " << (*m_iter)->get_key();
t_const_value* cv = (*m_iter)->get_value();
t_field::e_req req = (*m_iter)->get_req();
@@ -508,9 +460,7 @@ class t_d_generator : public t_oop_generator {
out << ");" << endl;
indent_down();
- indent(out) <<
- "}" << endl <<
- endl;
+ indent(out) << "}" << endl << endl;
}
/**
@@ -518,8 +468,7 @@ class t_d_generator : public t_oop_generator {
* method.
*/
void print_function_signature(ostream& out, t_function* fn) {
- out << render_type_name(fn->get_returntype()) <<
- " " << fn->get_name() << "(";
+ out << render_type_name(fn->get_returntype()) << " " << fn->get_name() << "(";
const vector<t_field*>& fields = fn->get_arglist()->get_members();
vector<t_field*>::const_iterator f_iter;
@@ -530,8 +479,7 @@ class t_d_generator : public t_oop_generator {
} else {
out << ", ";
}
- out << render_type_name((*f_iter)->get_type(), true) << " " <<
- (*f_iter)->get_name();
+ out << render_type_name((*f_iter)->get_type(), true) << " " << (*f_iter)->get_name();
}
out << ")";
@@ -574,8 +522,7 @@ class t_d_generator : public t_oop_generator {
}
break;
default:
- throw "Compiler error: No const of base type " +
- t_base_type::t_base_name(tbase);
+ throw "Compiler error: No const of base type " + t_base_type::t_base_name(tbase);
}
} else if (type->is_enum()) {
out << "cast(" << render_type_name(type) << ")" << value->get_integer();
@@ -585,8 +532,8 @@ class t_d_generator : public t_oop_generator {
indent(out) << render_type_name(type) << " v;" << endl;
if (type->is_struct() || type->is_xception()) {
- indent(out) << "v = " << (type->is_xception() ? "new " : "") <<
- render_type_name(type) << "();" << endl;
+ indent(out) << "v = " << (type->is_xception() ? "new " : "") << render_type_name(type)
+ << "();" << endl;
const vector<t_field*>& fields = ((t_struct*)type)->get_members();
vector<t_field*>::const_iterator f_iter;
@@ -600,12 +547,11 @@ class t_d_generator : public t_oop_generator {
}
}
if (field_type == NULL) {
- throw "Type error: " + type->get_name() + " has no field " +
- v_iter->first->get_string();
+ throw "Type error: " + type->get_name() + " has no field "
+ + v_iter->first->get_string();
}
string val = render_const_value(field_type, v_iter->second);
- indent(out) << "v.set!`" << v_iter->first->get_string() <<
- "`(" << val << ");" << endl;
+ indent(out) << "v.set!`" << v_iter->first->get_string() << "`(" << val << ");" << endl;
}
} else if (type->is_map()) {
t_type* ktype = ((t_map*)type)->get_key_type();
@@ -638,8 +584,7 @@ class t_d_generator : public t_oop_generator {
indent(out) << "v ~= " << val << ";" << endl;
}
} else {
- throw "Compiler error: Invalid type in render_const_value: " +
- type->get_name();
+ throw "Compiler error: Invalid type in render_const_value: " + type->get_name();
}
indent(out) << "return v;" << endl;
@@ -656,7 +601,8 @@ class t_d_generator : public t_oop_generator {
*/
string render_package(const t_program& program) const {
string package = program.get_namespace("d");
- if (package.size() == 0) return "";
+ if (package.size() == 0)
+ return "";
return package + ".";
}
@@ -687,17 +633,16 @@ class t_d_generator : public t_oop_generator {
case t_base_type::TYPE_DOUBLE:
return "double";
default:
- throw "Compiler error: No D type name for base type " +
- t_base_type::t_base_name(tbase);
+ throw "Compiler error: No D type name for base type " + t_base_type::t_base_name(tbase);
}
}
if (ttype->is_container()) {
- t_container* tcontainer = (t_container*) ttype;
+ t_container* tcontainer = (t_container*)ttype;
if (tcontainer->has_cpp_name()) {
return tcontainer->get_cpp_name();
} else if (ttype->is_map()) {
- t_map* tmap = (t_map*) ttype;
+ t_map* tmap = (t_map*)ttype;
t_type* ktype = tmap->get_key_type();
string name = render_type_name(tmap->get_val_type()) + "[";
@@ -711,10 +656,10 @@ class t_d_generator : public t_oop_generator {
name += "]";
return name;
} else if (ttype->is_set()) {
- t_set* tset = (t_set*) ttype;
+ t_set* tset = (t_set*)ttype;
return "HashSet!(" + render_type_name(tset->get_elem_type()) + ")";
} else if (ttype->is_list()) {
- t_list* tlist = (t_list*) ttype;
+ t_list* tlist = (t_list*)ttype;
return render_type_name(tlist->get_elem_type()) + "[]";
}
}
@@ -737,13 +682,11 @@ class t_d_generator : public t_oop_generator {
return "TReq.OPTIONAL";
case t_field::T_REQUIRED:
return "TReq.REQUIRED";
- default:
- {
- std::stringstream ss;
- ss << "Compiler error: Invalid requirement level " << req;
- throw ss.str();
- }
-
+ default: {
+ std::stringstream ss;
+ ss << "Compiler error: Invalid requirement level " << req;
+ throw ss.str();
+ }
}
}
@@ -752,11 +695,8 @@ class t_d_generator : public t_oop_generator {
* module) to f.
*/
void print_default_imports(ostream& out) {
- indent(out) <<
- "import thrift.base;" << endl <<
- "import thrift.codegen.base;" << endl <<
- "import thrift.util.hashset;" << endl <<
- endl;
+ indent(out) << "import thrift.base;" << endl << "import thrift.codegen.base;" << endl
+ << "import thrift.util.hashset;" << endl << endl;
}
/**
@@ -780,4 +720,3 @@ class t_d_generator : public t_oop_generator {
};
THRIFT_REGISTER_GENERATOR(d, "D", "")
-