On Mon, 22 Jun 1998, George wrote: > Try bitfields, if you want something new. (unsigned this_is_a_bit : 1) I don't think bitfields (in this case) are a good idea. Using just an array of unsigned chars and macros to set bits within them is better. Using a bitfield you have to, for each type of bitfield you have, write a function to convert that field into a string, and back again. Using just an array, you have a simple table like: const char* affect_table[] = { "blind", "invis", "somethignelse" }; which can even be generated automatically based on macros - and you can at the same time define an enum that contains values like AFF_BLIND etc. I have for example, a h/affected.h file that contains lines like: BIT(AFF,BLIND) BIT(AFF,INVIS) and that is all that is necessary to create an AFF_BLIND with value of 0, and an entry in the above table. And after you have such a table, you can convert the array of chars to a string and back in any way you want. For example, a long while ago, I added a function that allows much smarter editing of bitflags: >> redit Room flags: [no_mob indoors no_recall protected] >> protected -indoors +dark Toggled(off): PROTECTED, cleared: INDOORS, set: DARK. Just typing 'protected' toggle it (and it came off). -indoors removed the indoors flag (no matter what it was before). +dark turned it on(no matter what it was before). Using an array of chars has another advantage: save all flags as text.. and then you can remove old unnecessary flags whenever you want - flags that do not exist are just ignored when you read them back. This becomes even easier with C++ and templates. Bitfields are useful however, whenever you want to have a few boolean values you want to set and are desperate for space, which you do not want to save/load (or if you don't care about portability) and do not want to set/convert to text. ============================================================================= <erwin@andreasen.com> Herlev, Denmark UNIX System Programmer <URL:http://www.abandoned.org/drylock/> <*> (not speaking for) DDE ============================================================================= +------------------------------------------------------------+ | Ensure that you have read the CircleMUD Mailing List FAQ: | | http://democracy.queensu.ca/~fletcher/Circle/list-faq.html | +------------------------------------------------------------+
This archive was generated by hypermail 2b30 : 12/15/00 PST