19720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block/*
29720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * Copyright (c) 1998
39720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * Silicon Graphics Computer Systems, Inc.
49720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block *
59720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * Copyright (c) 1999
69720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * Boris Fomitchev
79720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block *
89720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * This material is provided "as is", with absolutely no warranty expressed
99720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * or implied. Any use is at your own risk.
109720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block *
119720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * Permission to use or copy this software for any purpose is hereby granted
129720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * without fee, provided the above notices are retained on all copies.
139720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * Permission to modify the code and to distribute modified code is granted,
149720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * provided the above notices are retained, and a notice that the code was
159720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * modified is included with the above copyright notice.
169720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block *
179720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block */
189720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
199720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#ifndef _STLP_BITSET
209720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
219720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block// This implementation of bitset<> has a second template parameter,
229720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block// _WordT, which defaults to unsigned long.  *YOU SHOULD NOT USE
239720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block// THIS FEATURE*.  It is experimental, and it may be removed in
249720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block// future releases.
259720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
269720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block// A bitset of size N, using words of type _WordT, will have
279720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block// N % (sizeof(_WordT) * CHAR_BIT) unused bits.  (They are the high-
289720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block// order bits in the highest word.)  It is a class invariant
299720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block// of class bitset<> that those unused bits are always zero.
309720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
319720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block// Most of the actual code isn't contained in bitset<> itself, but in the
329720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block// base class _Base_bitset.  The base class works with whole words, not with
339720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block// individual bits.  This allows us to specialize _Base_bitset for the
349720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block// important special case where the bitset is only a single word.
359720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
369720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block// The C++ standard does not define the precise semantics of operator[].
379720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block// In this implementation the const version of operator[] is equivalent
389720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block// to test(), except that it does no range checking.  The non-const version
399720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block// returns a reference to a bit, again without doing any range checking.
409720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
419720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#ifndef _STLP_OUTERMOST_HEADER_ID
429720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#  define _STLP_OUTERMOST_HEADER_ID 0x2
439720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#  include <stl/_prolog.h>
44e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#  define _STLP_BITSET
459720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#endif
469720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
47e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#if (_STLP_OUTERMOST_HEADER_ID == 0x2)
48e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#  ifndef _STLP_INTERNAL_BITSET
49e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#    include <stl/_bitset.h>
50e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#  endif
519720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#endif
529720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
53e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#if (_STLP_OUTERMOST_HEADER_ID != 0x2) || defined (_STLP_IMPORT_VENDOR_STD)
54e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#  if defined (_STLP_HAS_INCLUDE_NEXT)
55e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#    include_next <bitset>
56e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#  else
57e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#    include _STLP_NATIVE_HEADER(bitset)
58e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#  endif
59e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#endif
609720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
619720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#if (_STLP_OUTERMOST_HEADER_ID == 0x2 )
629720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#  include <stl/_epilog.h>
639720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#  undef _STLP_OUTERMOST_HEADER_ID
649720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#endif
659720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
669720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#endif /* _STLP_BITSET */
679720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
689720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block// Local Variables:
699720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block// mode:C++
709720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block// End:
71