Skip to content

Commit c1be40d

Browse files
damienbarkerjenkins
authored andcommitted
QPR-11831 Add a sensitivity buffer stream
1 parent 2df9276 commit c1be40d

5 files changed

Lines changed: 67 additions & 32 deletions

File tree

OREAnalytics/orea/app/inputparameters.cpp

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -312,6 +312,10 @@ void InputParameters::setSensitivityStreamFromFile(const std::string& fileName)
312312
sensitivityStream_ = boost::make_shared<SensitivityFileStream>(fileName);
313313
}
314314

315+
void InputParameters::setSensitivityStreamFromBuffer(const std::string& buffer) {
316+
sensitivityStream_ = boost::make_shared<SensitivityBufferStream>(buffer);
317+
}
318+
315319
void InputParameters::setAmcTradeTypes(const std::string& s) {
316320
// parse to set<string>
317321
auto v = parseListOfValues(s);

OREAnalytics/orea/app/inputparameters.hpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -152,6 +152,7 @@ class InputParameters {
152152
void setCovarianceDataFromFile(const std::string& fileName);
153153
void setCovarianceDataFromBuffer(const std::string& xml);
154154
void setSensitivityStreamFromFile(const std::string& fileName);
155+
void setSensitivityStreamFromBuffer(const std::string& buffer);
155156

156157
// Setters for exposure simulation
157158
void setSalvageCorrelationMatrix(bool b) { salvageCorrelationMatrix_ = b; }

OREAnalytics/orea/app/reportwriter.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1737,7 +1737,7 @@ void ReportWriter::writeCrifReport(const boost::shared_ptr<Report>& report, cons
17371737
if (!hasScheduleTrades) {
17381738
try {
17391739
hasScheduleTrades = parseIMModel(cr.imModel) == SimmConfiguration::IMModel::Schedule;
1740-
} catch (std::exception& e) {
1740+
} catch (std::exception&) {
17411741
}
17421742
}
17431743
}

OREAnalytics/orea/engine/sensitivityfilestream.cpp

Lines changed: 34 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -34,30 +34,14 @@ using std::vector;
3434
namespace ore {
3535
namespace analytics {
3636

37-
SensitivityFileStream::SensitivityFileStream(const string& fileName, char delim, const string& comment)
38-
: delim_(delim), comment_(comment), lineNo_(0) {
39-
40-
// Open the file
41-
file_.open(fileName);
42-
QL_REQUIRE(file_.is_open(), "error opening file " << fileName);
43-
LOG("The file " << fileName << " has been opened for streaming");
44-
}
45-
46-
SensitivityFileStream::~SensitivityFileStream() {
47-
// Close the file if still open
48-
if (file_.is_open()) {
49-
file_.close();
50-
}
51-
LOG("The file stream has been closed");
37+
void SensitivityInputStream::setStream(std::istream* stream) {
38+
stream_ = stream;
5239
}
5340

54-
SensitivityRecord SensitivityFileStream::next() {
55-
// Just in case
56-
QL_REQUIRE(file_.is_open(), "The file stream is not open.");
57-
41+
SensitivityRecord SensitivityInputStream::next() {
5842
// Get the next valid SensitivityRecord
5943
string line;
60-
while (getline(file_, line)) {
44+
while (getline(*stream_, line)) {
6145
// Update the current line number
6246
++lineNo_;
6347

@@ -80,14 +64,14 @@ SensitivityRecord SensitivityFileStream::next() {
8064
return SensitivityRecord();
8165
}
8266

83-
void SensitivityFileStream::reset() {
67+
void SensitivityInputStream::reset() {
8468
// Reset to beginning of file and line number
85-
file_.clear();
86-
file_.seekg(0, std::ios::beg);
69+
stream_->clear();
70+
stream_->seekg(0, std::ios::beg);
8771
lineNo_ = 0;
8872
}
8973

90-
SensitivityRecord SensitivityFileStream::processRecord(const vector<string>& entries) const {
74+
SensitivityRecord SensitivityInputStream::processRecord(const vector<string>& entries) const {
9175

9276
QL_REQUIRE(entries.size() == 10, "On line number " << lineNo_ << ": A sensitivity record needs 10 entries");
9377

@@ -113,5 +97,31 @@ SensitivityRecord SensitivityFileStream::processRecord(const vector<string>& ent
11397
return sr;
11498
}
11599

100+
SensitivityFileStream::SensitivityFileStream(const string& fileName, char delim, const string& comment)
101+
: SensitivityInputStream(delim, comment) {
102+
103+
// set file name
104+
file_ = new std::ifstream(fileName);
105+
QL_REQUIRE(file_->is_open(), "error opening file " << fileName);
106+
LOG("The file " << fileName << " has been opened for streaming");
107+
108+
// pass stream to function set stream
109+
setStream(file_);
110+
}
111+
112+
SensitivityFileStream::~SensitivityFileStream() {
113+
// Close the file if still open
114+
if (file_->is_open()) {
115+
file_->close();
116+
}
117+
LOG("The file stream has been closed");
118+
}
119+
120+
SensitivityBufferStream::SensitivityBufferStream(const std::string& buffer, char delim, const std::string& comment)
121+
: SensitivityInputStream(delim, comment) {
122+
std::stringstream* stream = new std::stringstream(buffer);
123+
setStream(stream);
124+
}
125+
116126
} // namespace analytics
117127
} // namespace ore

OREAnalytics/orea/engine/sensitivityfilestream.hpp

Lines changed: 27 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -31,20 +31,23 @@ namespace ore {
3131
namespace analytics {
3232

3333
//! Class for streaming SensitivityRecords from csv file
34-
class SensitivityFileStream : public SensitivityStream {
34+
class SensitivityInputStream : public SensitivityStream {
3535
public:
36-
//! Constructor providing path to csv file \p fileName
37-
SensitivityFileStream(const std::string& fileName, char delim = ',', const std::string& comment = "#");
38-
//! Destructor
39-
~SensitivityFileStream() override;
36+
//! Constructor
37+
SensitivityInputStream(char delim = ',', const std::string& comment = "#")
38+
: delim_(delim), comment_(comment), lineNo_(0) {}
39+
virtual ~SensitivityInputStream() {} // Declare virtual destructor
40+
41+
/*! Set stream for function */
42+
void setStream(std::istream* stream);
4043
//! Returns the next SensitivityRecord in the stream
4144
SensitivityRecord next() override;
4245
//! Resets the stream so that SensitivityRecord objects can be streamed again
4346
void reset() override;
4447

4548
private:
46-
//! Handle on the csv file
47-
std::ifstream file_;
49+
//! Handle on the stram
50+
std::istream* stream_;
4851
//! Csv file delimiter
4952
char delim_;
5053
//! Csv file comment string
@@ -56,5 +59,22 @@ class SensitivityFileStream : public SensitivityStream {
5659
SensitivityRecord processRecord(const std::vector<std::string>& entries) const;
5760
};
5861

62+
class SensitivityFileStream : public SensitivityInputStream {
63+
public:
64+
//! Constructor providing path to csv file \p fileName
65+
SensitivityFileStream(const std::string& fileName, char delim = ',', const std::string& comment = "#");
66+
67+
~SensitivityFileStream() override;
68+
69+
private:
70+
std::ifstream* file_;
71+
};
72+
73+
class SensitivityBufferStream : public SensitivityInputStream {
74+
public:
75+
//! Constructor providing path to csv file \p fileName
76+
SensitivityBufferStream(const std::string& buffer, char delim = ',', const std::string& comment = "#");
77+
};
78+
5979
} // namespace analytics
6080
} // namespace ore

0 commit comments

Comments
 (0)