ISIS Logo
UTILITIES
EPICS Utilities
find_calibration_range_utils.cpp
Go to the documentation of this file.
1 #include <string.h>
2 #include <stdlib.h>
3 #include <epicsString.h>
4 #include <string>
5 #include <vector>
6 
7 #include <sstream>
8 #include <fstream>
9 #include <iostream>
10 
11 #include <boost/algorithm/string.hpp>
12 
14 
18 std::vector<std::string> getNextLineAndSplitOnComma(std::ifstream& str) {
19  std::vector<std::string> parsed_line;
20  std::string line;
21  std::getline(str, line);
22 
23  std::stringstream lineStream(line);
24  std::string cell;
25 
26  while (std::getline(lineStream, cell, ',')) {
27  parsed_line.push_back(cell);
28  }
29  // This checks for a trailing comma with no data after it.
30  if (!lineStream && cell.empty()) {
31  // If there was a trailing comma then add an empty element.
32  parsed_line.push_back("");
33  }
34  return parsed_line;
35 }
36 
40 std::string str_from_epics(void* raw_rec) {
41  epicsOldString* rec = reinterpret_cast<epicsOldString*>(raw_rec);
42  char buffer[sizeof(epicsOldString) + 1]; // +1 for null terminator in the case where epics str is exactly 40 chars (unterminated)
43  buffer[sizeof(epicsOldString)] = '\0';
44  return std::string(strncpy(buffer, *rec, sizeof(epicsOldString)));
45 }
46 
50 std::string find_file(void* BDIR, void* TDIR, void* SPEC) {
51  std::string base_directory = str_from_epics(BDIR);
52  std::string table_directory = str_from_epics(TDIR);
53  std::string filename = str_from_epics(SPEC);
54 
55  boost::trim(base_directory);
56  boost::trim(table_directory);
57  boost::trim(filename);
58 
59  return base_directory + "/" + table_directory + "/" + filename;
60 }
std::string str_from_epics(void *raw_rec)
Extracts a std::string from an epics aSubRecord.
std::string find_file(void *BDIR, void *TDIR, void *SPEC)
Finds the directory to the table file.
std::vector< std::string > getNextLineAndSplitOnComma(std::ifstream &str)
Gets the next line of an input stream and splits on a comma.
Copyright © 2013 Science and Technology Facilities Council | Generated by   doxygen 1.8.5