Skip to content

Commit 56a53b8

Browse files
mgronckijenkins
authored andcommitted
Merge remote-tracking branch 'origin/master' into QPR-12437
2 parents d0bc0af + 62883d0 commit 56a53b8

3 files changed

Lines changed: 70 additions & 33 deletions

File tree

OREData/ored/CMakeLists.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -311,6 +311,7 @@ portfolio/windowbarrieroption.cpp
311311
portfolio/worstofbasketswap.cpp
312312
report/csvreport.cpp
313313
report/inmemoryreport.cpp
314+
report/utilities.cpp
314315
scripting/ast.cpp
315316
scripting/astprinter.cpp
316317
scripting/astresetter.cpp

OREData/ored/report/utilities.cpp

Lines changed: 66 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,66 @@
1+
/*
2+
Copyright (C) 2016 Quaternion Risk Management Ltd
3+
All rights reserved.
4+
5+
This file is part of ORE, a free-software/open-source library
6+
for transparent pricing and risk analysis - http://opensourcerisk.org
7+
8+
ORE is free software: you can redistribute it and/or modify it
9+
under the terms of the Modified BSD License. You should have received a
10+
copy of the license along with this program.
11+
The license is also available online at <http://opensourcerisk.org>
12+
13+
This program is distributed on the basis that it will form a useful
14+
contribution to risk analytics and model standardisation, but WITHOUT
15+
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
16+
FITNESS FOR A PARTICULAR PURPOSE. See the license for more details.
17+
*/
18+
19+
20+
#include <ored/report/utilities.hpp>
21+
22+
namespace ore {
23+
namespace data {
24+
25+
//! Adds a column to an existing InMemoryReport, the column value will be set to *value* for all existing rows
26+
//! Caution: This copies all existing values of the report and create a new one
27+
// TODO: Improve the report class to allow to add new columns to avoid copies
28+
QuantLib::ext::shared_ptr<ore::data::InMemoryReport>
29+
addColumnToExisitingReport(const std::string& columnName, const std::string& value,
30+
const QuantLib::ext::shared_ptr<ore::data::InMemoryReport>& report) {
31+
QuantLib::ext::shared_ptr<ore::data::InMemoryReport> newReport =
32+
QuantLib::ext::make_shared<ore::data::InMemoryReport>();
33+
if (report != nullptr) {
34+
newReport->addColumn(columnName, string());
35+
for (size_t i = 0; i < report->columns(); i++) {
36+
newReport->addColumn(report->header(i), report->columnType(i), report->columnPrecision(i));
37+
}
38+
for (size_t row = 0; row < report->rows(); row++) {
39+
newReport->next();
40+
newReport->add(value);
41+
for (size_t col = 0; col < report->columns(); col++) {
42+
newReport->add(report->data(col)[row]);
43+
}
44+
}
45+
newReport->end();
46+
}
47+
return newReport;
48+
}
49+
50+
QuantLib::ext::shared_ptr<ore::data::InMemoryReport>
51+
concatenateReports(const std::vector<QuantLib::ext::shared_ptr<ore::data::InMemoryReport>>& reports) {
52+
if (!reports.empty() && reports.front() != nullptr) {
53+
auto firstReport = reports.front();
54+
QuantLib::ext::shared_ptr<InMemoryReport> concatenatedReport =
55+
QuantLib::ext::make_shared<InMemoryReport>(*firstReport);
56+
for (size_t i = 1; i < reports.size(); i++) {
57+
if (reports[i] != nullptr) {
58+
concatenatedReport->add(*reports[i]);
59+
}
60+
}
61+
return concatenatedReport;
62+
}
63+
return nullptr;
64+
}
65+
} // namespace data
66+
} // namespace ore

OREData/ored/report/utilities.hpp

Lines changed: 3 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -33,25 +33,7 @@ namespace data {
3333
// TODO: Improve the report class to allow to add new columns to avoid copies
3434
QuantLib::ext::shared_ptr<ore::data::InMemoryReport>
3535
addColumnToExisitingReport(const std::string& columnName, const std::string& value,
36-
const QuantLib::ext::shared_ptr<ore::data::InMemoryReport>& report) {
37-
QuantLib::ext::shared_ptr<ore::data::InMemoryReport> newReport =
38-
QuantLib::ext::make_shared<ore::data::InMemoryReport>();
39-
if (report != nullptr) {
40-
newReport->addColumn(columnName, string());
41-
for (size_t i = 0; i < report->columns(); i++) {
42-
newReport->addColumn(report->header(i), report->columnType(i), report->columnPrecision(i));
43-
}
44-
for (size_t row = 0; row < report->rows(); row++) {
45-
newReport->next();
46-
newReport->add(value);
47-
for (size_t col = 0; col < report->columns(); col++) {
48-
newReport->add(report->data(col)[row]);
49-
}
50-
}
51-
newReport->end();
52-
}
53-
return newReport;
54-
}
36+
const QuantLib::ext::shared_ptr<ore::data::InMemoryReport>& report);
5537

5638
QuantLib::ext::shared_ptr<ore::data::InMemoryReport>
5739
addColumnsToExisitingReport(const QuantLib::ext::shared_ptr<ore::data::InMemoryReport>& newColsReport,
@@ -82,19 +64,7 @@ addColumnsToExisitingReport(const QuantLib::ext::shared_ptr<ore::data::InMemoryR
8264
}
8365

8466
QuantLib::ext::shared_ptr<ore::data::InMemoryReport>
85-
concatenateReports(const std::vector<QuantLib::ext::shared_ptr<ore::data::InMemoryReport>>& reports) {
86-
if (!reports.empty() && reports.front() != nullptr) {
87-
auto firstReport = reports.front();
88-
QuantLib::ext::shared_ptr<InMemoryReport> concatenatedReport =
89-
QuantLib::ext::make_shared<InMemoryReport>(*firstReport);
90-
for (size_t i = 1; i < reports.size(); i++) {
91-
if (reports[i] != nullptr) {
92-
concatenatedReport->add(*reports[i]);
93-
}
94-
}
95-
return concatenatedReport;
96-
}
97-
return nullptr;
98-
}
67+
concatenateReports(const std::vector<QuantLib::ext::shared_ptr<ore::data::InMemoryReport>>& reports);
68+
9969
} // namespace data
10070
} // namespace ore

0 commit comments

Comments
 (0)