bitset: add bitset_stream_size and bitset_stream_queued_bytes

This commit is contained in:
nick
2013-09-12 16:54:42 +01:00
parent 0a029fbbf5
commit c3a5eb0600
2 changed files with 80 additions and 5 deletions

View File

@@ -261,6 +261,38 @@ static inline void bitset_stream_dequeue(
return;
}
static inline int bitset_stream_size( struct bitset_mapping * set )
{
int size;
pthread_mutex_lock( &set->stream->mutex );
size = set->stream->size;
pthread_mutex_unlock( &set->stream->mutex );
return size;
}
static inline uint64_t bitset_stream_queued_bytes(
struct bitset_mapping * set,
enum bitset_stream_events event
)
{
uint64_t total = 0;
int i;
pthread_mutex_lock( &set->stream->mutex );
for ( i = set->stream->out; i < set->stream->in ; i++ ) {
if ( set->stream->entries[i].event == event ) {
total += set->stream->entries[i].len;
}
}
pthread_mutex_unlock( &set->stream->mutex );
return total;
}
static inline void bitset_stream_on( struct bitset_mapping * set )
{
BITSET_LOCK;

View File

@@ -310,7 +310,7 @@ START_TEST( test_bitset_set_range_doesnt_push_to_stream )
{
struct bitset_mapping *map = bitset_alloc( 64, 1 );
bitset_set_range( map, 0, 64 );
ck_assert_int_eq( map->stream->size, 0 );
ck_assert_int_eq( 0, bitset_stream_size( map ) );
bitset_free( map );
}
END_TEST
@@ -319,7 +319,7 @@ START_TEST( test_bitset_clear_range_doesnt_push_to_stream )
{
struct bitset_mapping *map = bitset_alloc( 64, 1 );
bitset_clear_range( map, 0, 64 );
ck_assert_int_eq( map->stream->size, 0 );
ck_assert_int_eq( 0, bitset_stream_size( map ) );
bitset_free( map );
}
END_TEST
@@ -354,7 +354,7 @@ START_TEST(test_bitset_stream_off)
bitset_stream_off( map );
ck_assert_int_eq( 0, map->stream_enabled );
ck_assert_int_eq( 2, map->stream->size );
ck_assert_int_eq( 2, bitset_stream_size( map ) );
bitset_stream_dequeue( map, NULL ); // ON
bitset_stream_dequeue( map, &result ); // OFF
@@ -376,7 +376,7 @@ START_TEST(test_bitset_stream_with_set_range)
bitset_stream_on( map );
bitset_set_range( map, 0, 32 );
ck_assert_int_eq( 2, map->stream->size );
ck_assert_int_eq( 2, bitset_stream_size( map ) );
bitset_stream_dequeue( map, NULL ); // ON
bitset_stream_dequeue( map, &result ); // SET
@@ -397,7 +397,7 @@ START_TEST(test_bitset_stream_with_clear_range)
bitset_stream_on( map );
bitset_clear_range( map, 0, 32 );
ck_assert_int_eq( 2, map->stream->size );
ck_assert_int_eq( 2, bitset_stream_size( map ) );
bitset_stream_dequeue( map, NULL ); // ON
bitset_stream_dequeue( map, &result ); // UNSET
@@ -410,6 +410,47 @@ START_TEST(test_bitset_stream_with_clear_range)
}
END_TEST
START_TEST(test_bitset_stream_size)
{
struct bitset_mapping *map = bitset_alloc( 64, 1 );
bitset_stream_on( map );
bitset_set_range( map, 0, 32 );
bitset_set_range( map, 16, 32 );
bitset_set_range( map, 7, 16 );
bitset_clear_range( map, 0, 32 );
bitset_clear_range( map, 16, 32 );
bitset_clear_range( map, 48, 16 );
bitset_stream_off( map );
ck_assert_int_eq( 8, bitset_stream_size( map ) );
bitset_free( map );
}
END_TEST
START_TEST(test_bitset_stream_queued_bytes)
{
struct bitset_mapping *map = bitset_alloc( 64, 1 );
bitset_stream_on( map );
bitset_set_range( map, 0, 32 );
bitset_set_range( map, 16, 32 );
bitset_set_range( map, 7, 16 );
bitset_clear_range( map, 0, 32 );
bitset_clear_range( map, 16, 32 );
bitset_clear_range( map, 48, 16 );
bitset_clear_range( map, 0, 2 );
bitset_stream_off( map );
ck_assert_int_eq( 64, bitset_stream_queued_bytes( map, BITSET_STREAM_ON ) );
ck_assert_int_eq( 80, bitset_stream_queued_bytes( map, BITSET_STREAM_SET ) );
ck_assert_int_eq( 82, bitset_stream_queued_bytes( map, BITSET_STREAM_UNSET ) );
ck_assert_int_eq( 64, bitset_stream_queued_bytes( map, BITSET_STREAM_OFF ) );
bitset_free( map );
}
END_TEST
Suite* bitset_suite(void)
{
Suite *s = suite_create("bitset");
@@ -439,6 +480,8 @@ Suite* bitset_suite(void)
tcase_add_test(tc_bitset_stream, test_bitset_stream_off);
tcase_add_test(tc_bitset_stream, test_bitset_stream_with_set_range);
tcase_add_test(tc_bitset_stream, test_bitset_stream_with_clear_range);
tcase_add_test(tc_bitset_stream, test_bitset_stream_size);
tcase_add_test(tc_bitset_stream, test_bitset_stream_queued_bytes);
suite_add_tcase(s, tc_bitset_stream);
return s;