2015-09-12 11 views
7

Sto implementando un'estensione Python C e voglio che i miei oggetti personalizzati supportino lo buffer protocol. Il protocollo buffer consente essenzialmente agli oggetti contenitore di esporre i puntatori grezzi alla loro memoria in modo controllato e ben definito. Il consumatore passa un numero di flag che indica il tipo di memoria con cui è preparato e l'esportatore restituisce una struttura che descrive la memoria.Che cosa significa "la scelta deve essere coerente per tutti i consumatori"?

Sono particolarmente interessato nella bandiera PyBUF_WRITABLE:

PyBUF_WRITABLE

Controlli il campo di sola lettura. Se impostato, l'esportatore DEVE fornire un buffer scrivibile o segnalare un errore. In caso contrario, l'esportatore può fornire un buffer di sola lettura o scrivibile, ma la scelta DEVE essere coerente per tutti i consumatori.

I miei oggetti sono observable, ma tale procedura sia naturalmente con distribuendo i puntatori scrivibili in memoria prima, quindi se ho qualche osservatori attivi, posso solo distribuire i buffer di sola lettura, e se ho qualche buffer scrivibili attivi , Non posso registrare nessun osservatore.

Vorrei distribuire i buffer di sola lettura per impostazione predefinita e fornire buffer scrivibili solo quando richiesto, ma non sono sicuro che sia legale. Vedo due possibili interpretazioni di questa frase:

  1. tutti i consumatori non passando la bandiera dovrebbe ricevere la stessa cosa. È legale fornire a questi consumatori buffer di sola lettura e offrire ai consumatori che superano i buffer scrivibili.
  2. Tutti i consumatori devono ricevere la stessa cosa indipendentemente dal fatto che superino la bandiera. Se è possibile restituire un buffer scrivibile, in ogni caso deve essere restituito un buffer scrivibile. L'unico scopo del flag è di generare un errore se non è possibile fornire un buffer scrivibile.

Quale interpretazione è corretta?

+0

Se l'interpretazione 2 è corretta, forse ha qualcosa a che fare con il rilevamento automatico dell'immutabilità dell'oggetto. –

risposta

1

La parte importante è:

Altrimenti, l'esportatore possono prevedere una sola lettura o scrivibili tampone, ma la scelta deve essere coerente

La scelta .. questa scelta è, perché il primo caso non è una scelta ... deve essere coerente per ogni consumatore, non per quello.

Se il campo è impostato, è necessario fornire un buffer scrivibile. Non c'è scelta, perché l'incapacità tecnica di farlo per qualsiasi motivo non è una scelta. Se non è impostato, può essere ancora scrivibile, ma deve essere scrivibile per tutti coloro che non hanno il flag impostato.

Problemi correlati