diff options
Diffstat (limited to 'cpp/src/slice2cpp/Gen.cpp')
-rw-r--r-- | cpp/src/slice2cpp/Gen.cpp | 40 |
1 files changed, 38 insertions, 2 deletions
diff --git a/cpp/src/slice2cpp/Gen.cpp b/cpp/src/slice2cpp/Gen.cpp index 9d9d7d4ee4b..66db0d096b1 100644 --- a/cpp/src/slice2cpp/Gen.cpp +++ b/cpp/src/slice2cpp/Gen.cpp @@ -21,11 +21,13 @@ using namespace Slice; using namespace IceUtil; Slice::Gen::Gen(const string& name, const string& base, const string& headerExtension, - const string& sourceExtension, const string& include, const vector<string>& includePaths, - const string& dllExport, const string& dir, bool imp, bool checksum, bool stream) : + const string& sourceExtension, const vector<string>& extraHeaders, const string& include, + const vector<string>& includePaths, const string& dllExport, const string& dir, + bool imp, bool checksum, bool stream) : _base(base), _headerExtension(headerExtension), _sourceExtension(sourceExtension), + _extraHeaders(extraHeaders), _include(include), _includePaths(includePaths), _dllExport(dllExport), @@ -167,6 +169,40 @@ Slice::Gen::generate(const UnitPtr& p) { validateMetaData(p); + // + // Output additional header includes first. + // + vector<string>::const_iterator i; + for(i = _extraHeaders.begin(); i != _extraHeaders.end(); ++i) + { + string hdr = *i; + string guard; + string::size_type pos = hdr.rfind(','); + if(pos != string::npos) + { + hdr = i->substr(0, pos); + guard = i->substr(pos + 1); + } + if(!guard.empty()) + { + C << "\n#ifndef " << guard; + C << "\n#define " << guard; + } + C << "\n#include <"; + if(!_include.empty()) + { + C << _include << '/'; + } + C << hdr << '>'; + if(!guard.empty()) + { + C << "\n#endif"; + } + } + + // + // Output remaining includes. + // C << "\n#include <"; if(_include.size()) { |