@@ -34,30 +34,14 @@ using std::vector;
3434namespace ore {
3535namespace 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
0 commit comments