XSLPadduserfuncs
XSLPadduserfuncs |
int XPRS_CC XSLPadduserfuncs(XSLPprob Prob, int nSLPUserFunc, int *Type, double *Value);
Prob
|
The current SLP problem.
|
nSLPUserFunc
|
Number of SLP user functions to be added.
|
Type
|
Integer array of token types.
|
Value
|
Double array of token values corresponding to the types in
Type.
|
Suppose we have the following user functions written in C in a library lib01:
Func1 which takes two arguments and returns two values
Func2 which takes one argument and returns the value and (optionally) the derivative of the function. Although the function is referred to as Func2 in the problem, we are actually using the function NewFunc2 from the library.
The following example adds the two functions to the SLP problem:
int nUserFuncs, ExtName, LibName, Type[10]; double Value[10]; XSLPsetstring(Prob,&LibName,"lib01"); Type[0] = XSLP_UFARGTYPE; Value[0] = (double) 023; Type[1] = XSLP_UFEXETYPE; Value[1] = (double) 1; Type[2] = XSLP_STRING; Value[2] = 0; Type[3] = XSLP_STRING; Value[3] = LibName; Type[4] = XSLP_EOF; XSLPsetstring(Prob,&ExtName,"NewFunc2"); Type[5] = XSLP_UFARGTYPE; Value[5] = (double) 010023; Type[6] = XSLP_UFEXETYPE; Value[6] = (double) 1; Type[7] = XSLP_STRING; Value[7] = ExtName; Type[8] = XSLP_STRING; Value[8] = LibName; Type[9] = XSLP_EOF; XSLPgetintattrib(Prob,XSLP_UFS,&nUserFuncs); XSLPadduserfuncs(Prob,2,Type,Value); XSLPaddnames(Prob,XSLP_USERFUNCNAMES,"Func1\0Func2", nUserFuncs+1,nUserFuncs+2);
Note that the values for XSLP_UFARGTYPE are in octal
XSLP_UFEXETYPE describes the functions as taking a double array of values and an integer array of function information.
The remaining tokens hold the values for the external name and the three optional parameters (file, item and template). Func01 has the same internal name (in the problem) and external name (in the library), so the library name is not required. A zero string index is used as a place holder, so that the next item is correctly recognized as the library name. Func2 has a different external name, so this appears as the first string token, followed by the library name. As neither function needs the item or template names, these have been omitted.
The number of user functions already in the problem is in the integer problem attribute XSLP_UFS. The new internal names are added using XSLPaddnames.
The token type and value arrays Type and Value are formatted in a similar way to the unparsed internal format function stack. For possible token types and values see the chapter on "Formula Parsing". Each formula must be terminated by an XSLP_EOF token.
The XSLPadd... functions load additional items into the SLP problem. The corresponding XSLPload... functions delete any existing items first.