+Fri Feb 20 16:15:05 1998 H.J. Lu (hjl@gnu.org)
+ Jason Merrill <jason@yorick.cygnus.com>
+
+ * ropeimpl.h: Check __STL_PTHREADS instead of _PTHREADS.
+ * stl_alloc.h: Ditto.
+ * stl_config.h: Ditto.
+ * stl_rope.h: Ditto.
+
+ * stl_config.h: include <_G_config.h> if __GNUG__ is defined.
+ (__STL_PTHREADS): Defined if _PTHREADS is defined or
+ __GLIBC__ >= 2.
+
+Tue Jan 27 12:01:25 1998 Jason Merrill <jason@yorick.cygnus.com>
+
+ * stl_algo.h (__lg): Fix for n == 0.
+
Sat Nov 8 00:45:17 1997 Jason Merrill <jason@yorick.cygnus.com>
* stl_hash_set.h (swap): Fix typo.
template<class charT, class Alloc> charT rope<charT,Alloc>::empty_c_str[1];
-# ifdef _PTHREADS
+# ifdef __STL_PTHREADS
template<class charT, class Alloc>
pthread_mutex_t rope<charT,Alloc>::swap_lock = PTHREAD_MUTEX_INITIALIZER;
# endif
template <class Size>
inline Size __lg(Size n) {
Size k;
- for (k = 0; n != 1; n >>= 1) ++k;
+ for (k = 0; n > 1; n >>= 1) ++k;
return k;
}
# define __RESTRICT
#endif
-#if !defined(_PTHREADS) && !defined(_NOTHREADS) \
+#if !defined(__STL_PTHREADS) && !defined(_NOTHREADS) \
&& !defined(__STL_SGI_THREADS) && !defined(__STL_WIN32THREADS)
# define _NOTHREADS
#endif
-# ifdef _PTHREADS
+# ifdef __STL_PTHREADS
// POSIX Threads
// This is dubious, since this is likely to be a high contention
// lock. Performance may not be adequate.
static inline void __unlock(volatile unsigned long *);
# endif
-# ifdef _PTHREADS
+# ifdef __STL_PTHREADS
static pthread_mutex_t __node_allocator_lock;
# endif
return(result);
}
-#ifdef _PTHREADS
+#ifdef __STL_PTHREADS
template <bool threads, int inst>
pthread_mutex_t
__default_alloc_template<threads, inst>::__node_allocator_lock
// (19) Defines __stl_assert either as a test or as a null macro,
// depending on whether or not __STL_ASSERTIONS is defined.
+#ifdef _PTHREADS
+# define __STL_PTHREADS
+#endif
+
# if defined(__sgi) && !defined(__GNUC__)
# if !defined(_BOOL)
# define __STL_NEED_BOOL
# if (_COMPILER_VERSION >= 721) && defined(_NAMESPACES)
# define __STL_USE_NAMESPACES
# endif
-# if !defined(_NOTHREADS) && !defined(_PTHREADS)
+# if !defined(_NOTHREADS) && !defined(__STL_PTHREADS)
# define __STL_SGI_THREADS
# endif
# endif
# ifdef __GNUC__
-# if 0 && (__GNUC__ < 2 || (__GNUC__ == 2 && __GNUC_MINOR__ < 8))
+# include <_G_config.h>
+# if __GNUC__ < 2 || (__GNUC__ == 2 && __GNUC_MINOR__ < 8)
# define __STL_STATIC_TEMPLATE_MEMBER_BUG
# define __STL_NEED_TYPENAME
# define __STL_NEED_EXPLICIT
# define __STL_EXPLICIT_FUNCTION_TMPL_ARGS
# define __STL_MEMBER_TEMPLATES
# endif
+# if !defined(_NOTHREADS) && __GLIBC__ >= 2
+# define __STL_PTHREADS
+# endif
# ifdef __EXCEPTIONS
# define __STL_USE_EXCEPTIONS
# endif
{
return InterlockedDecrement(&refcount);
}
-# elif defined(_PTHREADS)
+# elif defined(__STL_PTHREADS)
// This should be portable, but performance is expected
// to be quite awful. This really needs platform specific
// code.
static cstrptr atomic_swap(cstrptr *p, cstrptr q) {
return (cstrptr) InterlockedExchange((LPLONG)p, (LONG)q);
}
-# elif defined(_PTHREADS)
+# elif defined(__STL_PTHREADS)
// This should be portable, but performance is expected
// to be quite awful. This really needs platform specific
// code.