Compare commits

...

5 Commits

Author SHA1 Message Date
nobody
876ccab92a This commit was manufactured by cvs2svn to create tag
'Version_1_33_1'.

[SVN r31916]
2005-12-05 14:04:06 +00:00
Peter Dimov
b179f44d79 Switched to 'int' since 'long' is 64 bits on PPC64
[SVN r30651]
2005-08-24 17:15:49 +00:00
Peter Dimov
dff0529ad5 Removed explicit register use (thanks to Howard Hinnant)
[SVN r30585]
2005-08-15 19:44:15 +00:00
Jonathan Turkanis
72c5cc395a fixed broken links
[SVN r30431]
2005-08-03 21:42:39 +00:00
nobody
9945f4e158 This commit was manufactured by cvs2svn to create branch 'RC_1_33_0'.
[SVN r30300]
2005-07-28 18:22:24 +00:00
3 changed files with 30 additions and 24 deletions

View File

@@ -34,55 +34,61 @@ namespace detail
inline void atomic_increment( register long * pw )
{
register int a;
asm
{
loop:
lwarx r4, 0, r3
addi r4, r4, 1
stwcx. r4, 0, r3
lwarx a, 0, pw
addi a, a, 1
stwcx. a, 0, pw
bne- loop
}
}
inline long atomic_decrement( register long * pw )
{
register int a;
asm
{
sync
loop:
lwarx r4, 0, r3
addi r4, r4, -1
stwcx. r4, 0, r3
lwarx a, 0, pw
addi a, a, -1
stwcx. a, 0, pw
bne- loop
mr r3, r4
isync
}
return a;
}
inline long atomic_conditional_increment( register long * pw )
{
register int a;
asm
{
loop:
lwarx r4, 0, r3
cmpwi r4, 0
lwarx a, 0, pw
cmpwi a, 0
beq store
addi r4, r4, 1
addi a, a, 1
store:
stwcx. r4, 0, r3
stwcx. a, 0, pw
bne- loop
mr r3, r4
}
return a;
}
class sp_counted_base

View File

@@ -32,11 +32,11 @@ namespace boost
namespace detail
{
inline void atomic_increment( long * pw )
inline void atomic_increment( int * pw )
{
// ++*pw;
long tmp;
int tmp;
__asm__
(
@@ -52,11 +52,11 @@ inline void atomic_increment( long * pw )
);
}
inline long atomic_decrement( long * pw )
inline int atomic_decrement( int * pw )
{
// return --*pw;
long rv;
int rv;
__asm__ __volatile__
(
@@ -76,12 +76,12 @@ inline long atomic_decrement( long * pw )
return rv;
}
inline long atomic_conditional_increment( long * pw )
inline int atomic_conditional_increment( int * pw )
{
// if( *pw != 0 ) ++*pw;
// return *pw;
long rv;
int rv;
__asm__
(
@@ -109,8 +109,8 @@ private:
sp_counted_base( sp_counted_base const & );
sp_counted_base & operator= ( sp_counted_base const & );
long use_count_; // #shared
long weak_count_; // #weak + (#shared != 0)
int use_count_; // #shared
int weak_count_; // #weak + (#shared != 0)
public:
@@ -170,7 +170,7 @@ public:
long use_count() const // nothrow
{
return static_cast<long const volatile &>( use_count_ );
return static_cast<int const volatile &>( use_count_ );
}
};

View File

@@ -621,7 +621,7 @@ p3.reset(new int(2)); // undefined, multiple writes
day a highly configurable smart pointer may be invented that is also very easy
to use and very hard to misuse. Until then, <B>shared_ptr</B> is the smart
pointer of choice for a wide range of applications. (Those interested in policy
based smart pointers should read <A href="http://cseng.aw.com/book/0,,0201704315,00.html">
based smart pointers should read <A href="http://www.awprofessional.com/bookstore/product.asp?isbn=0201704315&rl=1">
Modern C++ Design</A> by Andrei Alexandrescu.)<BR>
</P>
<P><B>Q.</B> I am not convinced. Default parameters can be used where appropriate