63SCAN_Name::SCAN_Name(std::string algo_spec) : m_orig_algo_spec(algo_spec), m_alg_name(), m_args(), m_mode_info()
65 if(algo_spec.size() == 0)
68 std::vector<std::pair<size_t, std::string>>
name;
70 std::pair<size_t, std::string> accum = std::make_pair(level,
"");
72 const std::string decoding_error =
"Bad SCAN name '" + algo_spec +
"': ";
74 for(
size_t i = 0; i != algo_spec.size(); ++i)
76 char c = algo_spec[i];
78 if(c ==
'/' || c ==
',' || c ==
'(' || c ==
')')
89 if(c ==
'/' && level > 0)
90 accum.second.push_back(c);
93 if(accum.second !=
"")
94 name.push_back(accum);
95 accum = std::make_pair(level,
"");
99 accum.second.push_back(c);
102 if(accum.second !=
"")
103 name.push_back(accum);
111 m_alg_name =
name[0].second;
113 bool in_modes =
false;
115 for(
size_t i = 1; i !=
name.size(); ++i)
117 if(
name[i].first == 0)
119 m_mode_info.push_back(make_arg(
name, i));
122 else if(
name[i].first == 1 && !in_modes)
123 m_args.push_back(make_arg(
name, i));