summaryrefslogtreecommitdiff
path: root/cpp/src/slice2cpp/Gen.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'cpp/src/slice2cpp/Gen.cpp')
-rw-r--r--cpp/src/slice2cpp/Gen.cpp40
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())
{