Ignore:
Timestamp:
03/29/18 22:52:36 (7 years ago)
Author:
Maciej Komosinski
Message:

More strict parsing of the repetition counter; bug fixes; improved docs [refs #62]

File:
1 edited

Legend:

Unmodified
Added
Removed
  • cpp/frams/genetics/f4/f4_general.cpp

    r760 r767  
    466466                                float w = gcur->f1;
    467467                                f4_Cell *tneu = NULL;
    468                                 if (t > 0) // sensors
     468                                if (t < 0) // wrong sensor
     469                                {
     470                                        string buf = "wrong sensor in link '";
     471                                        buf.append(gcur->s1);
     472                                        buf.append("'");
     473                                        logMessage("f4_Cell", "onestep", LOG_ERROR, buf.c_str());
     474                                        org->setRepairRemove(gcur->pos, gcur);
     475                                        return 1;
     476                                }
     477                                else if (t > 0) // sensors
    469478                                {
    470479                                        char *temp = (char*)gcur->s1.c_str();
     
    476485                                                buf.append(gcur->s1);
    477486                                                buf.append("'");
    478                                                 logMessage("f4_Cell", "onestep", LOG_WARN, buf.c_str()); //TODO ask
     487                                                logMessage("f4_Cell", "onestep", LOG_ERROR, buf.c_str());
    479488                                                org->setRepairRemove(gcur->pos, gcur);
    480489                                                return 1;
     
    12271236void f4_node::sprint(SString& out)
    12281237{
    1229         string buf2 = "";
     1238        char buf2[20];
    12301239        // special case: repetition code
    12311240        if (name == "#")
     
    12341243                if (i1 != 1)
    12351244                {
    1236                         sprintf((char*)buf2.c_str(), "%d", i1);
    1237                         out += buf2.c_str();
     1245                        sprintf(buf2, "%d", i1);
     1246                        out += buf2;
    12381247                }
    12391248        }
     
    12501259                        else
    12511260                        {
    1252                                 sprintf((char*)buf2.c_str(), "%ld", l1);
    1253                                 out += buf2.c_str();
    1254                         }
    1255                         sprintf((char*)buf2.c_str(), ":%g]", f1);
    1256                         out += buf2.c_str();
     1261                                sprintf(buf2, "%ld", l1);
     1262                                out += buf2;
     1263                        }
     1264                        sprintf(buf2, ":%g]", f1);
     1265                        out += buf2;
    12571266                }
    12581267                else if (name == ":")
    12591268                {
    1260                         sprintf((char*)buf2.c_str(), ":%c%c:", l1 ? '+' : '-', (char)i1);
    1261                         out += buf2.c_str();
     1269                        sprintf(buf2, ":%c%c:", l1 ? '+' : '-', (char)i1);
     1270                        out += buf2;
    12621271                }
    12631272                else if (name == "@" || name == "|")
     
    12651274                        if (parent->name == "N")
    12661275                        {
    1267                                 buf2 = name;
    1268                                 out += buf2.c_str();
     1276                                out += name.c_str();
    12691277                        }
    12701278                        else
    12711279                        {
    12721280                                out += "N:";
    1273                                 buf2 = name;
    1274                                 out += buf2.c_str();
     1281                                out += name.c_str();
    12751282                        }
    12761283                }
     
    12831290                                out += "N:";
    12841291                        }
    1285                         buf2 = name;
    1286                         out += buf2.c_str();
     1292                        out += name.c_str();
    12871293                }
    12881294        }
     
    14021408                {
    14031409                        // repetition marker, 1 by default
    1404                         if (sscanf(genot + gpos, "#%d", &i) != 1) i = 1;
     1410                        ExtValue val;
     1411                        const char * end = val.parseNumber(genot + gpos + 1, ExtPType::TInt);
     1412                        if (end == NULL) i = 1;
     1413                        else i = val.getInt();
    14051414                        // find out genotype start for continuation
    14061415                        j = scanrec(genot + gpos + 1, strlen(genot + gpos + 1), '>');
    14071416                        // skip number
    14081417                        oldpos = gpos;
    1409                         gpos++;
    1410                         while ((genot[gpos] >= '0') && (genot[gpos] <= '9')) gpos++;
     1418                        gpos += end - (genot + gpos);
     1419                        //gpos++;
     1420                        //while ((genot[gpos] >= '0') && (genot[gpos] <= '9')) gpos++;node1 = new f4_node("#", par, oldpos);
    14111421                        node1 = new f4_node("#", par, oldpos);
    14121422                        node1->i1 = i;
     
    15271537                                end = parseConnectionWithNeuron(genot + gpos, neutype, w);
    15281538                                if (end == NULL) t = -1;
    1529                                 t = 1;
     1539                                else t = 1;
    15301540                        }
    15311541                        else
Note: See TracChangeset for help on using the changeset viewer.