--- linuxsampler/trunk/src/scriptvm/CoreVMFunctions.cpp 2015/03/31 17:46:11 2727 +++ linuxsampler/trunk/src/scriptvm/CoreVMFunctions.cpp 2016/07/18 09:42:28 2965 @@ -142,4 +142,50 @@ return successResult( args->arg(0)->asIntArray()->arraySize() ); } +/////////////////////////////////////////////////////////////////////////// +// built-in script function: inc() + +VMFnResult* CoreVMFunction_inc::exec(VMFnArgs* args) { + VMExpr* arg = args->arg(0); + VMIntExpr* in = dynamic_cast(arg); + VMVariable* out = dynamic_cast(arg); + if (!in || !out) successResult(0); + int i = in->evalInt() + 1; + IntLiteral tmp(i); + out->assignExpr(&tmp); + return successResult(i); +} + +/////////////////////////////////////////////////////////////////////////// +// built-in script function: dec() + +VMFnResult* CoreVMFunction_dec::exec(VMFnArgs* args) { + VMExpr* arg = args->arg(0); + VMIntExpr* in = dynamic_cast(arg); + VMVariable* out = dynamic_cast(arg); + if (!in || !out) successResult(0); + int i = in->evalInt() - 1; + IntLiteral tmp(i); + out->assignExpr(&tmp); + return successResult(i); +} + +/////////////////////////////////////////////////////////////////////////// +// built-in script function: sh_left() + +VMFnResult* CoreVMFunction_sh_left::exec(VMFnArgs* args) { + int i = args->arg(0)->asInt()->evalInt(); + int n = args->arg(1)->asInt()->evalInt(); + return successResult(i << n); +} + +/////////////////////////////////////////////////////////////////////////// +// built-in script function: sh_right() + +VMFnResult* CoreVMFunction_sh_right::exec(VMFnArgs* args) { + int i = args->arg(0)->asInt()->evalInt(); + int n = args->arg(1)->asInt()->evalInt(); + return successResult(i >> n); +} + } // namespace LinuxSampler