Logo
Fully annotated reference manual - version 1.8.12
Loading...
Searching...
No Matches
utilities.cpp
Go to the documentation of this file.
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
21
22namespace ore {
23namespace 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
28QuantLib::ext::shared_ptr<ore::data::InMemoryReport>
29addColumnToExisitingReport(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
50QuantLib::ext::shared_ptr<ore::data::InMemoryReport>
51addColumnsToExisitingReport(const QuantLib::ext::shared_ptr<ore::data::InMemoryReport>& newColsReport,
52 const QuantLib::ext::shared_ptr<ore::data::InMemoryReport>& report) {
53 QuantLib::ext::shared_ptr<ore::data::InMemoryReport> newReport =
54 QuantLib::ext::make_shared<ore::data::InMemoryReport>();
55 if (report != nullptr && newColsReport->rows() == 1) {
56
57 for (size_t i = 0; i < newColsReport->columns(); ++i) {
58 newReport->addColumn(newColsReport->header(i), newColsReport->columnType(i),
59 newColsReport->columnPrecision(i));
60 }
61 for (size_t i = 0; i < report->columns(); i++) {
62 newReport->addColumn(report->header(i), report->columnType(i), report->columnPrecision(i));
63 }
64 for (size_t row = 0; row < report->rows(); row++) {
65 newReport->next();
66 for (size_t i = 0; i < newColsReport->columns(); ++i) {
67 newReport->add(newColsReport->data(i)[0]);
68 }
69 for (size_t col = 0; col < report->columns(); col++) {
70 newReport->add(report->data(col)[row]);
71 }
72 }
73 newReport->end();
74 }
75 return newReport;
76}
77
78QuantLib::ext::shared_ptr<ore::data::InMemoryReport>
79concatenateReports(const std::vector<QuantLib::ext::shared_ptr<ore::data::InMemoryReport>>& reports) {
80 if (!reports.empty() && reports.front() != nullptr) {
81 auto firstReport = reports.front();
82 QuantLib::ext::shared_ptr<InMemoryReport> concatenatedReport =
83 QuantLib::ext::make_shared<InMemoryReport>(*firstReport);
84 for (size_t i = 1; i < reports.size(); i++) {
85 if (reports[i] != nullptr) {
86 concatenatedReport->add(*reports[i]);
87 }
88 }
89 return concatenatedReport;
90 }
91 return nullptr;
92}
93} // namespace data
94} // namespace ore
SafeStack< ValueType > value
@ data
Definition: log.hpp:77
QuantLib::ext::shared_ptr< ore::data::InMemoryReport > addColumnToExisitingReport(const std::string &columnName, const std::string &value, const QuantLib::ext::shared_ptr< ore::data::InMemoryReport > &report)
Definition: utilities.cpp:29
QuantLib::ext::shared_ptr< ore::data::InMemoryReport > concatenateReports(const std::vector< QuantLib::ext::shared_ptr< ore::data::InMemoryReport > > &reports)
Definition: utilities.cpp:79
QuantLib::ext::shared_ptr< ore::data::InMemoryReport > addColumnsToExisitingReport(const QuantLib::ext::shared_ptr< ore::data::InMemoryReport > &newColsReport, const QuantLib::ext::shared_ptr< ore::data::InMemoryReport > &report)
Definition: utilities.cpp:51
Serializable Credit Default Swap.
Definition: namespaces.docs:23
Utilities functions for reports.