CoPilot comment: Replace `std::smatch` with `std::svmatch` to eliminate temporary string copy in `StdRegexStrategy`
I maintainer di solito rispondono entro 1 giorno
Nessuno ha ancora preso questa issue.
Valutazione
- Difficoltà
- 2/5
- Tempo stimato
- 1-3 ore
- Idoneità per principianti
- 74/100
- Tipo di issue
- Refactoring
- Chiarezza
- Specificata chiaramente
- Stato di attività
- Tranquilla
- Stack tecnologico
- cpp
- Ambito
- performance
Direzione di ricerca
Leggere cucumber_cpp/library/cucumber_expression/StdRegexStrategy.cpp, iniziando da StdRegexStrategy::Match e dall’estrazione esistente dei gruppi di corrispondenza. Sostituire il percorso basato su una stringa temporanea con l’approccio alla corrispondenza basato sugli iteratori descritto nell’issue, quindi verificare che la corrispondenza e l’estrazione dei gruppi continuino a funzionare senza creare textStr.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Descrizione
In StdRegexStrategy::Match (cucumber_cpp/library/cucumber_expression/StdRegexStrategy.cpp), the input std::string_view text is currently copied into a local std::string textStr solely because std::regex_search with std::smatch requires lvalue string iterators. This allocation is unnecessary if we switch to std::regex_search overloads that work on arbitrary iterator ranges paired with std::match_results<std::string_view::const_iterator> (aka std::svmatch in C++20, or std::match_results<const char*>/std::cmatch).
Current code:
std::optional<std::vector<std::optional<MatchGroup>>> StdRegexStrategy::Match(std::string_view text) const
{
std::string textStr{ text }; // unnecessary copy
std::smatch match;
if (!std::regex_search(textStr, match, regex))
return std::nullopt;
// ... extract groups from match ...
}
Proposed approach:
std::optional<std::vector<std::optional<MatchGroup>>> StdRegexStrategy::Match(std::string_view text) const
{
std::cmatch match; // match_results<const char*>
if (!std::regex_search(text.data(), text.data() + text.size(), match, regex))
return std::nullopt;
// positions now refer directly into the original text buffer
// match[i].str() still returns std::string copies for value
// match.position(i) and match.length(i) work as before
}
Using std::cmatch (i.e. std::match_results<const char*>) avoids the temporary string entirely. The regex_search(const char*, const char*, cmatch&, regex) overload is well-defined and the resulting cmatch references the original text data directly — no lifetime concerns as long as the match is consumed before text goes out of scope (which it already is).
File: cucumber_cpp/library/cucumber_expression/StdRegexStrategy.cpp
- Lingua principale
- C++
- Stelle
- 22
- Fork
- 7
- Merge medio
- 1g 17h
- PR unite (30g)
- 15
Preparare l'ambiente
Avvia il container di sviluppo del progetto nel browser, con il tuo account GitHub.
- Nessun Dockerfile né file Docker Compose
- Nessun modello di pull request
- Leggi la guida per i contributori
Come iniziare
- Leggi tutta la issue e poi la guida ai contributi del progetto.
- Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
- Fai un fork del repository e lavora su un branch.
- Apri una pull request che faccia riferimento al numero della issue.
Altre issue di philips-software/amp-cucumber-cpp-runner
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 75/100
philips-software/amp-cucumber-cpp-runner#341 ·
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 4/5 3-5 giorni Idoneità per principianti 48/100
philips-software/amp-cucumber-cpp-runner#345 ·
I maintainer di solito rispondono entro 1 giorno
-
missing CMake install targetAperta
Difficoltà 3/5 1-2 giorni Idoneità per principianti 55/100
philips-software/amp-cucumber-cpp-runner#339 ·
I maintainer di solito rispondono entro 1 giorno
-
FetchContent usage requires CCR_FETCH_DEPS to resolve dependencies (not documented)Forse di nuovo libera @daantimmer l’ha presa 155 giorni fa e non c’è nessuna pull request aperta. Aperta
philips-software/amp-cucumber-cpp-runner#326 · 2 commenti · 1 assegnatario ·
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 3/5 1-2 giorni Idoneità per principianti 52/100
philips-software/amp-cucumber-cpp-runner#317 ·
I maintainer di solito rispondono entro 1 giorno
Tutte le issue di philips-software/amp-cucumber-cpp-runner
Issue simili
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 68/100
qbittorrent/qBittorrent#25121 ·
I maintainer di solito rispondono entro 2 giorni
-
SVT-AV1: Unnecessary size paddingForse già presa @pszemus l’ha presa oggi. Aperta
Difficoltà 2/5 1-3 ore Idoneità per principianti 82/100
strukturag/libheif#1945 ·
I maintainer di solito rispondono entro 1 giorno
-
v9.6.0: CMake incorrectly enforces presence of libevdevForse già presa Una pull request collegata a questa issue è aperta o già unita. Aperta
Difficoltà 2/5 1-3 ore Idoneità per principianti 67/100
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 1/5 Meno di un'ora Idoneità per principianti 65/100
mltframework/shotcut#1943 ·
I maintainer di solito rispondono entro 1 giorno
-
Rowan (2017) electron heating gives NaN for beta > beta_max; clip() then sets electrons to kel_minAperta
Difficoltà 2/5 1-3 ore Idoneità per principianti 72/100
parthenon-hpc-lab/kharma#213 · 1 commento ·
I maintainer di solito rispondono entro 3 giorni