Re: Increasing sizes of bit vectors

From: Niese-Petersen (Tenp@cris.com)
Date: 01/17/97


On Fri, 17 Jan 1997, Sammy wrote:

> 
> On Thu, 16 Jan 1997, Niese-Petersen wrote:
> 
> - On Fri, 17 Jan 1997, Chris Warren wrote:
> - 
> - > I think this may have been covered before, but I can't remember....
> - > My problem is this.... I *NEED* 42 ITEM_XXXXX extra flags. Now I was
> - > wondering if it would be possible to change...
> - 
> -   I am working on an idea for more than the 32 bitvectors, with help
> - of an array.  It's not a small process, but worth it I think.
> - Hopefully I get time this coming weekend to test, what I have done 
> - so far.
> -   The obj files will be a job tho, since it got to read more than on
> - bit field.  But then again, an obj. converter is always good to code
> - and have for later use :)
> 
> How about this:
> 
> Change long room_flags to long room_flags[2], and do the same with all
> other bitvectors.
> 
> Change all your ROOM defines from binary to decimal like this:
> 
> #define ROOM_DARK	0
> #define ROOM_DEATH	1
> #define ROOM_NOMOB	2
> #define ROOM_INDOORS	3  // etc... and do the same for other bitvectors
> 
> change your flag macros to these:
> 
> #define SET_BIT(var, bit) ((var)[(bit)/32] |= 1 << ((bit) % 32))
> #define TOGGLE_BIT(var, bit) ((var)[(bit)/32] ^= 1 << ((bit) % 32))
> #define REMOVE_BIT(var, bit) ((var)[(bit)/32] &= ~(1 << ((bit) % 32)))
> #define IS_SET(flag, bit) ((flag)[(bit)/32] & 1 << ((bit) % 32))
> 
> Now you can use up to 64 flags in each bitvector.  You'll have to change
> the pfile, but you can keep the world files the same if you modify
> asciiflag_conv to allow 64 flags.  You can get 64 flags using lowercase,
> then uppercase, then digits, then one more character, like a '+'.  Note
> that this will make worldfile bitvectors in integer format unusable, so
> you'll have to convert any old style bitvecotrs to ascii bitvectors first.
> 
> Another problem is that you can't set, remove, or toggle multiple flags,
> so:
> 
> SET_BIT(PLR_FLAGS(ch), PLR_WRITING | PLR_MAILING);
> 
> Must be changed to:
> 
> SET_BIT(PLR_FLAGS(ch), PLR_WRITING);
> SET_BIT(PLR_FLAGS(ch), PLR_WRITING);
> 
> If you've got olc, you'll need to make some changes there too.
> 
> Oh and sprinttypes, and any other functions/macros that deal with
> bitvectors will need small mods.
> 

Well what a surprice. Just the idea I wrote about a month ago, plus what I
was talking about [read above] ..

When I do get my code tested, it will have possibility for 128 flags, in
most bitvector flags.


Erik Niese-Petersen
AKA Quint the typo dane
Realms of Darkness IMP


+-----------------------------------------------------------+
| Ensure that you have read the CircleMUD Mailing List FAQ: |
|   http://cspo.queensu.ca/~fletcher/Circle/list_faq.html   |
+-----------------------------------------------------------+



This archive was generated by hypermail 2b30 : 12/18/00 PST