| 24 | |
| 25 | template <typename TUnitToTokenId> |
| 26 | static void AddPair( |
| 27 | int firstPosition, |
| 28 | const TUnitToTokenId& unitToTokenId, |
| 29 | TEraseList<TTokenId>* tokenIdsList, |
| 30 | TPositionsMap* positions, |
| 31 | TUnitQueue* minIds |
| 32 | ) { |
| 33 | if (tokenIdsList->IsLastElement(firstPosition)) { |
| 34 | return; |
| 35 | } |
| 36 | auto unit = tokenIdsList->GetPair(firstPosition); |
| 37 | auto unitId = unitToTokenId(unit); |
| 38 | if (!unitId) { |
| 39 | return; |
| 40 | } |
| 41 | minIds->push({*unitId, unit}); |
| 42 | (*positions)[*unitId].push_back(firstPosition); |
| 43 | } |
| 44 | |
| 45 | // TODO(annaveronika): more efficient apply. |
| 46 | template <typename TStringVector, typename TUnitToTokenId> |
no test coverage detected