79 lines
3.1 KiB
MQL5
79 lines
3.1 KiB
MQL5
//+------------------------------------------------------------------+
|
|
//| Reservoir.mq5 |
|
|
//| Copyright 2022, MetaQuotes Ltd. |
|
|
//| https://www.mql5.com |
|
|
//| Test script to store and restore user data to/from resource |
|
|
//+------------------------------------------------------------------+
|
|
#include "..\..\Include\Reservoir.mqh"
|
|
#include "..\..\Include\PRTF.mqh"
|
|
|
|
//+------------------------------------------------------------------+
|
|
//| Script program start function |
|
|
//+------------------------------------------------------------------+
|
|
void OnStart()
|
|
{
|
|
const string resource = "::reservoir";
|
|
|
|
Reservoir res1;
|
|
string message = "message1"; // custom string to write into resource
|
|
PRTF(res1.packString(message));
|
|
|
|
MqlTick tick1[1]; // simple struct to add
|
|
SymbolInfoTick(_Symbol, tick1[0]);
|
|
PRTF(res1.packArray(tick1));
|
|
PRTF(res1.packNumber(DBL_MAX)); // double value
|
|
|
|
/*
|
|
// complex structures with strings and objects not supported,
|
|
// compiler error: 'MqlParam' has objects and cannot be used as union member
|
|
MqlParam param[1] = {{}};
|
|
res1.packArray(param);
|
|
*/
|
|
|
|
res1.submit(resource); // commit our custom data into the resource
|
|
res1.clear(); // make the reservoir object empty
|
|
|
|
string reply; // new variable to receive the message back
|
|
MqlTick tick2[1]; // new struct to receive the tick back
|
|
double result; // new variable to receive the number
|
|
|
|
PRTF(res1.acquire(resource)); // attach the object to specified resource
|
|
PRTF(res1.unpackString(reply)); // restore custom string
|
|
PRTF(res1.unpackArray(tick2)); // restore simple struct
|
|
PRTF(res1.unpackNumber(result)); // restore double value
|
|
|
|
// output and compare restored data (string, struct, and number)
|
|
PRTF(reply);
|
|
PRTF(ArrayCompare(tick1, tick2));
|
|
ArrayPrint(tick2);
|
|
PRTF(result == DBL_MAX);
|
|
|
|
// make sure the reservoir was read till the end
|
|
PRTF(res1.size());
|
|
PRTF(res1.cursor());
|
|
|
|
PrintFormat("Cleaning up local storage '%s'", resource);
|
|
ResourceFree(resource);
|
|
}
|
|
//+------------------------------------------------------------------+
|
|
/*
|
|
example output
|
|
|
|
res1.packString(message)=4 / ok
|
|
res1.packArray(tick1)=20 / ok
|
|
res1.packNumber(DBL_MAX)=23 / ok
|
|
res1.acquire(resource)=true / ok
|
|
res1.unpackString(reply)=4 / ok
|
|
res1.unpackArray(tick2)=20 / ok
|
|
res1.unpackNumber(result)=23 / ok
|
|
reply=message1 / ok
|
|
ArrayCompare(tick1,tick2)=0 / ok
|
|
[time] [bid] [ask] [last] [volume] [time_msc] [flags] [volume_real]
|
|
[0] 2022.05.19 23:09:32 1.05867 1.05873 0.0000 0 1653001772050 6 0.00000
|
|
result==DBL_MAX=true / ok
|
|
res1.size()=23 / ok
|
|
res1.cursor()=23 / ok
|
|
Cleaning up local storage '::reservoir'
|
|
|
|
*/
|
|
//+------------------------------------------------------------------+
|