ports/textproc/zorba/files/patch-src-util_atomic_int.h
Pietro Cerutti 4b7c37750e - Update to 2.0.2
Changelog since 1.4.0

	version 2.0.2

	* Fixed bug #3401971 (node-by-reference on dynamic collections)
	* documentation improvements
	* installer improvements
	* Fixed bug #3403291 (build for Fedora 15)
	* Don't install the .so for test modules
	* Fix for running ctest on Windows

	version 2.0.1

	* Custom Full-text stemming.
	* Custom Full-text tokenization.
	* Fixed scripting bug where apply statement was considered a
	* sequential expr even if the source expr was non-updating and
	* non-sequential.
	* Fixed bug #3394400 (Element replacement, really unexpected result)
	* Fixed bug #3394588 (Unexpected error during pul undo)
	* Fixed bugs #3398511 and #3398552 with "make install"
	* Fixed bug #3398521 for compiling with ZORBA_NO_XMLSCHEMA

	version 2.0

	* Zorba 2.0 is a major rewrite of previous versions. It doesn't claim
	  to preserve backwards compatibility with any 1.X version.
	  Host language API changes have been made to the following components:
		- External functions API
		- XmlDataManager
		- Error reporting
		- Debugger API
	  XQuery language and API changes have been made to the following components:
		- XQuery Scripting Extension
		- Function APIs
		- XQuery Data Definition Facility
		- XQuery modules and module versioning
		- Changes to conform with the latest XQuery 3.0
		- Namespaces of annotations, errors, collations.
	* In addition to host language API and XQuery language improvements, plenty of
	  bug fixes and optimizations have been made.

Feature safe:	yes
2011-11-30 15:34:15 +00:00

138 lines
4.3 KiB
C++

--- src/util/atomic_int.h.orig 2011-09-15 10:09:31.000000000 +0200
+++ src/util/atomic_int.h 2011-09-15 11:15:19.000000000 +0200
@@ -27,7 +27,10 @@
// Test first for and prefer gcc's atomic operations over all others since
// they're an order of magnitude faster.
//
-#if defined( __GNUC__ )
+#if defined( __FreeBSD__ )
+# include <sys/types.h>
+# include <machine/atomic.h>
+#elif defined( __GNUC__ )
# if __GNUC__ * 100 + __GNUC_MINOR__ >= 402
# include <ext/atomicity.h>
# else
@@ -40,9 +43,6 @@
# endif
#elif defined( __APPLE__ )
# include <libkern/OSAtomic.h>
-#elif defined( __FreeBSD__ )
-# include <sys/types.h>
-# include <machine/atomic.h>
#elif defined( __NetBSD__ )
# include <sys/atomic.h>
#elif defined( __SOLARIS__ )
@@ -66,12 +66,12 @@
*/
class atomic_int {
public:
-#if defined( __GNUC__ )
+#if defined( __FreeBSD__ )
+ typedef int value_type;
+#elif defined( __GNUC__ )
typedef _Atomic_word value_type;
#elif defined( __APPLE__ ) || defined( __NetBSD__ ) || defined( __SOLARIS__ )
typedef int32_t value_type;
-#elif defined( __FreeBSD__ )
- typedef int value_type;
#elif defined( _WIN32 )
typedef LONG value_type;
#endif
@@ -172,7 +172,7 @@
value_type load_impl() const {
#if defined( __FreeBSD__ )
- return atomic_load_acq_int( &value_ );
+ return atomic_load_acq_int( (volatile u_int *)&value_ );
#else
value_type const temp = *(value_type volatile*)&value_;
# if defined( __GNUC__ )
@@ -192,7 +192,7 @@
void store_impl( value_type n ) {
#if defined( __FreeBSD__ )
- atomic_store_rel_int( &value_, n );
+ atomic_store_rel_int( (volatile u_int *)&value_, n );
#elif defined( _WIN32 )
InterlockedExchange( &value_, n );
#else
@@ -210,12 +210,12 @@
}
value_type add( value_type n ) {
-#if defined( __GNUC__ )
+#if defined( __FreeBSD__ )
+ return atomic_fetchadd_int( (volatile u_int*)&value_, n ) + n;
+#elif defined( __GNUC__ )
return GNU_EXCHANGE_AND_ADD( &value_, n ) + n;
#elif defined( __APPLE__ )
return OSAtomicAdd32( n, &value_ );
-#elif defined( __FreeBSD__ )
- return atomic_fetchadd_int( &value_, n ) + n;
#elif defined( __NetBSD__ )
return (value_type)atomic_add_32_nv( (uint32_t*)&value_, n );
#elif defined( __SOLARIS__ )
@@ -226,12 +226,12 @@
}
value_type pre_dec() {
-#if defined( __GNUC__ )
+#if defined( __FreeBSD__ )
+ return atomic_fetchadd_int( (volatile u_int *)&value_, -1 ) - 1;
+#elif defined( __GNUC__ )
return GNU_EXCHANGE_AND_ADD( &value_, -1 ) - 1;
#elif defined( __APPLE__ )
return OSAtomicDecrement32( &value_ );
-#elif defined( __FreeBSD__ )
- return atomic_fetchadd_int( &value_, -1 ) - 1;
#elif defined( __NetBSD__ )
return (value_type)atomic_add_int_nv( (uint32_t*)&value_, -1 );
#elif defined( __SOLARIS__ )
@@ -242,12 +242,12 @@
}
value_type pre_inc() {
-#if defined( __GNUC__ )
+#if defined( __FreeBSD__ )
+ return atomic_fetchadd_int( (volatile u_int *)&value_, 1 ) + 1;
+#elif defined( __GNUC__ )
return GNU_EXCHANGE_AND_ADD( &value_, 1 ) + 1;
#elif defined( __APPLE__ )
return OSAtomicIncrement32( &value_ );
-#elif defined( __FreeBSD__ )
- return atomic_fetchadd_int( &value_, 1 ) + 1;
#elif defined( __NetBSD__ )
return (value_type)atomic_add_int_nv( (uint32_t*)&value_, 1 );
#elif defined( __SOLARIS__ )
@@ -258,12 +258,12 @@
}
value_type post_dec() {
-#if defined( __GNUC__ )
+#if defined( __FreeBSD__ )
+ return atomic_fetchadd_int( (volatile u_int *)&value_, -1 );
+#elif defined( __GNUC__ )
return GNU_EXCHANGE_AND_ADD( &value_, -1 );
#elif defined( __APPLE__ )
return OSAtomicDecrement32( &value_ ) + 1;
-#elif defined( __FreeBSD__ )
- return atomic_fetchadd_int( &value_, -1 );
#elif defined( __NetBSD__ )
return (value_type)atomic_add_int_nv( (uint32_t*)&value_, -1 ) + 1;
#elif defined( __SOLARIS__ )
@@ -274,12 +274,12 @@
}
value_type post_inc() {
-#if defined( __GNUC__ )
+#if defined( __FreeBSD__ )
+ return atomic_fetchadd_int( (volatile u_int *)&value_, 1 );
+#elif defined( __GNUC__ )
return GNU_EXCHANGE_AND_ADD( &value_, 1 );
#elif defined( __APPLE__ )
return OSAtomicIncrement32( &value_ ) - 1;
-#elif defined( __FreeBSD__ )
- return atomic_fetchadd_int( &value_, 1 );
#elif defined( __NetBSD__ )
return (value_type)atomic_add_int_nv( (uint32_t*)&value_, 1 ) - 1;
#elif defined( __SOLARIS__ )