From: David Reiss Date: Thu, 27 Mar 2008 19:45:19 +0000 (+0000) Subject: Allow nested namespaces to be used in perl. X-Git-Tag: 0.2.0~888 X-Git-Url: https://source.supwisdom.com/gerrit/gitweb?a=commitdiff_plain;h=4b83d6ddeb2d9b5a4102839cfe0d38fe2c72411d;p=common%2Fthrift.git Allow nested namespaces to be used in perl. git-svn-id: https://svn.apache.org/repos/asf/incubator/thrift/trunk@665584 13f79535-47bb-0310-9956-ffa450edef68 --- diff --git a/compiler/cpp/src/generate/t_perl_generator.cc b/compiler/cpp/src/generate/t_perl_generator.cc index 5e1503ba..0b16212e 100644 --- a/compiler/cpp/src/generate/t_perl_generator.cc +++ b/compiler/cpp/src/generate/t_perl_generator.cc @@ -22,10 +22,12 @@ void t_perl_generator::init_generator() { MKDIR(get_out_dir().c_str()); string outdir = get_out_dir(); - std::string ns = program_->get_perl_package(); - if (ns.length() > 0) { - outdir += ns + "/"; - MKDIR(outdir.c_str()); + std::list dirs; + perl_namespace_dirs(program_, dirs); + std::list::iterator it; + for (it = dirs.begin(); it != dirs.end(); it++) { + outdir += *it + "/"; + MKDIR(outdir.c_str()); } // Make output file @@ -42,7 +44,7 @@ void t_perl_generator::init_generator() { // Print header f_consts_ << autogen_comment() << - "package "<<( ns.empty() ? "" : ns+"::")<<"Constants;"< #include #include +#include #include "t_oop_generator.h" @@ -141,9 +142,40 @@ class t_perl_generator : public t_oop_generator { "#\n"; } + void perl_namespace_dirs(t_program* p, std::list& dirs) { + std::string ns = p->get_perl_package(); + std::string::size_type loc; + + if (ns.size() > 0) { + while ((loc = ns.find(".")) != std::string::npos) { + dirs.push_back(ns.substr(0, loc)); + ns = ns.substr(loc+1); + } + } + + if (ns.size() > 0) { + dirs.push_back(ns); + } + } + std::string perl_namespace(t_program* p) { std::string ns = p->get_perl_package(); - return ns.empty() ? ns : (ns + "::"); + std::string result = ""; + std::string::size_type loc; + + if (ns.size() > 0) { + while ((loc = ns.find(".")) != std::string::npos) { + result += ns.substr(0, loc); + result += "::"; + ns = ns.substr(loc+1); + } + + if (ns.size() > 0) { + result += ns + "::"; + } + } + + return result; } private: