diff options
author | Dan Goodliffe <dan@randomdan.homeip.net> | 2015-12-09 17:43:56 +0000 |
---|---|---|
committer | Dan Goodliffe <dan@randomdan.homeip.net> | 2015-12-09 17:43:56 +0000 |
commit | 193e54dd621c05b940615111ff5adbbff3b83112 (patch) | |
tree | 20babd7b3ba32005bdb52c8308d7bdceed49ccfb | |
parent | Allow poassing options to conversions (diff) | |
download | slicer-193e54dd621c05b940615111ff5adbbff3b83112.tar.bz2 slicer-193e54dd621c05b940615111ff5adbbff3b83112.tar.xz slicer-193e54dd621c05b940615111ff5adbbff3b83112.zip |
Add options for not declaring conversion functions (for such cases when they are provided externally)slicer-1.2.1
-rw-r--r-- | slicer/slicer/parser.cpp | 22 | ||||
-rw-r--r-- | slicer/test/Jamfile.jam | 2 | ||||
-rw-r--r-- | slicer/test/conversions.h | 17 | ||||
-rw-r--r-- | slicer/test/preprocessor.cpp | 3 | ||||
-rw-r--r-- | slicer/test/types.ice | 5 |
5 files changed, 38 insertions, 11 deletions
diff --git a/slicer/slicer/parser.cpp b/slicer/slicer/parser.cpp index ab0bc88..5ea26b7 100644 --- a/slicer/slicer/parser.cpp +++ b/slicer/slicer/parser.cpp @@ -34,14 +34,20 @@ namespace Slicer { auto c = Slice::ContainedPtr::dynamicCast(dm->container()); auto conversions = getAllConversions(dm); for (const auto & conversion : conversions) { - fprintbf(cpp, "%s %s(const %s &);\n", - conversion.ExchangeType, - conversion.ConvertToExchangeFunc, - Slice::typeToString(type)); - fprintbf(cpp, "%s %s(const %s &);\n\n", - Slice::typeToString(type), - conversion.ConvertToModelFunc, - conversion.ExchangeType); + if (!AdHoc::containerContains(conversion.Options, "nodeclare")) { + if (!AdHoc::containerContains(conversion.Options, "nodeclareto")) { + fprintbf(cpp, "%s %s(const %s &);\n", + conversion.ExchangeType, + conversion.ConvertToExchangeFunc, + Slice::typeToString(type)); + } + if (!AdHoc::containerContains(conversion.Options, "nodeclarefrom")) { + fprintbf(cpp, "%s %s(const %s &);\n\n", + Slice::typeToString(type), + conversion.ConvertToModelFunc, + conversion.ExchangeType); + } + } } if (!conversions.empty()) { fprintbf(cpp, "template<>\nvoid\n"); diff --git a/slicer/test/Jamfile.jam b/slicer/test/Jamfile.jam index 7776c5d..e679a76 100644 --- a/slicer/test/Jamfile.jam +++ b/slicer/test/Jamfile.jam @@ -13,6 +13,7 @@ lib adhocutil : : : : <include>/usr/include/adhocutil ; lib types : types.ice : + <include>. <library>pthread <library>Ice <library>IceUtil @@ -20,6 +21,7 @@ lib types : <library>included//included <implicit-dependency>included//included : : + <include>. <library>pthread <library>Ice <library>IceUtil diff --git a/slicer/test/conversions.h b/slicer/test/conversions.h new file mode 100644 index 0000000..d462fb4 --- /dev/null +++ b/slicer/test/conversions.h @@ -0,0 +1,17 @@ +#ifndef SLICER_TEST_CONVERSIONS_H +#define SLICER_TEST_CONVERSIONS_H + +#include <boost/date_time/posix_time/posix_time_types.hpp> + +namespace TestModule { + class DateTime; +} +namespace Slicer { + ::TestModule::DateTime + stringToDateTime(const std::string & in); + std::string + dateTimeToString(const ::TestModule::DateTime & in); +} + +#endif + diff --git a/slicer/test/preprocessor.cpp b/slicer/test/preprocessor.cpp index a55cdb2..435723f 100644 --- a/slicer/test/preprocessor.cpp +++ b/slicer/test/preprocessor.cpp @@ -61,8 +61,9 @@ BOOST_AUTO_TEST_CASE( slicer_test_ice ) const fs::path obj = fs::change_extension(tmp / base, ".o"); const std::string compile = stringbf( - "g++ -Os -fPIC -c -std=c++0x -fvisibility=hidden -I tmp -I /usr/include/adhocutil -I /usr/include/Ice -I /usr/include/IceUtil -I %s -I %s -I %s %s -o %s", + "g++ -Os -fPIC -c -std=c++0x -fvisibility=hidden -I tmp -I /usr/include/adhocutil -I /usr/include/Ice -I /usr/include/IceUtil -I %s -I %s -I %s -I %s %s -o %s", root / bjamout, + root, included / bjamout, root / "..", cpp, obj); diff --git a/slicer/test/types.ice b/slicer/test/types.ice index 3766342..562099b 100644 --- a/slicer/test/types.ice +++ b/slicer/test/types.ice @@ -1,4 +1,5 @@ [["cpp:include:boost/date_time/posix_time/posix_time_types.hpp"]] +[["cpp:include:conversions.h"]] #include <included.ice> @@ -22,7 +23,7 @@ module TestModule { }; class DateTimeContainer { [ "slicer:conversion:boost.posix_time.ptime:ptimeToDateTime:dateTimeToPTime", - "slicer:conversion:std.string:stringToDateTime:dateTimeToString" ] + "slicer:conversion:std.string:stringToDateTime:dateTimeToString:nodeclare" ] DateTime dt; IsoDate date; }; @@ -126,7 +127,7 @@ module TestModule2 { class CrossModule extends TestModule::ClassType { int anything; [ "slicer:conversion:boost.posix_time.ptime:ptimeToDateTime:dateTimeToPTime", - "slicer:conversion:std.string:stringToDateTime:dateTimeToString" ] + "slicer:conversion:std.string:stringToDateTime:dateTimeToString:nodeclare" ] TestModule::DateTime dt; TestModule::Base base; }; |