williamr@2: /*
williamr@2:  * Copyright (c) 1999, 2000
williamr@2:  * Boris Fomitchev
williamr@2:  *
williamr@2:  * This material is provided "as is", with absolutely no warranty expressed
williamr@2:  * or implied. Any use is at your own risk.
williamr@2:  *
williamr@2:  * Permission to use or copy this software for any purpose is hereby granted 
williamr@2:  * without fee, provided the above notices are retained on all copies.
williamr@2:  * Permission to modify the code and to distribute modified code is granted,
williamr@2:  * provided the above notices are retained, and a notice that the code was
williamr@2:  * modified is included with the above copyright notice.
williamr@2:  *
williamr@2:  */
williamr@2: 
williamr@2: /* NOTE: This is an internal header file, included by other STL headers.
williamr@2:  *   You should not attempt to use it directly.
williamr@2:  */
williamr@2: 
williamr@2: #ifndef _STLP_INTERNAL_WRAP_SET_H
williamr@2: #define _STLP_INTERNAL_WRAP_SET_H
williamr@2: 
williamr@2: #ifndef _STLP_INTERNAL_SET_H
williamr@2: # include <stl/_set.h>
williamr@2: #endif
williamr@2: 
williamr@2: # ifdef _STLP_USE_NAMESPACES
williamr@2: namespace STLPORT { 
williamr@2: # endif
williamr@2: 
williamr@2: #  if defined (_STLP_MINIMUM_DEFAULT_TEMPLATE_PARAMS)
williamr@2: #   define __SET_TEMPLATE_HEADER  template <class _Key>
williamr@2: #   define __SET_ARGUMENTS        _Key
williamr@2: #   define __MSET_TEMPLATE_HEADER  template <class _Key>
williamr@2: #   define __MSET_ARGUMENTS        _Key
williamr@2: #   define _Compare less<_Key>
williamr@2: #  else
williamr@2: #   define __SET_TEMPLATE_HEADER  template <class _Key, class _Compare >
williamr@2: #   define __SET_ARGUMENTS        _Key, _Compare
williamr@2: #   define __MSET_TEMPLATE_HEADER  template <class _Key, class _Compare >
williamr@2: #   define __MSET_ARGUMENTS        _Key, _Compare
williamr@2: #  endif
williamr@2: 
williamr@2: #   define __SET_SUPER  __set< _Key, _Compare, _STLP_DEFAULT_ALLOCATOR(_Key) >
williamr@2: #   define __MSET_SUPER __multiset< _Key, _Compare, _STLP_DEFAULT_ALLOCATOR(_Key) >
williamr@2: 
williamr@2: // provide a "default" set adaptor
williamr@2: __SET_TEMPLATE_HEADER
williamr@2: class set : public __SET_SUPER
williamr@2: {
williamr@2:   typedef set< __SET_ARGUMENTS > _Self;
williamr@2: public:
williamr@2:     typedef __SET_SUPER _Super;
williamr@2:     __IMPORT_WITH_REVERSE_ITERATORS(_Super)
williamr@2:     // copy & assignment from super
williamr@2:     __IMPORT_SUPER_COPY_ASSIGNMENT(set,_Self,__SET_SUPER)
williamr@2:     // specific constructors
williamr@2:     explicit set() : __SET_SUPER(_Compare()) {}
williamr@2:     explicit set(const _Compare& __comp) : __SET_SUPER(__comp) {}
williamr@2:     set(const value_type* __first, const value_type* __last) : 
williamr@2:         __SET_SUPER(__first, __last, _Compare()) { }
williamr@2:     set(const value_type* __first, const value_type* __last, 
williamr@2:         const _Compare& __comp) : __SET_SUPER(__first, __last, __comp) { }
williamr@2:     set(const_iterator __first, const_iterator __last) : 
williamr@2:         __SET_SUPER(__first, __last, _Compare()) { }
williamr@2:     set(const_iterator __first, const_iterator __last, 
williamr@2:         const _Compare& __comp) : __SET_SUPER(__first, __last, __comp) { }
williamr@2: };
williamr@2: 
williamr@2: #  if defined (_STLP_BASE_MATCH_BUG)
williamr@2: __SET_TEMPLATE_HEADER 
williamr@2: inline bool operator==(const set< __SET_ARGUMENTS >& __x, 
williamr@2:                        const set< __SET_ARGUMENTS >& __y) {
williamr@2:   typedef __SET_SUPER _Super;
williamr@2:   return operator==((const _Super&)__x,(const _Super&)__y);
williamr@2: }
williamr@2: 
williamr@2: __SET_TEMPLATE_HEADER 
williamr@2: inline bool operator<(const set< __SET_ARGUMENTS >& __x, 
williamr@2:                       const set< __SET_ARGUMENTS >& __y) {
williamr@2:   typedef __SET_SUPER _Super;
williamr@2:   return operator < ((const _Super&)__x , (const _Super&)__y);
williamr@2: }
williamr@2: #  endif
williamr@2: 
williamr@2: // provide a "default" multiset adaptor
williamr@2: __MSET_TEMPLATE_HEADER 
williamr@2: class multiset : public __MSET_SUPER
williamr@2: {
williamr@2:     typedef multiset< __MSET_ARGUMENTS > _Self;
williamr@2: public:
williamr@2:     typedef __MSET_SUPER _Super;
williamr@2:     __IMPORT_WITH_REVERSE_ITERATORS(_Super)
williamr@2:     // copy & assignment from super
williamr@2:     __IMPORT_SUPER_COPY_ASSIGNMENT(multiset, _Self, __MSET_SUPER)
williamr@2:     explicit multiset() : __MSET_SUPER(_Compare()) {}
williamr@2:     explicit multiset(const _Compare& __comp) : __MSET_SUPER(__comp) {}
williamr@2:     multiset(const value_type* __first, const value_type* __last) : 
williamr@2:         __MSET_SUPER(__first, __last, _Compare()) { }
williamr@2:     multiset(const value_type* __first, const value_type* __last, 
williamr@2:         const _Compare& __comp) : __MSET_SUPER(__first, __last, __comp) { }
williamr@2:     multiset(const_iterator __first, const_iterator __last) : 
williamr@2:         __MSET_SUPER(__first, __last, _Compare()) { }
williamr@2:     multiset(const_iterator __first, const_iterator __last, 
williamr@2:         const _Compare& __comp) : __MSET_SUPER(__first, __last, __comp) { }
williamr@2: };
williamr@2: 
williamr@2: #  if defined (_STLP_BASE_MATCH_BUG)   
williamr@2: __MSET_TEMPLATE_HEADER 
williamr@2: inline bool operator==(const multiset< __MSET_ARGUMENTS >& __x, 
williamr@2:                        const multiset< __MSET_ARGUMENTS >& __y) {
williamr@2:   typedef __MSET_SUPER  _Super;
williamr@2:   return (const _Super&)__x == (const _Super&)__y;
williamr@2: }
williamr@2: 
williamr@2: __MSET_TEMPLATE_HEADER 
williamr@2: inline bool operator<(const multiset< __MSET_ARGUMENTS >& __x, 
williamr@2:                       const multiset< __MSET_ARGUMENTS >& __y) {
williamr@2:   typedef __MSET_SUPER _Super;
williamr@2:   return (const _Super&)__x < (const _Super&)__y;
williamr@2: }
williamr@2: #  endif
williamr@2: 
williamr@2: # undef __MSET_TEMPLATE_HEADER
williamr@2: # undef __MSET_ARGUMENTS
williamr@2: # undef __MSET_SUPER
williamr@2: 
williamr@2: # undef __SET_TEMPLATE_HEADER
williamr@2: # undef __SET_ARGUMENTS
williamr@2: # undef __SET_SUPER 
williamr@2: # undef _Compare
williamr@2: 
williamr@2: # ifdef _STLP_USE_NAMESPACES
williamr@2: } /* namespace STLPORT */
williamr@2: # endif
williamr@2: 
williamr@2: #endif /* _STLP_INTERNAL_WRAP_SET_H */
williamr@2: 
williamr@2: // Local Variables:
williamr@2: // mode:C++
williamr@2: // End: