On Thu, 25 Sep 1997, Andrew Helm wrote: -+Don't use bitfields. The syntax for their use is pretty much the only -+thing about them that isn't implementation defined. They may use up more -+space than a bitvector system (depending on alignment requirements and -+such), and accessing them requires at least as many instructions as -+bitvectors. They may be completely portable, but bitvectors are so much -+better. They're not completely portable, though, and their only merit lies in the fact that they aren't limited to the size of a variable type like bitvectors. Hm, to take a page from Zedd (reference to Terry Goodkind's fantasy books; if you haven't read 'em, do so, good author and more twisted than Jordan could ever hope to be. I actually liked his first book, _Wizard's_First_Rule_, more than most of the novels in the Wheel of Time so far), "Nothing's ever easy." Bitfields are problematic and somewhat non-portable (although their portability is probably rather trivially, since I believe *most* compilers know about them), but still problematic. Bitvectors are limited by size. Bitvector arrays work but are inefficient (eg., you give too much room for some variables [what if you just wanted 34 flags and you get stuck with having 128? although that problem is easily solvable, but: what if you need 129 flags?]). You see what I'm getting at? All of these solutions so far are functional, but none are truly good solutions. A good solution would be clean, without wasting memory, and flexible. And as of yet, no such implementation is out there (to my knowledge). Sucks, don't it? Bitfield: int bit0 : 1; Bitvector: int bitv; Bitvector array: int bitv[4]; Stranger bitvector array: #define MAX_BITS(n) (n / 8) unsigned char bitv2[MAX_BITS(128)]; this would give you a bit more memory efficiency for when you need something larger than 32 but smaller than 64 (say 40 or 48 or 56). Though handling ones *larger* than a set maximum is still impossible, unless we're willing to do: #define BITVECTOR(name, svar, n) \ { svar = (n) / 8; \ unsigned char (name)[(svar)]; } BTW, Off-topic Note of the Day: it's really easy to piss off a girl's boyfriend, even if he is your friend...and even if the comment you made was just a *joke* (they seem to lose their sense of humor when conducting a long distance relationship with someone you've been friends with for two years :) Luckily, it's long distance, so I won't be running into him in any dark alleys (I wouldn't want to have to hurt him or anything; beat him mercilessly with my keyboard). And I bet you were all thinking that I still had a shred of sanity...right up until that previous paragraph. :) -- Daniel Koepke -:- dkoepke@california.com -:- [Shadowlord/Nether] Think. +------------------------------------------------------------+ | 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/08/00 PST