AwakeMUD-0.8.18B/
AwakeMUD-0.8.18B/doc/
AwakeMUD-0.8.18B/lib/
AwakeMUD-0.8.18B/lib/etc/
AwakeMUD-0.8.18B/lib/etc/pfiles/
AwakeMUD-0.8.18B/lib/misc/
AwakeMUD-0.8.18B/lib/text/
AwakeMUD-0.8.18B/lib/text/help/
AwakeMUD-0.8.18B/lib/text/wizhelp/
AwakeMUD-0.8.18B/lib/veh/
AwakeMUD-0.8.18B/lib/world/
AwakeMUD-0.8.18B/lib/world/mob/
AwakeMUD-0.8.18B/lib/world/mtx/
AwakeMUD-0.8.18B/lib/world/qst/
AwakeMUD-0.8.18B/lib/world/shp/
AwakeMUD-0.8.18B/lib/world/veh/
// file: bitfield.h
// author: Andrew Hynek
// contents: definition of the Bitfield class, a 128-bit bitvector

#ifndef __bitfield_h__
#define __bitfield_h__

#include "types.h"

const dword ENDBIT = 127;
#include "assert.h"
class Bitfield
{
  typedef unsigned int bitfield_t;
  static const int BITFIELD_SIZE = 4;
  static const int bits_per_var = sizeof(bitfield_t) * 8;

  bitfield_t data[BITFIELD_SIZE];

public:
  Bitfield();
  Bitfield(dword offset);

  // testing funcs
  //
  bool IsSet(dword offset) const;

  bool AreAnySet(dword one, ...) const;
  int  GetNumSet() const;

  bool AreAnyShared(const Bitfield &test) const;
  int  GetNumShared(const Bitfield &test) const;

  bool operator==(const Bitfield &test) const;
  bool operator!=(const Bitfield &test) const;

  // mutation funcs
  //
  void Clear();

  void SetBit(dword offset);
  void SetBits(dword one, ...);    // note: list _must_ be ENDBIT-terminated
  void SetAll(const Bitfield &two);

  void RemoveBit(dword offset);
  void RemoveBits(dword one, ...); // must also be ENDBIT-terminated
  void RemoveAll(const Bitfield &two);

  void ToggleBit(dword offset);
  void ToggleBits(dword one, ...); // ENDBIT-terminated

  // conversion funcs
  //
  const char *ToString() const;    // uses 8 internal buffers..
  void FromString(const char *str); // non-'0' assumed to be set;
  // assumes leading '0's if length < expected

  // prints a comma-separated list of names
  void PrintBits(char *dest, size_t dest_size,
                 const char *names[], size_t name_cnt);

  // static TotalWidth() - total number of bits contained
  static int TotalWidth()
  {
    return (bits_per_var*BITFIELD_SIZE);
  }
};

#endif // ifndef __bitfield_h__