From ae0b7c0063db6236be2d7cf01ddbf2159f77c98c Mon Sep 17 00:00:00 2001 From: jsdelfino Date: Tue, 11 Dec 2012 03:51:03 +0000 Subject: Port kernel to C++11 and refactor some of the core modules. Convert functors to lambdas, and add C++ const, noexcept and inline annotations to get more efficient generated code. git-svn-id: http://svn.us.apache.org/repos/asf/tuscany@1419985 13f79535-47bb-0310-9956-ffa450edef68 --- sca-cpp/trunk/modules/scheme/primitive.hpp | 86 +++++++++++++++--------------- 1 file changed, 43 insertions(+), 43 deletions(-) (limited to 'sca-cpp/trunk/modules/scheme/primitive.hpp') diff --git a/sca-cpp/trunk/modules/scheme/primitive.hpp b/sca-cpp/trunk/modules/scheme/primitive.hpp index 59aee12073..2e0c4f62dd 100644 --- a/sca-cpp/trunk/modules/scheme/primitive.hpp +++ b/sca-cpp/trunk/modules/scheme/primitive.hpp @@ -40,7 +40,7 @@ const value quoteSymbol("'"); const value lambdaSymbol("lambda"); #ifdef WANT_THREADS -perthread_ptr displayOutStream; +const perthread_ptr displayOutStream; #else ostream* displayOutStream = NULL; #endif @@ -51,49 +51,49 @@ perthread_ptr logOutStream; ostream* logOutStream = NULL; #endif -const bool setupDisplay(ostream& out) { +inline const bool setupDisplay(ostream& out) { displayOutStream = &out; return true; } -ostream& displayStream() { +inline ostream& displayStream() { if (displayOutStream == NULL) return cout; return *displayOutStream; } -const bool setupLog(ostream& out) { +inline const bool setupLog(ostream& out) { logOutStream = &out; return true; } -ostream& logStream() { +inline ostream& logStream() { if (logOutStream == NULL) return cerr; return *logOutStream; } -const value carProc(const list& args) { +inline const value carProc(const list& args) { return car((list )car(args)); } -const value cdrProc(const list& args) { +inline const value cdrProc(const list& args) { return cdr((list )car(args)); } -const value consProc(const list& args) { +inline const value consProc(const list& args) { return cons(car(args), (list )cadr(args)); } -const value listProc(const list& args) { +inline const value listProc(const list& args) { return args; } -const value assocProc(const list& args) { +inline const value assocProc(const list& args) { return assoc(car(args), (list >)cadr(args)); } -const value nulProc(const list& args) { +inline const value nulProc(const list& args) { const value v(car(args)); if (isNil(v)) return true; @@ -102,31 +102,31 @@ const value nulProc(const list& args) { return false; } -const value equalProc(const list& args) { +inline const value equalProc(const list& args) { return (bool)(car(args) == cadr(args)); } -const value addProc(const list& args) { +inline const value addProc(const list& args) { if (isNil(cdr(args))) return (double)car(args); return (double)car(args) + (double)cadr(args); } -const value subProc(const list& args) { +inline const value subProc(const list& args) { if (isNil(cdr(args))) return (double)0 - (double)car(args); return (double)car(args) - (double)cadr(args); } -const value mulProc(const list& args) { +inline const value mulProc(const list& args) { return (double)car(args) * (double)cadr(args); } -const value divProc(const list& args) { +inline const value divProc(const list& args) { return (double)car(args) / (double)cadr(args); } -const value displayProc(const list& args) { +inline const value displayProc(const list& args) { if (isNil(args)) { displayStream() << endl; return true; @@ -135,7 +135,7 @@ const value displayProc(const list& args) { return displayProc(cdr(args)); } -const value logProc(const list& args) { +inline const value logProc(const list& args) { if (isNil(args)) { logStream() << endl; return true; @@ -144,52 +144,52 @@ const value logProc(const list& args) { return logProc(cdr(args)); } -const value uuidProc(unused const list& args) { +inline const value uuidProc(unused const list& args) { return mkuuid(); } -const value cadrProc(const list& args) { +inline const value cadrProc(const list& args) { return cadr((list )car(args)); } -const value caddrProc(const list& args) { +inline const value caddrProc(const list& args) { return caddr((list )car(args)); } -const value cadddrProc(const list& args) { +inline const value cadddrProc(const list& args) { return cadddr((list )car(args)); } -const value cddrProc(const list& args) { +inline const value cddrProc(const list& args) { return cddr((list )car(args)); } -const value cdddrProc(const list& args) { +inline const value cdddrProc(const list& args) { return cdddr((list )car(args)); } -const value appendProc(const list& args) { +inline const value appendProc(const list& args) { return append((list )car(args), (list)cadr(args)); } -const value startProc(unused const list& args) { - return lambda&)>(); +inline const value startProc(unused const list& args) { + return lvvlambda(); } -const value stopProc(unused const list& args) { - return lambda&)>(); +inline const value stopProc(unused const list& args) { + return lvvlambda(); } -const value applyPrimitiveProcedure(const value& proc, list& args) { - const lambda&)> func(cadr((list)proc)); +inline const value applyPrimitiveProcedure(const value& proc, list& args) { + const lvvlambda func(cadr((list)proc)); return func(args); } -const bool isPrimitiveProcedure(const value& proc) { +inline const bool isPrimitiveProcedure(const value& proc) { return isTaggedList(proc, primitiveSymbol); } -const bool isSelfEvaluating(const value& exp) { +inline const bool isSelfEvaluating(const value& exp) { if(isNil(exp)) return true; if(isNumber(exp)) @@ -203,15 +203,15 @@ const bool isSelfEvaluating(const value& exp) { return false; } -const value primitiveImplementation(const list& proc) { +inline const value primitiveImplementation(const list& proc) { return car(cdr(proc)); } -template const value primitiveProcedure(const F& f) { - return mklist(primitiveSymbol, (lambda&)>)f); +template inline const value primitiveProcedure(const F& f) { + return mklist(primitiveSymbol, (lvvlambda)f); } -const list primitiveProcedureNames() { +inline const list primitiveProcedureNames() { return mklist("car") + "cdr" + "cons" @@ -237,7 +237,7 @@ const list primitiveProcedureNames() { + "stop"; } -const list primitiveProcedureObjects() { +inline const list primitiveProcedureObjects() { return mklist(primitiveProcedure(carProc)) + primitiveProcedure(cdrProc) + primitiveProcedure(consProc) @@ -263,23 +263,23 @@ const list primitiveProcedureObjects() { + primitiveProcedure(stopProc); } -const bool isFalse(const value& exp) { +inline const bool isFalse(const value& exp) { return (bool)exp == false; } -const bool isTrue(const value& exp) { +inline const bool isTrue(const value& exp) { return (bool)exp == true; } -const bool isQuoted(const value& exp) { +inline const bool isQuoted(const value& exp) { return isTaggedList(exp, quoteSymbol); } -const value textOfQuotation(const value& exp) { +inline const value textOfQuotation(const value& exp) { return car(cdr((list )exp)); } -const value makeLambda(const list& parameters, const list& body) { +inline const value makeLambda(const list& parameters, const list& body) { return cons(lambdaSymbol, cons(parameters, body)); } -- cgit v1.2.3