Source code repo: http://github.com/khizmax/libcds/
Download: http://sourceforge.net/projects/libcds/files/
-
+
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met:
SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#ifndef CDSUNIT_SET_TEST_SET_RCU_H
// Precondition: set is empty
// Postcondition: set is empty
- ASSERT_TRUE( s.empty() );
+ ASSERT_TRUE( s.empty());
ASSERT_CONTAINER_SIZE( s, 0 );
base_class::test( s );
data.reserve( kSize );
indices.reserve( kSize );
for ( size_t key = 0; key < kSize; ++key ) {
- data.push_back( value_type( static_cast<int>(key) ) );
+ data.push_back( value_type( static_cast<int>(key)) );
indices.push_back( key );
}
- shuffle( indices.begin(), indices.end() );
+ shuffle( indices.begin(), indices.end());
for ( auto& i : data ) {
- ASSERT_TRUE( s.insert( i ) );
+ ASSERT_TRUE( s.insert( i ));
}
- ASSERT_FALSE( s.empty() );
+ ASSERT_FALSE( s.empty());
ASSERT_CONTAINER_SIZE( s, nSetSize );
// iterator test
}
for ( auto it = s.cbegin(); it != s.cend(); ++it ) {
- EXPECT_EQ( it->nFindCount, it->key() * 3 );
+ EXPECT_EQ( it->nFindCount, static_cast<unsigned>( it->key() * 3 ));
}
typedef typename Set::exempt_ptr exempt_ptr;
{
rcu_lock l;
- raw_ptr rp;
+ raw_ptr rp{};
ASSERT_TRUE( !rp );
switch ( idx % 3 ) {
case 0:
- rp = s.get( i.key() );
+ rp = s.get( i.key());
ASSERT_FALSE( !rp );
break;
case 1:
ASSERT_FALSE( !rp );
break;
case 2:
- rp = s.get_with( other_item( i.key() ), other_less() );
+ rp = s.get_with( other_item( i.key()), other_less());
ASSERT_FALSE( !rp );
}
- EXPECT_EQ( rp->key(), i.key() );
- EXPECT_EQ( rp->nFindCount, i.key() * 3 );
+ EXPECT_EQ( rp->key(), i.key());
+ EXPECT_EQ( rp->nFindCount, static_cast<unsigned>( i.key() * 3 ));
rp->nFindCount *= 2;
}
}
ASSERT_TRUE( !xp );
if ( Set::c_bExtractLockExternal ) {
- rcu_lock l;
-
- switch ( idx % 3 ) {
- case 0:
- xp = s.extract( i.key() );
- ASSERT_FALSE( !xp );
- break;
- case 1:
- xp = s.extract( i );
- ASSERT_FALSE( !xp );
- break;
- case 2:
- xp = s.extract_with( other_item( i.key() ), other_less() );
- ASSERT_FALSE( !xp );
- break;
+ {
+ rcu_lock l;
+
+ switch ( idx % 3 ) {
+ case 0:
+ xp = s.extract( i.key());
+ ASSERT_FALSE( !xp );
+ break;
+ case 1:
+ xp = s.extract( i );
+ ASSERT_FALSE( !xp );
+ break;
+ case 2:
+ xp = s.extract_with( other_item( i.key()), other_less());
+ ASSERT_FALSE( !xp );
+ break;
+ }
+ EXPECT_EQ( xp->key(), i.key());
+ EXPECT_EQ( xp->nFindCount, static_cast<unsigned>( i.key() * 6 ));
}
- EXPECT_EQ( xp->key(), i.key() );
- EXPECT_EQ( xp->nFindCount, i.key() * 6 );
-
- switch ( idx % 3 ) {
- case 0:
- xp = s.extract( i.key() );
- break;
- case 1:
- xp = s.extract( i );
- break;
- case 2:
- xp = s.extract_with( other_item( i.key() ), other_less() );
- break;
+ xp.release();
+
+ {
+ rcu_lock l;
+
+ switch ( idx % 3 ) {
+ case 0:
+ xp = s.extract( i.key());
+ break;
+ case 1:
+ xp = s.extract( i );
+ break;
+ case 2:
+ xp = s.extract_with( other_item( i.key()), other_less());
+ break;
+ }
+ ASSERT_TRUE( !xp );
}
- ASSERT_TRUE( !xp );
}
else {
switch ( idx % 3 ) {
case 0:
- xp = s.extract( i.key() );
+ xp = s.extract( i.key());
ASSERT_FALSE( !xp );
break;
case 1:
ASSERT_FALSE( !xp );
break;
case 2:
- xp = s.extract_with( other_item( i.key() ), other_less() );
+ xp = s.extract_with( other_item( i.key()), other_less());
ASSERT_FALSE( !xp );
break;
}
- EXPECT_EQ( xp->key(), i.key() );
- EXPECT_EQ( xp->nFindCount, i.key() * 6 );
+ EXPECT_EQ( xp->key(), i.key());
+ EXPECT_EQ( xp->nFindCount, static_cast<unsigned>( i.key() * 6 ));
switch ( idx % 3 ) {
case 0:
- xp = s.extract( i.key() );
+ xp = s.extract( i.key());
break;
case 1:
xp = s.extract( i );
break;
case 2:
- xp = s.extract_with( other_item( i.key() ), other_less() );
+ xp = s.extract_with( other_item( i.key()), other_less());
break;
}
ASSERT_TRUE( !xp );
}
}
- ASSERT_TRUE( s.empty() );
+ ASSERT_TRUE( s.empty());
ASSERT_CONTAINER_SIZE( s, 0 );
}