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 11:34:23 UTC

[31/37] thrift git commit: Revert "THRIFT-2729: C++ - .clang-format created and applied"

http://git-wip-us.apache.org/repos/asf/thrift/blob/240120c8/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 ca76485..622fb29 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,17 +54,19 @@ 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());
@@ -75,7 +77,7 @@ protected:
     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;
@@ -89,19 +91,21 @@ protected:
     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() {
@@ -111,26 +115,32 @@ protected:
 
   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;
@@ -145,23 +155,27 @@ protected:
         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();
 
@@ -199,17 +213,21 @@ protected:
     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;
@@ -219,7 +237,8 @@ protected:
       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
@@ -242,14 +261,12 @@ protected:
     }
 
     // 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.
@@ -257,8 +274,9 @@ protected:
     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;
       }
 
@@ -268,12 +286,13 @@ protected:
         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*>& params = (*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) {
@@ -293,11 +312,14 @@ protected:
 
       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) {
@@ -306,31 +328,36 @@ protected:
             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;
@@ -339,68 +366,89 @@ protected:
     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;
-
-    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;
+ 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() << "// 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;
+        }
 
-      out << indent() << "// Your implementation goes here." << endl << indent() << "writeln(\""
-          << (*f_iter)->get_name() << " called\");" << endl;
+        indent_down();
 
-      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;
+        out <<
+          indent() << "}" << endl <<
+          endl;
       }
 
       indent_down();
+      out <<
+        "}" << endl <<
+        endl;
 
-      out << indent() << "}" << 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;
     }
 
-    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.
    */
@@ -417,12 +465,11 @@ private:
     // 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()) {
@@ -442,7 +489,8 @@ private:
         }
         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();
@@ -460,7 +508,9 @@ private:
     out << ");" << endl;
 
     indent_down();
-    indent(out) << "}" << endl << endl;
+    indent(out) <<
+      "}" << endl <<
+      endl;
   }
 
   /**
@@ -468,7 +518,8 @@ private:
    * 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;
@@ -479,7 +530,8 @@ private:
       } 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 << ")";
@@ -522,7 +574,8 @@ private:
         }
         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();
@@ -532,8 +585,8 @@ private:
 
       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;
@@ -547,11 +600,12 @@ private:
             }
           }
           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();
@@ -584,7 +638,8 @@ private:
           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;
 
@@ -601,8 +656,7 @@ private:
    */
   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 + ".";
   }
 
@@ -633,16 +687,17 @@ private:
       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()) + "[";
@@ -656,10 +711,10 @@ private:
         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()) + "[]";
       }
     }
@@ -682,11 +737,13 @@ private:
       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();
+      }
+
     }
   }
 
@@ -695,8 +752,11 @@ private:
    * 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;
   }
 
   /**
@@ -720,3 +780,4 @@ private:
 };
 
 THRIFT_REGISTER_GENERATOR(d, "D", "")
+