Ignore:
Timestamp:
04/09/15 23:51:28 (10 years ago)
Author:
Maciej Komosinski
Message:
  • explicit c_str() in SString instead of (const char*) cast
  • genetic converters and GenMan? are now thread-local which enables multi-threaded simulator separation
File:
1 edited

Legend:

Unmodified
Added
Removed
  • cpp/frams/genetics/genman.cpp

    r344 r348  
    199199{
    200200        SString ggs=g.getGene();
    201         const char *gg = ggs;
     201        const char *gg = ggs.c_str();
    202202        GenoOperators *gf = getOper_f(g.getFormat());
    203203        int check1;
     
    237237        if (gf == NULL)
    238238                return Geno(SString::empty(), -1, SString::empty(), SString::sprintf("GENOPER_NOOPER: Validate(): don't know how to handle genetic format %c", format));
    239         char *g2 = strdup(geny.getGene()); //copy for validation
     239        char *g2 = strdup(geny.getGene().c_str()); //copy for validation
    240240        int res = gf->validate(g2);
    241241        SString sg2 = g2;
     
    263263        while (!ok)
    264264        {
    265                 char *gn = strdup(gv.getGene()); //copy for mutation
     265                char *gn = strdup(gv.getGene().c_str()); //copy for mutation
    266266                chg = 0;
    267267                if (gf->mutate(gn, chg, method) == GENOPER_OK)
     
    284284                if (!ok && (count - pcount > 100))
    285285                {
    286                         FMprintf("GenMan", "Mutate", 2, "Tried 100x and failed: %s", (const char*)g.getGene());
     286                        FMprintf("GenMan", "Mutate", 2, "Tried 100x and failed: %s", g.getGene().c_str());
    287287                        return Geno("", -1, "", "GENOPER_OPFAIL: Mutate() tried 100x and failed");
    288288                }
    289289        }
    290290        mutchg += chg;
    291         if (history) saveLink((const char*)g.getGene(), "", (const char*)gv.getGene(), chg);
     291        if (history) saveLink(g.getGene().c_str(), "", gv.getGene().c_str(), chg);
    292292        SString mutinfo;
    293         if (extmutinfo == 0) mutinfo = SString::sprintf("%.2f%% mutation of '%s'", 100 * chg, (const char*)g.getName()); else
    294                 if (extmutinfo == 1) mutinfo = SString::sprintf("%.2f%% mutation(%d) of '%s'", 100 * chg, method, (const char*)g.getName()); else
    295                         mutinfo = SString::sprintf("%.2f%% mutation(%s) of '%s'", 100 * chg, gf->mutation_method_names ? gf->mutation_method_names[method] : "unspecified method name", (const char*)g.getName());
     293        if (extmutinfo == 0) mutinfo = SString::sprintf("%.2f%% mutation of '%s'", 100 * chg, g.getName().c_str()); else
     294                if (extmutinfo == 1) mutinfo = SString::sprintf("%.2f%% mutation(%d) of '%s'", 100 * chg, method, g.getName().c_str()); else
     295                        mutinfo = SString::sprintf("%.2f%% mutation(%s) of '%s'", 100 * chg, gf->mutation_method_names ? gf->mutation_method_names[method] : "unspecified method name", g.getName().c_str());
    296296        gv.setComment(mutinfo);
    297297        return gv;
     
    324324        {
    325325                float chg1, chg2;
    326                 char *g1n = strdup(g1.getGene()); //copy for crossover
    327                 char *g2n = strdup(g2.getGene()); //copy for crossover
     326                char *g1n = strdup(g1.getGene().c_str()); //copy for crossover
     327                char *g2n = strdup(g2.getGene().c_str()); //copy for crossover
    328328                chg1 = chg2 = 0;
    329329                if (gf->crossOver(g1n, g2n, chg1, chg2) == GENOPER_OK)
     
    351351                if (!ok && (count - pcount > 100))
    352352                {
    353                         FMprintf("GenMan", "CrossOver", 2, "Tried 100x and failed: %s and %s", (const char*)g1.getGene(), (const char*)g2.getGene());
     353                        FMprintf("GenMan", "CrossOver", 2, "Tried 100x and failed: %s and %s", g1.getGene().c_str(), g2.getGene().c_str());
    354354                        return Geno("", -1, "", "GENOPER_OPFAIL: CrossOver() tried 100x and failed");
    355355                }
     
    357357        // result in g1v
    358358        xochg += chg;
    359         if (history) saveLink((const char*)g1.getGene(), (const char*)g2.getGene(), (const char*)g1v.getGene(), chg);
     359        if (history) saveLink(g1.getGene().c_str(), g2.getGene().c_str(), g1v.getGene().c_str(), chg);
    360360        SString xoinfo = SString::sprintf("Crossing over of '%s' (%.2f%%) and '%s' (%.2f%%)",
    361                 (const char*)g1.getName(), 100 * chg, (const char*)g2.getName(), 100 * (1 - chg));
     361                g1.getName().c_str(), 100 * chg, g2.getName().c_str(), 100 * (1 - chg));
    362362        g1v.setComment(xoinfo);
    363363        return g1v;
     
    369369        if (format != g2.getFormat()) return GENOPER_NOOPER;
    370370        GenoOperators *gf = getOper_f(format);
    371         if (!gf) return GENOPER_NOOPER; else return gf->similarity(g1.getGene(), g2.getGene());
     371        if (!gf) return GENOPER_NOOPER; else return gf->similarity(g1.getGene().c_str(), g2.getGene().c_str());
    372372}
    373373
     
    378378        GenoOperators *gf = getOper_f(G.getFormat());
    379379        if (!gf) return GENSTYLE_CS(0, 0); //black & valid
    380         else return gf->style(G.getGene(), pos);
     380        else return gf->style(G.getGene().c_str(), pos);
    381381}
    382382
     
    391391                if (posmapped == -1) styletab[pos] = GENSTYLE_COMMENT;
    392392                else if (!gf) styletab[pos] = GENSTYLE_CS(0, 0); //black & valid
    393                 else styletab[pos] = gf->style(geny, posmapped);
     393                else styletab[pos] = gf->style(geny.c_str(), posmapped);
    394394        }
    395395}
     
    448448void GenMan::p_htmlize(ExtValue *args, ExtValue *ret)
    449449{
    450         ret->setString(HTMLize(args->getString()));
     450        ret->setString(HTMLize(args->getString().c_str()));
    451451}
    452452
    453453void GenMan::p_htmlizeshort(ExtValue *args, ExtValue *ret)
    454454{
    455         ret->setString(HTMLizeShort(args->getString()));
     455        ret->setString(HTMLizeShort(args->getString().c_str()));
    456456}
    457457
Note: See TracChangeset for help on using the changeset viewer.