Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 8 additions & 0 deletions include/mdsobjects.h
Original file line number Diff line number Diff line change
Expand Up @@ -185,14 +185,18 @@ namespace MDSplus
/// Friendship declaration for TDI expression compilation
friend EXPORT Data *compile(const char *expr);
friend EXPORT Data *compileWithArgs(const char *expr, int nArgs...);
friend EXPORT Data *compileWithArgs(const char *expr, Data **args, int nArgs);
friend EXPORT Data *compile(const char *expr, Tree *tree);
friend EXPORT Data *compileWithArgs(const char *expr, Tree *tree,
int nArgs...);
friend EXPORT Data *compileWithArgs(const char *expr, Tree *tree, Data **args, int nArgs);
friend EXPORT Data *execute(const char *expr);
friend EXPORT Data *executeWithArgs(const char *expr, int nArgs...);
friend EXPORT Data *executeWithArgs(const char *expr, Data **args, int nArgs);
friend EXPORT Data *execute(const char *expr, Tree *tree);
friend EXPORT Data *executeWithArgs(const char *expr, Tree *tree,
int nArgs...);
friend EXPORT Data *executeWithArgs(const char *expr, Tree *tree, Data **args, int nArgs);
friend EXPORT Data *deserialize(char const *serialized);
friend EXPORT Data *deserialize(Data *serialized);
///@}
Expand Down Expand Up @@ -4564,12 +4568,16 @@ namespace MDSplus
EXPORT Data *deserialize(Data *serializedData);
EXPORT Data *compile(const char *expr);
EXPORT Data *compileWithArgs(const char *expr, int nArgs...);
EXPORT Data *compileWithArgs(const char *expr, Data **argsData, int nArgs);
EXPORT Data *compile(const char *expr, Tree *tree);
EXPORT Data *compileWithArgs(const char *expr, Tree *tree, int nArgs...);
EXPORT Data *compileWithArgs(const char *expr, Tree *tree, Data **argsData, int nArgs);
EXPORT Data *execute(const char *expr);
EXPORT Data *executeWithArgs(const char *expr, int nArgs...);
EXPORT Data *executeWithArgs(const char *expr, Data **argsData, int nArgs);
EXPORT Data *execute(const char *expr, Tree *tree);
EXPORT Data *executeWithArgs(const char *expr, Tree *tree, int nArgs...);
EXPORT Data *executeWithArgs(const char *expr, Tree *tree, Data **argsData, int nArgs);
// EXPORT Tree *getActiveTree();
// EXPORT void setActiveTree(Tree *tree);
// Required for handling dynamic memory allocated in a different DLL on windows
Expand Down
109 changes: 109 additions & 0 deletions mdsobjects/cpp/mdsdataobjects.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -849,6 +849,37 @@ Data *MDSplus::compileWithArgs(const char *expr, int nArgs...)
return res;
}

Data *MDSplus::compileWithArgs(const char *expr, Data **argsData, int nArgs)
{
void **args = new void *[nArgs];
int i;
for (i = 0; i < nArgs; i++)
{
args[i] = argsData[i]->convertToDsc();
}
int status;
Data *res;
try
{
AutoPointer<Tree> actTree(getActiveTree());
res = (Data *)compileFromExprWithArgs(expr, nArgs, &args[0], actTree,
(actTree) ? actTree->getCtx() : NULL,
&status);
}
catch (MdsException &exc)
{
res = (Data *)compileFromExprWithArgs(expr, nArgs, &args[0], NULL, NULL,
&status);
}
for (i = 0; i < nArgs; i++)
freeDsc(args[i]);
delete [] args;

if (STATUS_NOT_OK)
throw MdsException(status);
return res;
}

///
/// \brief MDSplus::compile
/// \param expr TDI expression to evaluate
Expand Down Expand Up @@ -888,6 +919,26 @@ Data *MDSplus::compileWithArgs(const char *expr, Tree *tree, int nArgs...)
return res;
}

Data *MDSplus::compileWithArgs(const char *expr, Tree *tree, Data **argsData, int nArgs)
{
int i;
void **args = new void *[nArgs];

for (i = 0; i < nArgs; i++)
{
args[i] = argsData[i]->convertToDsc();
}
int status;
Data *res = (Data *)compileFromExprWithArgs(
expr, nArgs, (void *)args, tree, (tree) ? tree->getCtx() : NULL, &status);
for (i = 0; i < nArgs; i++)
freeDsc(args[i]);
delete [] args;
if (STATUS_NOT_OK)
throw MdsException(status);
return res;
}

Data *MDSplus::execute(const char *expr) { return executeWithArgs(expr, 0); }

Data *MDSplus::executeWithArgs(const char *expr, int nArgs...)
Expand Down Expand Up @@ -926,6 +977,40 @@ Data *MDSplus::executeWithArgs(const char *expr, int nArgs...)

return evalData;
}
Data *MDSplus::executeWithArgs(const char *expr, Data **argsData, int nArgs)
{
void **args = new void *[nArgs];


for (int i = 0; i < nArgs; i++)
{
args[i] = argsData[i]->convertToDsc();
}
int status;
Tree *actTree = 0;
try
{
actTree = getActiveTree();
}
catch (MdsException const &exc)
{
actTree = 0;
}
Data *compData = (Data *)compileFromExprWithArgs(
expr, nArgs, (void *)args, actTree, (actTree) ? actTree->getCtx() : NULL,
&status);
if (STATUS_NOT_OK)
throw MdsException(status);
Data *evalData = compData->data();
deleteData(compData);
for (int i = 0; i < nArgs; i++)
freeDsc(args[i]);
delete [] args;
if (actTree)
delete (actTree);

return evalData;
}

Data *MDSplus::execute(const char *expr, Tree *tree)
{
Expand Down Expand Up @@ -958,6 +1043,30 @@ Data *MDSplus::executeWithArgs(const char *expr, Tree *tree, int nArgs...)
freeDsc(args[i]);
return evalData;
}
Data *MDSplus::executeWithArgs(const char *expr, Tree *tree, Data **argsData, int nArgs)
{
void **args = new void *[nArgs];

for (int i = 0; i < nArgs; i++)
{
args[i] = argsData[i]->convertToDsc();
}
int status;
Data *compData =
(Data *)compileFromExprWithArgs((char *)expr, nArgs, (void *)args, tree,
(tree) ? tree->getCtx() : NULL, &status);
if (STATUS_NOT_OK)
throw MdsException(status);
if (!compData)
throw MdsException("Cannot compile expression");

Data *evalData = compData->data();
deleteData(compData);
for (int i = 0; i < nArgs; i++)
freeDsc(args[i]);
delete [] args;
return evalData;
}

// Complete Conversion to Dsc by condsidering help, units and error

Expand Down