Changeset 19183


Ignore:
Timestamp:
08/19/18 17:44:49 (6 years ago)
Author:
tbretz
Message:
This version compiles at ISDC, mainly replacing for-loops by loops, regex by boost::regex and smatch::position(int=0) by position() etc
File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/FACT++/src/rootifysql.cc

    r19180 r19183  
    11#include "Database.h"
    22
    3 #include <regex>
    4 
    53#include <boost/algorithm/string/join.hpp>
     4#include <boost/regex.hpp>
    65#include <boost/tokenizer.hpp>
    76#include <boost/algorithm/string.hpp>
     
    120119    vector<string> vec;
    121120
    122     string substitute(string _str, const regex &expr)
    123     {
    124         smatch match;
    125         while (regex_search(_str, match, expr, regex_constants::format_first_only))
    126         {
    127             const auto &len = match.length(0);
    128             const auto &pos = match.position(0);
    129             const auto &str = match.str(0);
     121    string substitute(string _str, const boost::regex &expr)
     122    {
     123        boost::smatch match;
     124        while (boost::regex_search(_str, match, expr, boost::regex_constants::format_first_only))
     125        {
     126            const auto &len = match.length();
     127            const auto &pos = match.position();
     128            const auto &str = match.str();
    130129
    131130            const auto it = find(vec.cbegin(), vec.cend(), str);
     
    143142    string substitute(const string &str, const string &expr)
    144143    {
    145         return substitute(str, regex(expr));
     144        return substitute(str, boost::regex(expr));
    146145    }
    147146
     
    151150    {
    152151        // search for "KEYWORD expression"
    153         regex reg("\\{[0-9]+\\}");
    154 
    155         //smatch match;
    156         smatch match;
    157         while (regex_search(str, match, reg, regex_constants::format_first_only))
    158         {
    159             const auto &len = match.length(0);
    160             const auto &pos = match.position(0);
    161             const auto &arg = match.str(0);      // Argument
     152        boost::regex reg("\\{[0-9]+\\}");
     153
     154        boost::smatch match;
     155        while (boost::regex_search(str, match, reg, boost::regex_constants::format_first_only))
     156        {
     157            const auto &len = match.length();
     158            const auto &pos = match.position();
     159            const auto &arg = match.str();      // Argument
    162160
    163161            const auto idx = atoi(arg.c_str()+1);
     
    220218
    221219        // Matche: (  _com  )?       (     (  _tok  )?   (  _exp  )      |      (  _tok  )     )
    222         regex reg("("+_com+")?"  +  "(" + "("+_tok+")?"+"("+_exp+")"  + "|" +  "("+_tok+")" + ")");
    223 
    224         smatch match;
    225         while (regex_search(str, match, reg, regex_constants::format_first_only))
     220        boost::regex reg("("+_com+")?"  +  "(" + "("+_tok+")?"+"("+_exp+")"  + "|" +  "("+_tok+")" + ")");
     221
     222        boost::smatch match;
     223        while (boost::regex_search(str, match, reg, boost::regex_constants::format_first_only))
    226224        {
    227225
     
    258256            }
    259257
    260             str = str.substr(match.position(0)+match.length(0));
     258            str = str.substr(match.position()+match.length());
    261259        }
    262260    }
     
    490488
    491489    vector<string> variables;
    492     for (const auto &var : vars)
    493         variables.emplace_back('@'+var.substr(4)+":="+Tools::Trim(conf.Get<string>(var)));
     490    for (auto var=vars.cbegin(); var!=vars.cend(); var++)
     491        variables.emplace_back('@'+var->substr(4)+":="+Tools::Trim(conf.Get<string>(*var)));
    494492
    495493    // -------------------------------------------------------------------------
     
    526524    map<string, vector<string>> envs;
    527525
    528     for (const auto &env : conf.GetWildcardOptions("env.*"))
    529         envs[env.substr(4)] = conf.Vec<string>(env);
    530 
    531     for (const auto &env : conf.GetWildcardOptions("list.*"))
    532     {
    533         const string  fname = conf.Get<string>(env);
    534         const string &ident = env.substr(5);
     526    const auto &envs1 = conf.GetWildcardOptions("env.*");
     527    for (auto env=envs1.cbegin(); env!=envs1.cend(); env++)
     528        envs[env->substr(4)] = conf.Vec<string>(*env);
     529
     530    const auto &envs2 = conf.GetWildcardOptions("list.*");
     531    for (auto env=envs2.cbegin(); env!=envs2.cend(); env++)
     532    {
     533        const string  fname = conf.Get<string>(*env);
     534        const string &ident = env->substr(5);
    535535
    536536        ifstream fin(fname);
     
    540540            return 6;
    541541        }
    542 
    543542        for (string line; getline(fin, line); )
    544543        {
     
    552551    }
    553552
    554     for (const auto &env : envs)
    555     {
    556         regex rexpr("\\$(\\{"+env.first+"\\}|"+env.first+"\\b)");
    557         query = regex_replace(query, rexpr, boost::join(env.second, ", "));
     553    for (auto env=envs.cbegin(); env!=envs.cend(); env++)
     554    {
     555        boost::regex rexpr("\\$(\\{"+env->first+"\\}|"+env->first+"\\b)");
     556        query = boost::regex_replace(query, rexpr, boost::join(env->second, ", "));
    558557    }
    559558
     
    591590    // --------------------------- Connect to database -------------------------------------------------
    592591
    593     if (query.back()!='\n')
     592    if (*query.rbegin()!='\n')
    594593        query += '\n';
    595594
     
    815814
    816815        bool found = false;
    817         for (const auto &pattern: _ignore)
    818         {
    819             if (regex_match(l[i], regex(pattern)))
     816        for (auto pattern=_ignore.cbegin(); pattern!=_ignore.cend(); pattern++)
     817        {
     818            if (boost::regex_match(l[i], boost::regex(*pattern)))
    820819            {
    821820                found = true;
Note: See TracChangeset for help on using the changeset viewer.