Man Page bitset.3



                       Standard C++ Library
             Copyright 1998, Rogue Wave Software, Inc.



NAME

     bitset

      - A template class and related functions  for  storing  and
     manipulating fixed-size sequences of bits.





SYNOPSIS

     #include <bitset>
     template <size_t N>
     class bitset ;





DESCRIPTION

     bitset<size_t_N> is a class that describes objects that  can
     store  a  sequence  consisting of a fixed number of bits, N.
     Each bit represents either the value  zero  (reset)  or  one
     (set) and has a non-negative position pos.





ERRORS AND EXCEPTIONS

     Bitset constructors and member functions may report the fol-
     lowing  three  types of errors - each associated with a dis-
     tinct exception:



     o    Invalid-argument error or invalid_argument() exception;

     o    Out-of-range error or out_of_range() exception;

     o    Overflow error or over-flow_error() exception;


     If exceptions are not supported on your compiler, you get an
     assertion failure instead of an exception.





INTERFACE

     template <size_t N>
     class bitset {

     public:

     // bit reference:

      class reference {
       friend class bitset;
      public:

        ~reference();
       reference& operator= (bool);
       reference& operator= (const reference&);
       bool operator~() const;
       operator bool() const;
       reference& flip();
       };


     // Constructors
      bitset ();
      bitset (unsigned long);
      template<class charT, class traits, class Allocator>
      explicit bitset
                (const basic_string<charT, traits, Allocator>,
                typename basic_string<charT, traits,
                                      Allocator>::size_type=0,
                typename basic_string<charT, traits,
                                      Allocator>::size_type=
                basic_string<charT, traits, Allocator>::npos);
      bitset (const bitset<N>&);
      bitset<N>& operator= (const bitset<N>&);

     // Bitwise Operators and Bitwise Operator Assignment
       bitset<N>& operator&= (const bitset<N>&);
       bitset<N>& operator|= (const bitset<N>&);
       bitset<N>& operator^= (const bitset<N>&);
       bitset<N>& operator<<= (size_t);
       bitset<N>& operator>>= (size_t);

     // Set, Reset, Flip
       bitset<N>& set ();
       bitset<N>& set (size_t, int = 1);
       bitset<N>& reset ();
       bitset<N>& reset (size_t);
       bitset<N> operator~() const;
       bitset<N>& flip ();
       bitset<N>& flip (size_t);

     // element access
       reference operator[] (size_t);
       unsigned long to_ulong() const;
       template<class charT, class traits, class Allocator>
       basic_string<charT, traits, Allocator> to_string();
       size_t count() const;
       size_t size() const;
       bool operator== (const bitset<N>&) const;
       bool operator!= (const bitset<N>&) const;
       bool test (size_t) const;
       bool any() const;
       bool none() const;
       bitset<N> operator<< (size_t) const;
       bitset<N> operator>> (size_t) const;

     };

     // Non-member operators
     template <size_t N>
     bitset<N> operator& (const bitset<N>&, const bitset<N>&);

     template <size_t N>
     bitset<N> operator| (const bitset<N>&, const bitset<N>&);

     template <size_t N>
     bitset<N> operator^ (const bitset<N>&, const bitset<N>&);

     template <size_t N>
     istream& operator>> (istream&, bitset<N>&);

     template <size_t N>
     ostream& operator<< (ostream&, const bitset<N>&)





CONSTRUCTORS

     bitset();


        Constructs an object of class bitset<N>, initializing all
        bit values to zero.



     bitset(unsigned long val);


        Constructs an object of class bitset<N>, initializing the
        first M bit values to the corresponding bits in val. M is
        the smaller of N and the value CHAR_BIT * sizeof(unsigned
        long).  If M < N, remaining bit positions are initialized
        to zero. Note: CHAR_BIT is defined in <climits>.


        template<class charT, class traits, class Allocator>



     explicit

     bitset (const basic_string<charT, traits, Allocator>,
            typename basic_string<charT, traits,
                                  Allocator>::size_type=0,
            typename basic_string<charT, traits,
                                  Allocator>::size_type=
            basic_string<charT, traits, Allocator>::npos);



        Determines the effective length rlen of the  initializing
        string  as  the  smaller  of  n and str.size() - pos. The
        function throws an invalid_argument exception if  any  of
        the rlen characters in str, beginning at position pos, is
        other than 0 or 1. Otherwise, the function constructs  an
        object  of  class bitset<N>, initializing the first M bit
        positions to values  determined  from  the  corresponding
        characters  in  the string str. M is the smaller of N and
        rlen. This constructor expects pos <= str.size(). If that
        is  not  true,  the  constructor  throws  an out_of_range
        exception.



     bitset(const bitset<N>& rhs);


        Creates a copy of rhs.






ASSIGNMENT OPERATORS

     bitset<N>&
     operator=(const bitset<N>& rhs);


        Erases all bits in self, then inserts into self a copy of
        each bit in rhs. Returns a reference to *this.






