I have an application that takes a pointer to a function and returns the result of the function. I need to read the function in memory, save it as a file (as binary data is fine), and then read it in later, so that it can run it again.
The 2 functions are:
1. Save function from memory
2. Load function from text file
The specs are:
typedef void (* FUNCTION_PTR) (float*, float**);
int saveFunction (FUNCTION_PTR pToFunction, CString fileName)
// this function takes the pointer to the function in memory and saves it as a file
FUNCTION_PTR LoadFunction (CString fileName)
// this function takes the filename, loads the file, loads the function into memory, and then returns a pointer to the funciton
to run the function:
(*pToFunction)(inputData, output);
// This is how it works. I just added to explain.
the function should occupy less than 10K of memory.
here is an example of a function that we want to save and load the binary code for:
#define TRUNC(x)(((x)>=0) ? floor(x) : ceil(x))
#define C_FPREM (_finite(f[0]/f[1]) ? f[0]-(TRUNC(f[0]/f[1])*f[1]) : f[0]/f[1])
#define C_F2XM1 (((fabs(f[0])<=1) && (!_isnan(f[0]))) ? (pow(2,f[0])-1) : ((!_finite(f[0]) && !_isnan(f[0]) && (f[0]<0)) ? -1 : f[0]))
float DiscipulusCFunction(float v[])
{
long double f[8];
long double tmp = 0;
int cflag = 0;
f[0]=f[1]=f[2]=f[3]=f[4]=f[5]=f[6]=f[7]=0;
f[0]-=v[60];
cflag=(f[0] < f[2]);
f[1]+=f[0];
f[0]+=v[31];
f[0]+=f[2];
if (!cflag) f[0] = f[2];
f[0]-=v[12];
f[0]/=f[0];
if (cflag) f[0] = f[0];
if (!cflag) f[0] = f[3];
f[0]+=f[1];
f[0]/=f[3];
f[0]/=v[61];
f[0]/=v[10];
cflag=(f[0] < f[1]);
f[0]+=f[1];
cflag=(f[0] < f[2]);
cflag=(f[0] < f[0]);
f[0]+=f[0];
if (!_finite(f[0])) f[0]=0;
return f[0];
}
the first parameter that is passed is an array of inputs to function. it is an array of 64 floats.
the second parameter is the output from the function. it says return f[0], but i call it with this code:
(*pGeneticProgram)(g_StockData[currentDay], Outputs);
myValue = Outputs[0];
so, i am not using the return value. it stores the return values in Outputs. I don't know why the function code only has one parameter. i guess that's not correct because i know the code i call it works. so i think it actually takes 2 parameters, the input array[64], and the output array[8].
if its easier to use the return value instead of modifying the outputs array, that's could work. but i don't know if that works so if you want to do it let me know and i will try it and see.
also, there can be up to 2048 operations. (f[0]-=v[60]; is 1 operation). so i think that means the function could take up to 8k of memory, but i am not sure.
feel free to ask me questions by PMB !!!
also, the outputs array has 8 floats.
if possible, let's save the data as a text file. if not, it can be saved as a binary file.
I can help you but I'm not sure what you want to do. I understabd that you want to load some data into an array in future time (from any data or text file) is it true. I can help you a lot but explain me in details. If you want to load a function into memory in this curricumstances you need a dinamic link library - dll.I'm waiting for your answer.