Should we allocate memory before calling ATS::RateInput::get[*]Column() functions?
Hi,
I'm working with ATS and studyiing the yieldcurve example.
According to the "ATS 1.5 – Operations Guide" manual (section 15.6.3: Creating Curve Methodology with C++ Add-In), the correct way to call ATS::RateInput functions in order to get columns is:
double* parRateList = NULL;
rateInput->getDoubleColumn(ID_PAR_RATE, parRateList);
Though, the example in Ext_yieldcurve.cpp does somthing like:
double* parRateList = NULL;
parRateList = new double[tenorNum];
rateInput->getDoubleColumn(ID_PAR_RATE, parRateList);
Note that getDoubleColumn() takes the pointer by non-const reference, that is:
bool getDoubleColumn (int paramId, double*& value);
Hence, technically speaking, both options are plausible.
By the way, there is no "delete" call for that pointer in the example...
Which one is right?
How can I know the exact semantics of the functions declared in ats/dev/include?
Thanks in advance. Best regards,
Martin
Best Answer
-
Thanks for the quick answer, @jirapongse.phuriphanvichai
If you allow me to make a suggestion, I believe you could improve the code:
I'm pretty sure that the example is leaking memory. There are a bunch of calls to new without the matching calls to delete. In my exercise I'm using std::unique_ptr<...[]> to handle this but, if you are not allowed to use C++11, a few calls to delete[] will do the job.
In addition, there is a loop checking the error of all the tenors. The 'if' inside the loop assigns true or false to the 'finish' variable. But, since both branches of the 'if' assign something to 'finish', the final value of 'finish' will reflect only the state of the last tenor checked. I suppose that the intent was to express "all errors < 1e-15" or something like that.
I hope it helps. Best regards and thanks again,
Martin
0
Answers
-
The code in section 15.6.3: Creating Curve Methodology with C++ Add-In refers to the MyAddin::do_curveaddin() method in Ext_yeildcurve.cpp.
The code in that method is:
void* MyAddin::do_curveaddin()
{
...
double* parRateList = NULL;
...
if (parRateList == NULL) parRateList = new double[tenorNum];
...
rateInput->getDoubleColumn(ID_PAR_RATE, parRateList);
...
}The code in the document is a snippet code, not the full code. Therefore, you need to allocate memory before calling getDoubleColumn().
0
Categories
- All Categories
- 6 AHS
- 37 Alpha
- 161 App Studio
- 4 Block Chain
- 4 Bot Platform
- 16 Connected Risk APIs
- 47 Data Fusion
- 30 Data Model Discovery
- 608 Datastream
- 1.3K DSS
- 577 Eikon COM
- 4.9K Eikon Data APIs
- 7 Electronic Trading
- Generic FIX
- 7 Local Bank Node API
- Trading API
- 2.7K Elektron
- 1.3K EMA
- 236 ETA
- 519 WebSocket API
- 33 FX Venues
- 10 FX Market Data
- 1 FX Post Trade
- 1 FX Trading - Matching
- 12 FX Trading – RFQ Maker
- 5 Intelligent Tagging
- 2 Legal One
- 20 Messenger Bot
- 2 Messenger Side by Side
- 9 ONESOURCE
- 7 Indirect Tax
- 59 Open Calais
- 264 Open PermID
- 39 Entity Search
- 2 Org ID
- PAM
- PAM - Logging
- 8.4K Private Comments
- 6 Product Insight
- Project Tracking
- ProView
- ProView Internal
- 20 RDMS
- 1.4K Refinitiv Data Platform
- 367 Refinitiv Data Platform Libraries
- 3 Refinitiv Due Diligence
- LSEG Due Diligence Portal API
- 3 Refinitiv Due Dilligence Centre
- Rose's Space
- 1.1K Screening
- 18 Qual-ID API
- 13 Screening Deployed
- 23 Screening Online
- 10 World-Check Customer Risk Screener
- 990 World-Check One
- 44 World-Check One Zero Footprint
- 45 Side by Side Integration API
- Test Space
- 3 Thomson One Smart
- 1.2K TR Internal
- Global Hackathon 2015
- 2 Specialists Who Code
- 10 TR Knowledge Graph
- 150 Transactions
- 142 REDI API
- 1.7K TREP APIs
- 4 CAT
- 21 DACS Station
- 117 Open DACS
- 1.1K RFA
- 103 UPA
- 172 TREP Infrastructure
- 224 TRKD
- 886 TRTH
- 5 Velocity Analytics
- 5 Wealth Management Web Services
- 59 Workspace SDK
- 9 Element Framework
- 5 Grid
- 13 World-Check Data File
- Yield Book Analytics
- 46 中文论坛