diff options
author | Andreas Volz <andreas@frodo.mittelerde> | 2009-11-17 00:00:54 +0100 |
---|---|---|
committer | Andreas Volz <andreas@frodo.mittelerde> | 2009-11-17 00:00:54 +0100 |
commit | f25787f2a0d62c38fea060449593dd3205163786 (patch) | |
tree | ca5df7c48b6bc644c97745c5ebd884ae729224ef | |
parent | a236363cce6aefa0d07b73c35e702f296a948fed (diff) | |
download | dbus-c++-f25787f2a0d62c38fea060449593dd3205163786.tar.gz |
still more formating... prepare for merge
-rw-r--r-- | tools/generate_proxy.cpp | 644 |
1 files changed, 322 insertions, 322 deletions
diff --git a/tools/generate_proxy.cpp b/tools/generate_proxy.cpp index f3615a0..a46fc32 100644 --- a/tools/generate_proxy.cpp +++ b/tools/generate_proxy.cpp @@ -40,9 +40,9 @@ extern const char *dbus_includes; */ void generate_proxy(Xml::Document &doc, const char *filename) { - ostringstream body; - ostringstream head; - vector <string> include_vector; + ostringstream body; + ostringstream head; + vector <string> include_vector; head << header; string filestring = filename; @@ -51,7 +51,7 @@ void generate_proxy(Xml::Document &doc, const char *filename) string cond_comp = "__dbusxx__" + filestring + "__PROXY_MARSHAL_H"; head << "#ifndef " << cond_comp << endl - << "#define " << cond_comp << endl; + << "#define " << cond_comp << endl; head << dbus_includes; @@ -71,10 +71,10 @@ void generate_proxy(Xml::Document &doc, const char *filename) // gets the name of a interface: <interface name="XYZ"> string ifacename = iface.get("name"); - + // these interface names are skipped. if (ifacename == "org.freedesktop.DBus.Introspectable" - ||ifacename == "org.freedesktop.DBus.Properties") + ||ifacename == "org.freedesktop.DBus.Properties") { cerr << "skipping interface " << ifacename << endl; continue; @@ -106,13 +106,13 @@ void generate_proxy(Xml::Document &doc, const char *filename) // the code from class definiton up to opening of the constructor is generated... body << "class " << ifaceclass << endl - << ": public ::DBus::InterfaceProxy" << endl - << "{" << endl - << "public:" << endl - << endl - << tab << ifaceclass << "()" << endl - << tab << ": ::DBus::InterfaceProxy(\"" << ifacename << "\")" << endl - << tab << "{" << endl; + << ": public ::DBus::InterfaceProxy" << endl + << "{" << endl + << "public:" << endl + << endl + << tab << ifaceclass << "()" << endl + << tab << ": ::DBus::InterfaceProxy(\"" << ifacename << "\")" << endl + << tab << "{" << endl; // generates code to connect all the signal stubs; this is still inside the constructor for (Xml::Nodes::iterator si = signals.begin(); si != signals.end(); ++si) @@ -121,22 +121,22 @@ void generate_proxy(Xml::Document &doc, const char *filename) string marshname = "_" + signal.get("name") + "_stub"; - body << tab << tab << "connect_signal(" - << ifaceclass << ", " << signal.get("name") << ", " << stub_name(signal.get("name")) - << ");" << endl; + body << tab << tab << "connect_signal(" + << ifaceclass << ", " << signal.get("name") << ", " << stub_name(signal.get("name")) + << ");" << endl; } // the constructor ends here body << tab << "}" << endl - << endl; + << endl; // write public block header for properties body << "public:" << endl << endl - << tab << "/* properties exported by this interface */" << endl; + << tab << "/* properties exported by this interface */" << endl; // this loop generates all properties for (Xml::Nodes::iterator pi = properties.begin (); - pi != properties.end (); ++pi) + pi != properties.end (); ++pi) { Xml::Node & property = **pi; string prop_name = property.get ("name"); @@ -144,26 +144,26 @@ void generate_proxy(Xml::Document &doc, const char *filename) if (property_access == "read" || property_access == "readwrite") { body << tab << tab << "const " << signature_to_type (property.get("type")) - << " " << prop_name << "() {" << endl; + << " " << prop_name << "() {" << endl; body << tab << tab << tab << "::DBus::CallMessage call ;\n "; body << tab << tab << tab - << "call.member(\"Get\"); call.interface(\"org.freedesktop.DBus.Properties\");" - << endl; + << "call.member(\"Get\"); call.interface(\"org.freedesktop.DBus.Properties\");" + << endl; body << tab << tab << tab - << "::DBus::MessageIter wi = call.writer(); " << endl; + << "::DBus::MessageIter wi = call.writer(); " << endl; body << tab << tab << tab - << "const std::string interface_name = \"" << ifacename << "\";" - << endl; + << "const std::string interface_name = \"" << ifacename << "\";" + << endl; body << tab << tab << tab - << "const std::string property_name = \"" << prop_name << "\";" - << endl; + << "const std::string property_name = \"" << prop_name << "\";" + << endl; body << tab << tab << tab << "wi << interface_name;" << endl; body << tab << tab << tab << "wi << property_name;" << endl; body << tab << tab << tab - << "::DBus::Message ret = this->invoke_method (call);" << endl; + << "::DBus::Message ret = this->invoke_method (call);" << endl; // TODO: support invoke_method_NoReply for properties body << tab << tab << tab - << "::DBus::MessageIter ri = ret.reader ();" << endl; + << "::DBus::MessageIter ri = ret.reader ();" << endl; body << tab << tab << tab << "::DBus::Variant argout; " << endl; body << tab << tab << tab << "ri >> argout;" << endl; body << tab << tab << tab << "return argout;" << endl; @@ -192,10 +192,10 @@ void generate_proxy(Xml::Document &doc, const char *filename) // write public block header for methods body << "public:" << endl - << endl - << tab << "/* methods exported by this interface," << endl - << tab << " * this functions will invoke the corresponding methods on the remote objects" << endl - << tab << " */" << endl; + << endl + << tab << "/* methods exported by this interface," << endl + << tab << " * this functions will invoke the corresponding methods on the remote objects" << endl + << tab << " */" << endl; // this loop generates all methods for (Xml::Nodes::iterator mi = methods.begin(); mi != methods.end(); ++mi) @@ -204,75 +204,75 @@ void generate_proxy(Xml::Document &doc, const char *filename) Xml::Nodes args = method["arg"]; Xml::Nodes args_in = args.select("direction","in"); Xml::Nodes args_out = args.select("direction","out"); - Xml::Nodes annotations = args["annotation"]; - Xml::Nodes method_annotations = method["annotation"]; - Xml::Nodes annotations_noreply = method_annotations.select("name","org.freedesktop.DBus.Method.NoReply"); - Xml::Nodes annotations_object = annotations.select("name","org.freedesktop.DBus.Object"); - string arg_object; - bool annotation_noreply_value = false; - - // parse method level noreply annotations - if (annotations_noreply.size() > 0) - { - string annotation_noreply_value_str = annotations_noreply.front()->get("value"); - - if (annotation_noreply_value_str == "true") - { - annotation_noreply_value = true; - } - } - - if (annotations_object.size() > 0) - { - arg_object = annotations_object.front()->get("value"); - } - + Xml::Nodes annotations = args["annotation"]; + Xml::Nodes method_annotations = method["annotation"]; + Xml::Nodes annotations_noreply = method_annotations.select("name","org.freedesktop.DBus.Method.NoReply"); + Xml::Nodes annotations_object = annotations.select("name","org.freedesktop.DBus.Object"); + string arg_object; + bool annotation_noreply_value = false; + + // parse method level noreply annotations + if (annotations_noreply.size() > 0) + { + string annotation_noreply_value_str = annotations_noreply.front()->get("value"); + + if (annotation_noreply_value_str == "true") + { + annotation_noreply_value = true; + } + } + + if (annotations_object.size() > 0) + { + arg_object = annotations_object.front()->get("value"); + } + if (args_out.size() == 0 || args_out.size() > 1) { body << tab << "void "; } else if (args_out.size() == 1) { - if (arg_object.length()) - { - body << tab << arg_object << " "; - } - else - { - body << tab << signature_to_type(args_out.front()->get("type")) << " "; - } + if (arg_object.length()) + { + body << tab << arg_object << " "; + } + else + { + body << tab << signature_to_type(args_out.front()->get("type")) << " "; + } } - + body << method.get("name") << "("; - + // generate all 'in' arguments for a method signature unsigned int i = 0; for (Xml::Nodes::iterator ai = args_in.begin(); ai != args_in.end(); ++ai, ++i) { Xml::Node &arg = **ai; - Xml::Nodes annotations = arg["annotation"]; - Xml::Nodes annotations_object = annotations.select("name","org.freedesktop.DBus.Object"); - string arg_object; - - if (annotations_object.size() > 0) - { - arg_object = annotations_object.front()->get("value"); - } - - // generate basic signature only if no object name available... - if (!arg_object.length()) - { - body << "const " << signature_to_type(arg.get("type")) << "& "; - } - // ...or generate object style if available - else - { - body << "const " << arg_object << "& "; - - // store a object name to later generate header includes - include_vector.push_back (arg_object); - } - + Xml::Nodes annotations = arg["annotation"]; + Xml::Nodes annotations_object = annotations.select("name","org.freedesktop.DBus.Object"); + string arg_object; + + if (annotations_object.size() > 0) + { + arg_object = annotations_object.front()->get("value"); + } + + // generate basic signature only if no object name available... + if (!arg_object.length()) + { + body << "const " << signature_to_type(arg.get("type")) << "& "; + } + // ...or generate object style if available + else + { + body << "const " << arg_object << "& "; + + // store a object name to later generate header includes + include_vector.push_back (arg_object); + } + string arg_name = arg.get("name"); if (arg_name.length()) body << arg_name; @@ -285,34 +285,34 @@ void generate_proxy(Xml::Document &doc, const char *filename) if (args_out.size() > 1) { - // generate all 'out' arguments for a method signature + // generate all 'out' arguments for a method signature unsigned int j = 0; for (Xml::Nodes::iterator ao = args_out.begin(); ao != args_out.end(); ++ao, ++j) { Xml::Node &arg = **ao; - Xml::Nodes annotations = arg["annotation"]; - Xml::Nodes annotations_object = annotations.select("name","org.freedesktop.DBus.Object"); - string arg_object; - - if (annotations_object.size() > 0) - { - arg_object = annotations_object.front()->get("value"); - } - - // generate basic signature only if no object name available... - if (!arg_object.length()) - { - body << signature_to_type(arg.get("type")) << "&"; - } - // ...or generate object style if available - else - { - body << arg_object << "& "; - - // store a object name to later generate header includes - include_vector.push_back (arg_object); - } - + Xml::Nodes annotations = arg["annotation"]; + Xml::Nodes annotations_object = annotations.select("name","org.freedesktop.DBus.Object"); + string arg_object; + + if (annotations_object.size() > 0) + { + arg_object = annotations_object.front()->get("value"); + } + + // generate basic signature only if no object name available... + if (!arg_object.length()) + { + body << signature_to_type(arg.get("type")) << "&"; + } + // ...or generate object style if available + else + { + body << arg_object << "& "; + + // store a object name to later generate header includes + include_vector.push_back (arg_object); + } + string arg_name = arg.get("name"); if (arg_name.length()) body << " " << arg_name; @@ -326,159 +326,159 @@ void generate_proxy(Xml::Document &doc, const char *filename) body << ")" << endl; body << tab << "{" << endl - << tab << tab << "::DBus::CallMessage call;" << endl; + << tab << tab << "::DBus::CallMessage call;" << endl; if (args_in.size() > 0) { body << tab << tab << "::DBus::MessageIter wi = call.writer();" << endl - << endl; + << endl; } - // generate all 'in' arguments for a method body + // generate all 'in' arguments for a method body i = 0; for (Xml::Nodes::iterator ai = args_in.begin(); ai != args_in.end(); ++ai, ++i) { Xml::Node &arg = **ai; string arg_name = arg.get("name"); - Xml::Nodes annotations = arg["annotation"]; - Xml::Nodes annotations_object = annotations.select("name","org.freedesktop.DBus.Object"); - string arg_object; - - if (annotations_object.size() > 0) - { - arg_object = annotations_object.front()->get("value"); - } - - if (!arg_name.length()) - { + Xml::Nodes annotations = arg["annotation"]; + Xml::Nodes annotations_object = annotations.select("name","org.freedesktop.DBus.Object"); + string arg_object; + + if (annotations_object.size() > 0) + { + arg_object = annotations_object.front()->get("value"); + } + + if (!arg_name.length()) + { arg_name = "argin"; - arg_name += toString <uint> (i); - } - - // generate extra code to wrap object - if (arg_object.length()) - { - body << tab << tab << signature_to_type(arg.get("type")) << "_" << arg_name << ";" << endl; - body << tab << tab << "_" << arg_name << " << " << arg_name << ";" << endl; - - arg_name = string ("_") + arg_name; - } - - body << tab << tab << "wi << " << arg_name << ";" << endl; + arg_name += toString <uint> (i); + } + + // generate extra code to wrap object + if (arg_object.length()) + { + body << tab << tab << signature_to_type(arg.get("type")) << "_" << arg_name << ";" << endl; + body << tab << tab << "_" << arg_name << " << " << arg_name << ";" << endl; + + arg_name = string ("_") + arg_name; + } + + body << tab << tab << "wi << " << arg_name << ";" << endl; + } + + body << tab << tab << "call.member(\"" << method.get("name") << "\");" << endl; + + // generate noreply/reply method calls + if (annotation_noreply_value) + { + if (args_out.size ()) + { + cerr << "Function: " << method.get("name") << ":" << endl; + cerr << "Option 'org.freedesktop.DBus.Method.NoReply' not allowed for methods with 'out' variables!" << endl << "-> Option ignored!" << endl; + + body << tab << tab << "::DBus::Message ret = invoke_method (call);" << endl; + } + else + { + body << tab << tab << "assert (invoke_method_noreply (call));" << endl; // will only assert in case of no memory + } + } + else + { + body << tab << tab << "::DBus::Message ret = invoke_method (call);" << endl; } - - body << tab << tab << "call.member(\"" << method.get("name") << "\");" << endl; - - // generate noreply/reply method calls - if (annotation_noreply_value) - { - if (args_out.size ()) - { - cerr << "Function: " << method.get("name") << ":" << endl; - cerr << "Option 'org.freedesktop.DBus.Method.NoReply' not allowed for methods with 'out' variables!" << endl << "-> Option ignored!" << endl; - - body << tab << tab << "::DBus::Message ret = invoke_method (call);" << endl; - } - else - { - body << tab << tab << "assert (invoke_method_noreply (call));" << endl; // will only assert in case of no memory - } - } - else - { - body << tab << tab << "::DBus::Message ret = invoke_method (call);" << endl; - } if (args_out.size() > 0) { body << tab << tab << "::DBus::MessageIter ri = ret.reader();" << endl - << endl; + << endl; } - - // generate 'out' values as return if only one existing + + // generate 'out' values as return if only one existing if (args_out.size() == 1) { - Xml::Nodes annotations = args_out["annotation"]; - Xml::Nodes annotations_object = annotations.select("name","org.freedesktop.DBus.Object"); - string arg_object; - - if (annotations_object.size() > 0) - { - arg_object = annotations_object.front()->get("value"); - } - - if (arg_object.length()) - { - body << tab << tab << arg_object << " _argout;" << endl; - } + Xml::Nodes annotations = args_out["annotation"]; + Xml::Nodes annotations_object = annotations.select("name","org.freedesktop.DBus.Object"); + string arg_object; + + if (annotations_object.size() > 0) + { + arg_object = annotations_object.front()->get("value"); + } + + if (arg_object.length()) + { + body << tab << tab << arg_object << " _argout;" << endl; + } body << tab << tab << signature_to_type(args_out.front()->get("type")) << " argout;" << endl; - + body << tab << tab << "ri >> argout;" << endl; - - if (arg_object.length()) - { - body << tab << tab << "_argout << argout;" << endl; - body << tab << tab << "return _argout;" << endl; - } - else - { - body << tab << tab << "return argout;" << endl; - } + + if (arg_object.length()) + { + body << tab << tab << "_argout << argout;" << endl; + body << tab << tab << "return _argout;" << endl; + } + else + { + body << tab << tab << "return argout;" << endl; + } } else if (args_out.size() > 1) { - // generate multible 'out' value + // generate multible 'out' value unsigned int i = 0; for (Xml::Nodes::iterator ao = args_out.begin(); ao != args_out.end(); ++ao, ++i) { Xml::Node &arg = **ao; string arg_name = arg.get("name"); - Xml::Nodes annotations = arg["annotation"]; - Xml::Nodes annotations_object = annotations.select("name","org.freedesktop.DBus.Object"); - string arg_object; - - if (annotations_object.size() > 0) - { - arg_object = annotations_object.front()->get("value"); - } - + Xml::Nodes annotations = arg["annotation"]; + Xml::Nodes annotations_object = annotations.select("name","org.freedesktop.DBus.Object"); + string arg_object; + + if (annotations_object.size() > 0) + { + arg_object = annotations_object.front()->get("value"); + } + if (!arg_name.length()) - { - arg_name = "argout" + toString <uint> (i); - } - - if (arg_object.length()) - { - body << tab << tab << signature_to_type(arg.get("type")) << "_" << arg_name << ";" << endl; - } - - if (arg_object.length()) - { - body << tab << tab << "ri >> " << "_" << arg_name << ";" << endl; - } - else - { - body << tab << tab << "ri >> " << arg_name << ";" << endl; - } - - if (arg_object.length()) - { - body << tab << tab << arg_name << " << " << "_" << arg_name << ";" << endl; - } + { + arg_name = "argout" + toString <uint> (i); + } + + if (arg_object.length()) + { + body << tab << tab << signature_to_type(arg.get("type")) << "_" << arg_name << ";" << endl; + } + + if (arg_object.length()) + { + body << tab << tab << "ri >> " << "_" << arg_name << ";" << endl; + } + else + { + body << tab << tab << "ri >> " << arg_name << ";" << endl; + } + + if (arg_object.length()) + { + body << tab << tab << arg_name << " << " << "_" << arg_name << ";" << endl; + } } } body << tab << "}" << endl - << endl; + << endl; } // write public block header for signals body << endl - << "public:" << endl - << endl - << tab << "/* signal handlers for this interface" << endl - << tab << " */" << endl; + << "public:" << endl + << endl + << tab << "/* signal handlers for this interface" << endl + << tab << " */" << endl; // this loop generates all signals for (Xml::Nodes::iterator si = signals.begin(); si != signals.end(); ++si) @@ -494,29 +494,29 @@ void generate_proxy(Xml::Document &doc, const char *filename) { Xml::Node &arg = **ai; string arg_name = arg.get("name"); - Xml::Nodes annotations = arg["annotation"]; - Xml::Nodes annotations_object = annotations.select("name","org.freedesktop.DBus.Object"); - string arg_object; - - if (annotations_object.size() > 0) - { - arg_object = annotations_object.front()->get("value"); - } - - // generate basic signature only if no object name available... - if (!arg_object.length()) - { - body << "const " << signature_to_type(arg.get("type")) << "& "; - } - // ...or generate object style if available - else - { - body << "const " << arg_object << "& "; - - // store a object name to later generate header includes - include_vector.push_back (arg_object); - } - + Xml::Nodes annotations = arg["annotation"]; + Xml::Nodes annotations_object = annotations.select("name","org.freedesktop.DBus.Object"); + string arg_object; + + if (annotations_object.size() > 0) + { + arg_object = annotations_object.front()->get("value"); + } + + // generate basic signature only if no object name available... + if (!arg_object.length()) + { + body << "const " << signature_to_type(arg.get("type")) << "& "; + } + // ...or generate object style if available + else + { + body << "const " << arg_object << "& "; + + // store a object name to later generate header includes + include_vector.push_back (arg_object); + } + if (arg_name.length()) body << arg_name; else @@ -530,10 +530,10 @@ void generate_proxy(Xml::Document &doc, const char *filename) // write private block header for unmarshalers body << endl - << "private:" << endl - << endl - << tab << "/* unmarshalers (to unpack the DBus message before calling the actual signal handler)" << endl - << tab << " */" << endl; + << "private:" << endl + << endl + << tab << "/* unmarshalers (to unpack the DBus message before calling the actual signal handler)" << endl + << tab << " */" << endl; // generate all the unmarshalers for (Xml::Nodes::iterator si = signals.begin(); si != signals.end(); ++si) @@ -542,12 +542,12 @@ void generate_proxy(Xml::Document &doc, const char *filename) Xml::Nodes args = signal["arg"]; body << tab << "void " << stub_name(signal.get("name")) << "(const ::DBus::SignalMessage &sig)" << endl - << tab << "{" << endl; + << tab << "{" << endl; if (args.size() > 0) { body << tab << tab << "::DBus::MessageIter ri = sig.reader();" << endl - << endl; + << endl; } unsigned int i = 0; @@ -555,68 +555,68 @@ void generate_proxy(Xml::Document &doc, const char *filename) { Xml::Node &arg = **ai; string arg_name = arg.get("name"); - Xml::Nodes annotations = arg["annotation"]; - Xml::Nodes annotations_object = annotations.select("name","org.freedesktop.DBus.Object"); - string arg_object; - - if (annotations_object.size() > 0) - { - arg_object = annotations_object.front()->get("value"); - } - + Xml::Nodes annotations = arg["annotation"]; + Xml::Nodes annotations_object = annotations.select("name","org.freedesktop.DBus.Object"); + string arg_object; + + if (annotations_object.size() > 0) + { + arg_object = annotations_object.front()->get("value"); + } + body << tab << tab << signature_to_type(arg.get("type")) << " " ; - - // use a default if no arg name given + + // use a default if no arg name given if (!arg_name.length()) - { - arg_name = "arg" + toString <uint> (i); - } - - body << arg_name << ";" << endl; - body << tab << tab << "ri >> " << arg_name << ";" << endl; - - // if a object type is used create a local variable and insert values with '<<' operation - if (arg_object.length()) - { - body << tab << tab << arg_object << " _" << arg_name << ";" << endl; - body << tab << tab << "_" << arg_name << " << " << arg_name << ";" << endl; - + { + arg_name = "arg" + toString <uint> (i); + } + + body << arg_name << ";" << endl; + body << tab << tab << "ri >> " << arg_name << ";" << endl; + + // if a object type is used create a local variable and insert values with '<<' operation + if (arg_object.length()) + { + body << tab << tab << arg_object << " _" << arg_name << ";" << endl; + body << tab << tab << "_" << arg_name << " << " << arg_name << ";" << endl; + // store a object name to later generate header includes - include_vector.push_back (arg_object); - } + include_vector.push_back (arg_object); + } } body << tab << tab << signal.get("name") << "("; - // generate all arguments for the call to the virtual function + // generate all arguments for the call to the virtual function unsigned int j = 0; for (Xml::Nodes::iterator ai = args.begin(); ai != args.end(); ++ai, ++j) { Xml::Node &arg = **ai; string arg_name = arg.get("name"); - Xml::Nodes annotations = arg["annotation"]; - Xml::Nodes annotations_object = annotations.select("name","org.freedesktop.DBus.Object"); - string arg_object; - - if (annotations_object.size() > 0) - { - arg_object = annotations_object.front()->get("value"); - } - - if (!arg_name.length()) - { - arg_name = "arg" + toString <uint> (j); - } - - if (arg_object.length()) - { - body << "_" << arg_name; - } - else - { - body << arg_name; - } - + Xml::Nodes annotations = arg["annotation"]; + Xml::Nodes annotations_object = annotations.select("name","org.freedesktop.DBus.Object"); + string arg_object; + + if (annotations_object.size() > 0) + { + arg_object = annotations_object.front()->get("value"); + } + + if (!arg_name.length()) + { + arg_name = "arg" + toString <uint> (j); + } + + if (arg_object.length()) + { + body << "_" << arg_name; + } + else + { + body << arg_name; + } + if (ai+1 != args.end()) body << ", "; } @@ -627,7 +627,7 @@ void generate_proxy(Xml::Document &doc, const char *filename) } body << "};" << endl - << endl; + << endl; for (unsigned int i = 0; i < nspaces; ++i) { @@ -638,28 +638,28 @@ void generate_proxy(Xml::Document &doc, const char *filename) body << "#endif //" << cond_comp << endl; - // remove all duplicates in the header include vector - vector<string>::const_iterator vec_end_it = unique (include_vector.begin (), include_vector.end ()); - - for (vector<string>::const_iterator vec_it = include_vector.begin (); - vec_it != vec_end_it; - ++vec_it) - { - const string &include = *vec_it; - - head << "#include " << "\"" << include << ".h" << "\"" << endl; - } - head << endl; - + // remove all duplicates in the header include vector + vector<string>::const_iterator vec_end_it = unique (include_vector.begin (), include_vector.end ()); + + for (vector<string>::const_iterator vec_it = include_vector.begin (); + vec_it != vec_end_it; + ++vec_it) + { + const string &include = *vec_it; + + head << "#include " << "\"" << include << ".h" << "\"" << endl; + } + head << endl; + ofstream file(filename); if (file.bad()) { cerr << "unable to write file " << filename << endl; exit(-1); } - - file << head.str (); - file << body.str (); + + file << head.str (); + file << body.str (); file.close(); } |