Domanda

Ho un intero bandiera-holding che ha un insieme esistente di possibili bandiere:

#define MAIL_ADDR_FROM  0x0001  /* address field contains the from address */
#define MAIL_ADDR_TO    0x0002  /* address field contains the to address */
#define MAIL_SEEN       0x0004  /* message has been read by the user */
#define MAIL_ATTACH     0x0008  /* message has an attachment */
#define MAIL_IMP_HIGH   0x0010  /* message is of high importance */
#define MAIL_IMP_LOW    0x0020  /* message is of low importance */
#define MAIL_FLAGGED    0x0040  /* message has been flagged */
#define MAIL_REPLIED    0x0080  /* message has been replied to */
#define MAIL_DRAFT      0x0100  /* message is a draft */
#define MAIL_NEW        0x0200  /* message is new */
#define MAIL_DELETED    0x8000  /* message is deleted */

Ho bisogno di aggiungere uno nuovo:

#define MAIL_SPAM       0x????  /* message is spam */ 

C'è un motivo per i cassonetti della lista bandiera esistenti dal 0x0200 fino a 0x8000? La mia comprensione è che i valori utilizzabili per la mia nuova bandiera sarebbero 0x0400, 0x0800 e 0x1000-0x4000. Sto malinteso qualcosa su come questi bitset lavoro?

È stato utile?

Soluzione

Sì, siete sulla strada giusta -. Questi valori di bandiera mancanti sono in teoria utilizzabile, a meno che siano riservati per qualcos'altro

avresti bisogno di verificare con l'autore originale se non c'è alcun motivo specifico per cui sono stati ignorati e andato dritto a 0x8000.

Non c'è certamente intrinseca il comportamento in campi di bit che impedirebbe l'uso.

Altri suggerimenti

In poche parole, la vostra comprensione va bene.

Possiamo solo immaginare il motivo per cui è MAIL_DELETED 0x8000 e non, per esempio, 0x0400; La mia ipotesi è che il bit più alto è stato scelto a causa della natura drammatica della "cancellato" bandiera.

La parte più difficile di introdurre un nuovo bit nella maschera di bit di qualcun altro è che è necessario fare in modo che i bit che appaiono non utilizzati sono in realtà non utilizzati e che sono sempre inizializzati in modo coerente.

Tutto dipende da chi lo ha scritto su ciò che significa dalle loro posizioni di bit scelti. Tuttavia, da quello che posso vedere sembra che raggruppati i flag di bit logicamente in byte.

Per la vostra, si potrebbe fare un caso per:

#define MAIL_SPAM        0x0400 /* message is spam */

Poiché sembra come uno stato simile a Nuovo o Draft, ma non eliminato.

Non ho dimestichezza con l'applicazione, ma in teoria, i valori e le 0x400,0x800,0x1000,0x2000 0x4000 non sono definiti e si adattano perfettamente alle vostre altre definisce, in modo da poter aggiungere nuovi definire con quei valori.

suona come scarsa documentazione per me. Avrei messo MAIL_FLAG_UNUSED negli ultimi slot bit in modo che era ovvio che fossero disponibili. Controllare per assicurarsi che MAIL_NEW non utilizza i bit più alti per una sorta di valore intrinseco, ma in superficie, che non sembrano avere un mucchio di bit disponibili da 0x0400 tramite 0x4000.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top