20#ifndef _SOURCE_TF_PARSE_H_
21#define _SOURCE_TF_PARSE_H_
23#include <types/tf_cast.h>
30namespace TissueForge::parse {
36 void logMessageNoKwarg();
43 void logMessageNoKwargFound(
const std::string &s);
51 bool has_kwarg(
const std::string &arg);
60 bool has_kwarg(
const std::string &arg,
const std::string &kwarg);
69 bool has_kwarg(
const std::vector<std::string> &args,
const std::string &kwarg);
79 std::string get_kwarg(
const std::string &arg);
90 std::string kwarg_findStr(
const std::vector<std::string> &args,
const std::string &kwarg);
101 std::string kwarg_strVal(
const std::string &arg,
const std::string &kwarg);
114 T kwarg_getVal(
const std::string &arg,
const std::string &kwarg) {
115 if(!has_kwarg(arg, kwarg)) {
116 logMessageNoKwargFound(kwarg);
120 return TissueForge::cast<std::string, T>(kwarg_strVal(arg, kwarg));
134 T kwarg_getVal(
const std::vector<std::string> &args,
const std::string &kwarg) {
136 if(has_kwarg(s, kwarg)) return kwarg_getVal<T>(s, kwarg);
138 logMessageNoKwargFound(kwarg);
150 std::pair<std::string, std::string> kwarg_getNameVal(
const std::string &arg);
161 std::string kwarg_valSetStr(
const std::string &kwarg,
const T &t) {
162 return kwarg +
"=" + TissueForge::cast<T, std::string>(t);
174 std::string kwargVal(
const std::string &kwarg,
const std::string &keyword);
183 std::string kwargVal(
const std::vector<std::string> &kwargs,
const std::string &keyword);
195 std::vector<T> strToVec(
const std::string &s) {
196 std::vector<T> result;
198 std::stringstream ss(s);
200 while(getline(ss, str,
',')) result.push_back(TissueForge::cast<std::string, T>(str));
213 std::string vecToStr(
const std::vector<T> &v) {
215 if(v.size() == 0)
return result;
217 result = TissueForge::cast<T, std::string>(v[0]);
218 if(v.size() == 1)
return result;
220 for(
int i = 1; i < v.size(); ++i) result +=
"," + TissueForge::cast<T, std::string>(v[i]);
234 bool has_mapKwarg(
const std::string &arg,
const std::string &kwarg);
243 bool has_mapKwarg(
const std::vector<std::string> &args,
const std::string &kwarg);
254 std::string kwarg_findMapStr(
const std::vector<std::string> &args,
const std::string &kwarg);
262 std::string mapStrip(
const std::string &arg);
271 std::string mapStrip(
const std::string &arg,
const std::string &kwarg);
279 std::vector<std::string> mapStrToStrVec(
const std::string &s);
287 std::string mapVecToStr(
const std::vector<std::string> &v);
296 std::string kwarg_strMapVal(
const std::string &arg,
const std::string &kwarg);
305 std::string kwarg_strMapVal(
const std::vector<std::string> &args,
const std::string &kwarg);
313 std::pair<std::string, std::vector<std::string>> kwarg_getNameMapVals(
const std::string &arg);