We deliver solutions for the AI eraâcombining symbolic computation, data-driven insights and deep technical expertise
...This puts the expression Power[x,3] onto the loopback link.
wstp = WSLoopbackOpen(stdenv, &errno);
WSPutFunction(wstp, "Power", 2);This gets the expression back from the loopback link.
WSPutSymbol(wstp, "x");
WSPutInteger32(wstp, 3);
...
WSGetFunction(wstp, &head, &n);This closes the loopback link again. You can use WSTransferExpression() to take an expression that you get via stdlink from the Wolfram Language, and save it in a local loopback link for later processing. You can also use WSTransferExpression() to take an expression that you have built up on a local loopback link, and transfer it back to the Wolfram Language via stdlink. This puts 21! onto a local loopback link.
WSGetSymbol(wstp, &sname);
WSGetInteger32(wstp, &k);
...
...
WSPutFunction(wstp, "Factorial", 1);
WSPutInteger32(wstp, 21);
WSPutFunction(stdlink, "FactorInteger", 1);This transfers the 21! from the loopback link to stdlink.
WSTransferExpression(stdlink, wstp);You can put any sequence of expressions onto a loopback link. Usually you get the expressions off the link in the same order as you put them on. And once you have got an expression off the link it is usually no longer saved. But by using WSCreateMark() you can mark a particular position in a sequence of expressions on a link, forcing WSTP to save every expression after the mark so that you can go back to it later. Setting up marks in WSTP links. This puts the integer 45 onto a loopback link.
...This puts 33 onto the link.
WSPutInteger32(wstp, 45);
WSPutInteger32(wstp, 33);
WSPutInteger32(wstp, 76);This will read 45 from the link. The 45 will no longer be saved.
WSGetInteger32(wstp, &i);This creates a mark at the current position on the link.
mark = WSCreateMark(wstp);
WSGetInteger32(wstp, &i);
WSGetInteger32(wstp, &i);This goes back to the position of the mark.
WSSeekMark(wstp, mark, 0);Now this will read 33 again.
WSGetInteger32(wstp, &i);It is important to destroy marks when you have finished with them, so no unnecessary expressions will be saved.
WSDestroyMark(wstp, mark);The way the WSTP library is implemented, it is very efficient to open and close loopback links, and to create and destroy marks in them. The only point to remember is that as soon as you create a mark on a particular link, WSTP will save subsequent expressions that are put on that link, and will go on doing this until the mark is destroyed. Functions for getting pieces of expressions from a link. WSTKFUNC composite function—head and arguments WSTKSYM Wolfram Language symbol WSTKINT integer WSTKREAL floating‐point number WSTKSTR character string
switch(WSGetNext(wstp)) {This reads a composite function.
case WSTKFUNC:This reads a single symbol.
WSGetArgCount(wstp, &n);
recurse for head
for (i = 0; i < n; i++) {
recurse for each argument
}
…
case WSTKSYM:This reads a machine integer.
WSGetSymbol(wstp, &name);
…
case WSTKINT:By using WSGetNext() it is straightforward to write programs that can read any expression. The way WSTP works, the head and arguments of a function appear as successive expressions on the link, which you read one after another. Note that if you know that the head of a function will be a symbol, then you can use WSGetFunction() instead of WSGetNext(). In this case, however, you still need to call WSReleaseSymbol() to disown the memory used to store the symbol name. Functions for putting pieces of expressions onto a link. WSPutNext() specifies types of expressions using constants such as WSTKFUNC from the wstp.h header file—just like WSGetNext().
WSGetInteger32(wstp, &i);
…
}
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4