43 paramNameToID_m.clear();
44 columnNameToID_m.clear();
51 sddsData_m = parser.
parse();
52 }
catch (
const std::exception& e) {
54 std::string(
"could not parse SDDS file: ") + e.what());
59 const std::size_t len = contents.size();
60 if (pos == std::string::npos) {
61 pos = contents.length();
64 auto skipWSAndComments = [&]() {
68 for (
auto& param : sddsData_m.sddsParameters_m) {
69 if (!param.parse(contents, pos)) {
71 "could not parse parameter value");
78 std::size_t rowStart = pos;
79 std::size_t parsedColumns = 0;
81 for (
auto& col : sddsData_m.sddsColumns_m) {
82 if (!col.parse(contents, pos)) {
89 if (parsedColumns == 0) {
94 if (parsedColumns != sddsData_m.sddsColumns_m.size()) {
96 "could not parse a complete data row");
100 paramNameToID_m.reserve(sddsData_m.sddsParameters_m.size());
101 std::size_t param_order = 0;
103 const std::string
name = normalizeKey(*param.name_m);
104 paramNameToID_m.emplace(
name, param_order);
108 columnNameToID_m.reserve(sddsData_m.sddsColumns_m.size());
109 std::size_t col_order = 0;
110 for (
const SDDS::column &col: sddsData_m.sddsColumns_m) {
111 const std::string
name = normalizeKey(*col.name_m);
112 columnNameToID_m.emplace(
name, col_order);
120 std::ifstream in(sddsFileName_m, std::ios::binary);
123 in.seekg(0, std::ios::end);
124 const std::streamsize fileSize = in.tellg();
125 in.seekg(0, std::ios::beg);
129 "could not determine size of file '" + sddsFileName_m +
"'");
132 std::string contents(
static_cast<std::size_t
>(fileSize),
'\0');
133 if (!contents.empty()) {
134 in.read(contents.data(), fileSize);
141 "could not open file '" + sddsFileName_m +
"'");
143 return std::string(
"");
163 std::size_t firstUppercase = std::string_view::npos;
164 for (std::size_t index = 0; index < value.size(); ++index) {
165 if (std::isupper(
static_cast<unsigned char>(value[index]))) {
166 firstUppercase = index;
171 if (firstUppercase == std::string_view::npos) {
172 return std::string(value);
175 std::string lower(value);
176 for (std::size_t index = firstUppercase; index < lower.size(); ++index) {
177 lower[index] =
static_cast<char>(std::tolower(
static_cast<unsigned char>(lower[index])));