libp2p / libp2p/cpp-libp2p

Avoid useless vector coping by move semantic and using referenceness qualifier

Aperta
#95 0 commenti 1 reazione 0 assegnatari Vedi su GitHub

Nessuno ha ancora preso questa issue.

Lingua principale
C++
Stelle
492
Fork
130
Metriche di merge delle PR
Nessuna PR unita negli ultimi 30g

Descrizione

For example:

const std::vector<uint8_t> &BlaBla::toBuffer() const {
  return data_;
}

If we use it to make BlaBla and get std::vector<uint8_t> from that and that all.

std::vector<uint8_t> vec = BlaBla().toBuffer(); // <= copy here

Will be better to use ref-qualifier to move data from sigle-used temp object:

const std::vector<uint8_t> &BlaBla::toBuffer() const & { // <= method for case of usual object
    return data_;
  }
std::vector<uint8_t> BlaBla::toBuffer() const && { // <= method for case of temp object
  return std::move(data_);
}
std::vector<uint8_t> &BlaBla::asBuffer() { // <= method to access internal vector
  return data_;
}
const std::vector<uint8_t> &BlaBla::asBuffer() const { // <= method to RO-access internal vector
  return data_;
}

Guida per i contributori

Nessuna guida per i contributori indicizzata per questo repository

Come iniziare

  1. Leggi tutta la issue e poi la guida ai contributi del progetto.
  2. Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
  3. Fai un fork del repository e lavora su un branch.
  4. Apri una pull request che faccia riferimento al numero della issue.

Direzione di ricerca

Inizia cercando BlaBla::toBuffer e il membro data_ nella codebase, quindi esamina come i chiamanti ottengono i buffer da oggetti temporanei e non temporanei. Usa come comportamento di riferimento gli esempi di toBuffer con ref-qualified e di asBuffer dell’issue, e verifica che l’uso temporaneo eviti una copia non necessaria, mantenendo al contempo disponibile l’accesso ordinario.

Scritto dal modello di indicizzazione a partire dal testo della issue.

Valutazione

Stack tecnologico
cpp
Ambito
backend-api-design
Tipo di issue
Refactoring
Difficoltà
5/5
Tempo stimato
Più di una settimana
Stato di attività
Ferma
Chiarezza
Abbastanza chiara
Idoneità per principianti
25/100

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.