OPERATORS

     bool
     operator==(const bitset<N>& rhs) const;


        Returns true if the value of each bit in *this equals the
        value of each corresponding bit in rhs. Otherwise returns
        false.



     bool
     operator!=(const bitset<N>& rhs) const;


        Returns true if the value of any  bit  in  *this  is  not
        equal  to the value of the corresponding bit in rhs. Oth-
        erwise returns false.



     bitset<N>&
     operator&=(const bitset<N>& rhs);


        Clears each bit in *this for which the corresponding  bit
        in  rhs  is  clear  and  leaves all other bits unchanged.
        Returns *this.



     bitset<N>&
     operator|=(const bitset<N>& rhs);


        Sets each bit in *this for which the corresponding bit in
        rhs  is set, and leaves all other bits unchanged. Returns
        *this.



     bitset<N>&
     operator^=(const bitset<N>& rhs);


        Toggles each bit in *this for which the corresponding bit
        in  rhs  is  set,  and  leaves  all other bits unchanged.
        Returns *this.



     bitset<N>&
     operator<<=(size_t pos);

        Replaces each bit at position I with 0 if I < pos or with
        the  value  of  the  bit  at I - pos if I >= pos. Returns
        *this.



     bitset<N>&
     operator>>=(size_t pos);


        Replaces each bit at position I with 0 if pos >=  N-I  or
        with  the  value  of the bit at position I + pos if pos <
        N-I. Returns *this.



     bitset<N>&
     operator>>(size_t pos) const;


        Returns bitset<N>(*this) >>= pos.



     bitset<N>&
     operator<<(size_t pos) const;


        Returns bitset<N>(*this) <<= pos.



     bitset<N>
     operator~() const;


        Returns the bitset that is the logical complement of each
        bit in *this.



     bitset<N>
     operator&(const bitset<N>& lhs,
              const bitset<N>& rhs);


        lhs gets logical AND of lhs with rhs.



     bitset<N>
     operator|(const bitset<N>& lhs,
              const bitset<N>& rhs);


        lhs gets logical OR of lhs with rhs.



     bitset<N>
     operator^(const bitset<N>& lhs,
              const bitset<N>& rhs);


        lhs gets logical XOR of lhs with rhs.



     template <size_t N>
     istream&
     operator>>(istream& is, bitset<N>& x);


        Extracts up to N characters (single-byte) from is. Stores
        these  characters  in  a  temporary  object  str  of type
        string, then evaluates the expression x = bitset<N>(str).
        Characters are extracted and stored until any of the fol-
        lowing occurs:




             -    N characters have been extracted and stored

             -    An end-of-file is reached on the input sequence

             -    The next character is neither '0' nor  '1'.  In
                  this case, the character is not extracted


        Returns is.



     template <size_t N>
     ostream&
     operator<<(ostream& os, const bitset<N>& x);


        Returns os << x.to_string()





MEMBER FUNCTIONS

     bool
     any() const;


        Returns true if  any  bit  in  *this  is  set.  Otherwise
        returns false.



     size_t
     count() const;


        Returns a count of the number of bits set in *this.



     bitset<N>&
     flip();


        Flips all bits in *this, and returns *this.



     bitset<N>&
     flip(size_t pos);


        Flips the bit at position pos in *this and returns *this.
        Throws   an   out_of_range  exception  if  pos  does  not
        correspond to a valid bit position.



     bool
     none() const;


        Returns true if no  bit  in  *this  is  set.    Otherwise
        returns false.



     bitset<N>&
     reset();


        Resets all bits in *this, and returns *this.


     bitset<N>&
     reset(size_t pos);


        Resets the bit  at  position  pos  in  *this.  Throws  an
        out_of_range  exception  if  pos does not correspond to a
        valid bit position.



     bitset<N>&
     set();


        Sets all bits in *this, and returns *this.



     bitset<N>&
     set(size_t pos, int val = 1);


        Stores a new value in the bits at position pos in  *this.
        If  val is nonzero, the stored value is one, otherwise it
        is zero. Throws an out_of_range exception if pos does not
        correspond to a valid bit position.



     size_t
     size() const;


        Returns the template parameter N.



     bool
     test(size_t pos) const;


        Returns true if the bit at position pos is set. Throws an
        out_of_range  exception  if  pos does not correspond to a
        valid bit position.


        template<class charT, class traits, class Allocator>
        basic_string<charT, traits, Allocator>
        to_string();

        Returns an object of type string, N characters long.

        Each position in the new string  is  initialized  with  a
        character ('0' for zero and '1' for one) representing the
        value stored in the corresponding bit position of  *this.
        Character  position  N - 1 corresponds to bit position 0.
        Subsequent decreasing character positions  correspond  to
        increasing bit positions.



     unsigned long
     to_ulong() const;


        Returns the integral value corresponding to the  bits  in
        *this.  Throws  an overflow_error if these bits cannot be
        represented as type unsigned long.






SEE ALSO

     Containers