8 #include <botan/scan_name.h>     9 #include <botan/parsing.h>    10 #include <botan/libstate.h>    11 #include <botan/exceptn.h>    19    const std::vector<std::pair<size_t, std::string> >& name, 
size_t start)
    21    std::string output = name[start].second;
    22    size_t level = name[start].first;
    24    size_t paren_depth = 0;
    26    for(
size_t i = start + 1; i != name.size(); ++i)
    28       if(name[i].first <= name[start].first)
    31       if(name[i].first > level)
    33          output += 
'(' + name[i].second;
    36       else if(name[i].first < level)
    38          output += 
")," + name[i].second;
    43          if(output[output.size() - 1] != 
'(')
    45          output += name[i].second;
    48       level = name[i].first;
    51    for(
size_t i = 0; i != paren_depth; ++i)
    57 std::pair<size_t, std::string>
    58 deref_aliases(
const std::pair<size_t, std::string>& in)
    60    return std::make_pair(in.first,
    68    orig_algo_spec = algo_spec;
    70    std::vector<std::pair<size_t, std::string> > name;
    72    std::pair<size_t, std::string> accum = std::make_pair(level, 
"");
    74    std::string decoding_error = 
"Bad SCAN name '" + algo_spec + 
"': ";
    78    for(
size_t i = 0; i != algo_spec.size(); ++i)
    80       char c = algo_spec[i];
    82       if(c == 
'/' || c == 
',' || c == 
'(' || c == 
')')
    93          if(c == 
'/' && level > 0)
    94             accum.second.push_back(c);
    97             if(accum.second != 
"")
    98                name.push_back(deref_aliases(accum));
    99             accum = std::make_pair(level, 
"");
   103          accum.second.push_back(c);
   106    if(accum.second != 
"")
   107       name.push_back(deref_aliases(accum));
   115    alg_name = name[0].second;
   117    bool in_modes = 
false;
   119    for(
size_t i = 1; i != name.size(); ++i)
   121       if(name[i].first == 0)
   123          mode_info.push_back(make_arg(name, i));
   126       else if(name[i].first == 1 && !in_modes)
   127          args.push_back(make_arg(name, i));
   156       throw std::range_error(
"SCAN_Name::argument - i out of range");
 std::string algo_name_and_args() const
size_t arg_as_integer(size_t i, size_t def_value) const
Library_State & global_state()
std::string arg(size_t i) const
SCAN_Name(std::string algo_spec)
std::string deref_alias(const std::string &alias) const
u32bit to_u32bit(const std::string &number)
std::string algo_name() const