Ho visto riferimenti a 'zone' nello MsgPack C headers, ma non riesco a trovare alcuna documentazione su cosa sia o per cosa sia. Che cos'è? Inoltre, dov'è la documentazione funzione per funzione per l'API C?Che cos'è una 'zona' MsgPack
risposta
msgpack_zone
è una struttura interna utilizzata per il ciclo di vita della gestione della memoria & al momento del disimballaggio. Direi che non dovrai mai interagire con esso se utilizzi l'interfaccia standard di alto livello per unpacking o la versione alternativa .
A mia conoscenza, non esiste una documentazione dettagliata: si consiglia invece di fare riferimento alla suite di test che fornisce esempi di codice convenienti per ottenere le attività comuni, ad es. vedi pack_unpack_c.cc
e streaming_c.cc
.
Da quello che potrei raccogliere, è un tipo di solo spostamento che memorizza i dati effettivi di un msgpack::object
. Potrebbe benissimo essere inteso come un dettaglio di implementazione, ma a volte si diffonde nel codice degli utenti. Ad esempio, ogni volta che si desidera acquisire uno msgpack::object
in una lambda, è necessario acquisire anche l'oggetto msgpack::zone
. A volte non è possibile utilizzare lo spostamento dell'acquisizione (ad esempio, in alcuni casi i gestori di asio assumono solo gestori copiabili, oppure il compilatore non supporta la funzione). Per ovviare a questo, è possibile:
msgpack::unpacked r;
while (pac_.next(&r)) {
auto msg = result.get();
io_->post([this, msg, z = std::shared_ptr<msgpack::zone>(r.zone().release())]() {
// msg is valid here
}));
}
vi suggerisco di leggere la sua [propria documentazione] (https://github.com/msgpack/msgpack/blob/master/README.md) al primo posto ... –
Mi stai indicando su msgpack.org? In tal caso, non sono stato in grado di trovare nessuna descrizione utile delle zone. Google trova alcuni riferimenti, ma nulla di molto utile: https://www.google.com/search?q=zone+site%3Amsgpack.org&aq=f&sugexp=chrome,mod=10&sourceid=chrome&ie=UTF-8 – brooks94
no. Visita il link, questo è il readme del progetto GitHub. –