Changeset 224

Show
Ignore:
Timestamp:
02/24/07 14:25:05 (1 year ago)
Author:
ug
Message:

Allow pre-assigning of labels in search pattern.

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • 06/libkombilo/cpptest.cpp

    r223 r224  
    5656  // ------------------- set up search pattern ---------------------------------------- 
    5757 
    58   Pattern p(CENTER_PATTERN, 13, 2, 2, ".XXO"); 
     58  Pattern p(CENTER_PATTERN, 19, 2, 2, ".XXO", "D..F"); 
    5959 
    6060  // Pattern p(2,2,4,4, 19, 3, 3, ".X.XXXXOX", vector<MoveNC>()); // "fixed anchor" 
     
    9292  // for(vector<string>::iterator it = res.begin(); it != res.end(); it++) 
    9393  //   printf("%s\n", it->c_str()); 
    94   for(int i=0; i<gl.size(); i++) printf("%s\n", gl.currentEntryAsString(i).c_str()); 
     94  // for(int i=0; i<gl.size(); i++) printf("%s\n", gl.currentEntryAsString(i).c_str()); 
    9595 
    9696  // ------------------- print some statistics ------------------------------------------ 
  • 06/libkombilo/search.cpp

    r223 r224  
    182182  sizeY = 0; 
    183183  boardsize = 0; 
    184 
    185  
    186  
    187 Pattern::Pattern(int type, int BOARDSIZE, int sX, int sY, char* iPos) { 
     184  contLabels = 0; 
     185
     186 
     187 
     188Pattern::Pattern(int type, int BOARDSIZE, int sX, int sY, char* iPos, char* CONTLABELS) { 
    188189  flip = 0; 
    189190  colorSwitch = 0; 
     
    191192  sizeY = sY; 
    192193  boardsize = BOARDSIZE; 
     194  if (CONTLABELS) { 
     195    contLabels = new char[sizeX * sizeY]; 
     196    for(int i=0; i<sizeX*sizeY; i++) contLabels[i] = CONTLABELS[i]; 
     197  } else contLabels = 0; 
    193198 
    194199  if (type == CORNER_NW_PATTERN || type == FULLBOARD_PATTERN) { 
     
    234239 
    235240Pattern::Pattern(int type, int BOARDSIZE, int sX, int sY, 
    236                  char* iPos, vector<MoveNC> CONTLIST) { 
     241                 char* iPos, vector<MoveNC> CONTLIST, char* CONTLABELS) { 
    237242  flip = 0; 
    238243  colorSwitch = 0; 
     
    240245  sizeY = sY; 
    241246  boardsize = BOARDSIZE; 
     247  if (CONTLABELS) { 
     248    contLabels = new char[sizeX * sizeY]; 
     249    for(int i=0; i<sizeX*sizeY; i++) contLabels[i] = CONTLABELS[i]; 
     250  } else contLabels = 0; 
    242251 
    243252  if (type == CORNER_NW_PATTERN || type == FULLBOARD_PATTERN) { 
     
    285294 
    286295Pattern::Pattern(int le, int ri, int to, int bo, int BOARDSIZE, int sX, int sY, 
    287                  char* iPos, const vector<MoveNC>& CONTLIST) throw(PatternError) { 
     296                 char* iPos, const vector<MoveNC>& CONTLIST, char* CONTLABELS) throw(PatternError) { 
    288297  // check whether anchor rectangle is valid 
    289298  if (le < 0 || ri+sX > BOARDSIZE || to < 0 || bo+sY > BOARDSIZE || ri < le || bo < to) throw PatternError(); 
     
    300309  sizeX = sX; 
    301310  sizeY = sY; 
     311  if (CONTLABELS) { 
     312    contLabels = new char[sizeX * sizeY]; 
     313    for(int i=0; i<sizeX*sizeY; i++) contLabels[i] = CONTLABELS[i]; 
     314  } else contLabels = 0; 
    302315 
    303316  initialPos = new char[sizeX * sizeY]; 
     
    314327  if (initialPos) delete [] initialPos; 
    315328  if (finalPos) delete [] finalPos; 
     329  if (contLabels) delete [] contLabels; 
    316330} 
    317331 
     
    329343  initialPos = new char[sizeX*sizeY]; 
    330344  finalPos = new char[sizeX*sizeY]; 
     345  if (p.contLabels) contLabels = new char[sizeX*sizeY]; 
     346  else contLabels = 0; 
    331347  for(int i=0; i<sizeX*sizeY; i++) { 
    332348    initialPos[i] = p.initialPos[i]; 
    333349    finalPos[i] = p.finalPos[i]; 
     350    if (p.contLabels) contLabels[i] = p.contLabels[i]; 
    334351  } 
    335352  contList = p.contList; 
     
    350367    if (initialPos) delete [] initialPos; 
    351368    if (finalPos) delete [] finalPos; 
     369    if (contLabels) delete [] contLabels; 
    352370     
    353371    initialPos = new char[sizeX*sizeY]; 
    354372    finalPos = new char[sizeX*sizeY]; 
     373    if (p.contLabels) contLabels = new char[sizeX*sizeY]; 
     374    else contLabels = 0; 
    355375    for(int i=0; i<sizeX*sizeY; i++) { 
    356376      initialPos[i] = p.initialPos[i]; 
    357377      finalPos[i] = p.finalPos[i]; 
     378      if (p.contLabels) contLabels[i] = p.contLabels[i]; 
    358379    } 
    359380    contList = p.contList; 
     
    380401    initialPos = new char[sizeX*sizeY]; 
    381402    finalPos = new char[sizeX*sizeY]; 
     403    if (p.contLabels) contLabels = new char[sizeX*sizeY]; 
     404    else contLabels = 0; 
    382405    for(int i=0; i<sizeX*sizeY; i++) { 
    383406      initialPos[i] = p.initialPos[i]; 
    384407      finalPos[i] = p.finalPos[i]; 
     408      if (p.contLabels) contLabels[i] = p.contLabels[i]; 
    385409    } 
    386410    contList = p.contList; 
     
    753777  unsigned int labelIndex = 0; 
    754778 
    755   // FIXME assign labels which are already in the SGF file 
     779  // assign labels which are in the contLabels array passed to the original pattern 
     780  // (these will usually be labels "already present in the SGF file") 
    756781   
     782  if (pattern.contLabels) { 
     783    for(int i=0; i<pattern.sizeX*pattern.sizeY; i++) { 
     784      if (pattern.contLabels[i] != '.') { 
     785        labels[i] = pattern.contLabels[i]; 
     786        unsigned int j = labelList.find(pattern.contLabels[i]); 
     787        if (j != string::npos) labelList.erase(j,1); 
     788      } 
     789    } 
     790  } 
     791 
    757792  // now give labels to the remaining points, starting with the one with 
    758793  // most hits 
  • 06/libkombilo/search.h

    r223 r224  
    9797    char* initialPos; 
    9898    char* finalPos; 
     99    char* contLabels; 
    99100    std::vector<MoveNC> contList; 
    100101 
     102    // Pattern constructors 
     103    // 
     104    // Note: the char*'s iPos and CONTLABELS will be free'ed by the Pattern class. 
     105 
    101106    Pattern(); 
    102     Pattern(int le, int ri, int to, int bo, int BOARDSIZE, int sX, int sY, char* iPos, const std::vector<MoveNC>& CONTLIST) throw(PatternError); 
    103     Pattern(int type, int BOARDSIZE, int sX, int sY, char* iPos, std::vector<MoveNC> CONTLIST); 
    104     Pattern(int type, int BOARDSIZE, int sX, int sY, char* iPos); 
     107    Pattern(int le, int ri, int to, int bo, int BOARDSIZE, int sX, int sY, char* iPos, const std::vector<MoveNC>& CONTLIST, char* CONTLABELS = 0) throw(PatternError); 
     108    Pattern(int type, int BOARDSIZE, int sX, int sY, char* iPos, std::vector<MoveNC> CONTLIST, char* CONTLABELS = 0); 
     109    Pattern(int type, int BOARDSIZE, int sX, int sY, char* iPos, char* CONTLABELS = 0); 
    105110    Pattern(const Pattern& p); 
    106111    ~Pattern();