X-Git-Url: https://sigrok.org/gitweb/?p=pulseview.git;a=blobdiff_plain;f=pv%2Fsession.cpp;h=516e1acd5ad6ff1e6b52a277f97c042e28e37872;hp=aa528d191fe6750958bd2cbf8491fe8bb35383d0;hb=724f29f311db4f8b47169e58f3f3b50e6a50ed08;hpb=34f4a40baa0b4485ebee71d51c0a3bf70a0bad8b diff --git a/pv/session.cpp b/pv/session.cpp index aa528d19..516e1acd 100644 --- a/pv/session.cpp +++ b/pv/session.cpp @@ -434,26 +434,76 @@ void Session::set_default_device() set_device((iter == devices.end()) ? devices.front() : *iter); } +/** + * Convert generic options to data types that are specific to InputFormat. + * + * @param[in] user_spec vector of tokenized words, string format + * @param[in] fmt_opts input format's options, result of InputFormat::options() + * + * @return map of options suitable for InputFormat::create_input() + */ +map +Session::input_format_options(vector user_spec, + map> fmt_opts) +{ + map result; + + for (auto entry : user_spec) { + /* + * Split key=value specs. Accept entries without separator + * (for simplified boolean specifications). + */ + string key, val; + size_t pos = entry.find("="); + if (pos == std::string::npos) { + key = entry; + val = ""; + } else { + key = entry.substr(0, pos); + val = entry.substr(pos + 1); + } + + /* + * Skip user specifications that are not a member of the + * format's set of supported options. Have the text input + * spec converted to the required input format specific + * data type. + */ + auto found = fmt_opts.find(key); + if (found == fmt_opts.end()) + continue; + shared_ptr