// Dones't take ownership of "candidate" int R2RegionCoverer::expandChildren( Candidate* candidate ) { GeoHash childCells[4]; candidate->cell.subdivide(childCells); int numTerminals = 0; for (int i = 0; i < 4; ++i) { Candidate* child = newCandidate(childCells[i]); if (child) { candidate->children[candidate->numChildren++] = child; if (child->isTerminal) ++numTerminals; } } return numTerminals; }
void R2RegionCoverer::getInitialCandidates() { // Add the full plane // TODO a better initialization. addCandidate(newCandidate(GeoHash())); }
void GraphicalBoardFrame::appendHandler(const QString &text, bool shiftPressed) { if (!isOnBoard(m_arrowRoot)) return; if (!hasCandidate()) return; Quackle::LetterString appendedLetterString(QuackleIO::Util::encode(text)); if (appendedLetterString.length() == 0 || Quackle::String::front(appendedLetterString) < QUACKLE_FIRST_LETTER) return; if (shiftPressed) appendedLetterString = Quackle::String::setBlankness(appendedLetterString); else appendedLetterString = Quackle::String::clearBlankness(appendedLetterString); Quackle::Move newCandidate(m_candidate); Quackle::LetterString newTiles(m_candidate.tiles() + appendedLetterString); if (!m_ignoreRack && !m_rack.contains(Quackle::String::usedTiles(newTiles))) { Quackle::LetterString blankedNewTiles(m_candidate.tiles() + Quackle::String::setBlankness(appendedLetterString)); if (m_rack.contains(Quackle::String::usedTiles(blankedNewTiles))) { newTiles = blankedNewTiles; } } newCandidate.setTiles(newTiles); Quackle::LetterString hoppedTiles; QSize currentTile(m_arrowRoot); while (true) { const QSize nextTile = currentTile + arrowVector(); bool stopHere = false; bool resetArrowAfter = false; if (!isOnBoard(nextTile)) { stopHere = true; } else { Quackle::Board::TileInformation nextTileInformation(m_board.tileInformation(nextTile.height(), nextTile.width())); if (nextTileInformation.tileType != Quackle::Board::LetterTile) stopHere = true; } if (stopHere) { newCandidate.setTiles(newCandidate.tiles() + hoppedTiles); if (resetArrowAfter) resetArrow(); else m_arrowRoot = nextTile; break; } hoppedTiles += QUACKLE_PLAYED_THRU_MARK; currentTile = nextTile; } prettifyAndSetLocalCandidate(newCandidate); }