From 86b1de85536e93c59a25702a5a2d3e384202ffd2 Mon Sep 17 00:00:00 2001 From: jsdelfino Date: Tue, 11 Dec 2012 04:03:29 +0000 Subject: More changes to port to C++11, adjust to use the new JSON support, and cleanup rest of the modules. git-svn-id: http://svn.us.apache.org/repos/asf/tuscany@1419987 13f79535-47bb-0310-9956-ffa450edef68 --- sca-cpp/trunk/modules/server/mod-scheme.hpp | 43 ++++++++++++----------------- 1 file changed, 17 insertions(+), 26 deletions(-) (limited to 'sca-cpp/trunk/modules/server/mod-scheme.hpp') diff --git a/sca-cpp/trunk/modules/server/mod-scheme.hpp b/sca-cpp/trunk/modules/server/mod-scheme.hpp index 43d7bf4041..36d91dc904 100644 --- a/sca-cpp/trunk/modules/server/mod-scheme.hpp +++ b/sca-cpp/trunk/modules/server/mod-scheme.hpp @@ -48,40 +48,31 @@ const list primitiveProcedures(const list& l) { return cons(mklist(scheme::primitiveSymbol, car(l)), primitiveProcedures(cdr(l))); } -/** - * Apply a Scheme component implementation function. - */ -struct applyImplementation { - const value impl; - const list px; - - applyImplementation(const value& impl, const list& px) : impl(impl), px(scheme::quotedParameters(primitiveProcedures(px))) { - } - - const value operator()(const list& params) const { - const value expr = cons(car(params), append(scheme::quotedParameters(cdr(params)), px)); - debug(expr, "modeval::scheme::applyImplementation::input"); - scheme::Env env = scheme::setupEnvironment(); - const value res = scheme::evalScript(expr, impl, env); - const value val = isNil(res)? mklist(value(), string("Could not evaluate expression")) : mklist(res); - debug(val, "modeval::scheme::applyImplementation::result"); - return val; - } -}; - /** * Evaluate a Scheme component implementation and convert it to an * applicable lambda function. */ -const failable&)> > evalImplementation(const string& path, const value& impl, const list& px) { - const string fpath(path + attributeValue("script", impl)); +const failable evalImplementation(const string& path, const value& impl, const list& px) { + const string fpath(path + (string)attributeValue("script", impl)); ifstream is(fpath); if (fail(is)) - return mkfailure&)> >(string("Could not read implementation: ") + fpath); + return mkfailure(string("Could not read implementation: ") + fpath); const value script = scheme::readScript(is); if (isNil(script)) - return mkfailure&)> >(string("Could not read implementation: ") + fpath); - return lambda&)>(applyImplementation(script, px)); + return mkfailure(string("Could not read implementation: ") + fpath); + const list pxproc = scheme::quotedParameters(primitiveProcedures(px)); + + const lvvlambda applyImplementation = [script, pxproc](const list& params) -> const value { + // Apply a Scheme component implementation function + const value expr = cons(car(params), append(scheme::quotedParameters(cdr(params)), pxproc)); + debug(expr, "modeval::scheme::applyImplementation::input"); + scheme::Env env = scheme::setupEnvironment(); + const value res = scheme::evalScript(expr, script, env); + const value val = isNil(res)? mklist(nilValue, string("Could not evaluate expression")) : mklist(res); + debug(val, "modeval::scheme::applyImplementation::result"); + return val; + }; + return applyImplementation; } } -- cgit v1.2.3