Commit bbab5a93 authored by Rémi Denis-Courmont's avatar Rémi Denis-Courmont

block_Bytestream: use block_Release() and simplify a little

parent 68dbf6ec
...@@ -28,10 +28,10 @@ ...@@ -28,10 +28,10 @@
typedef struct block_bytestream_t typedef struct block_bytestream_t
{ {
block_t *p_chain; block_t *p_chain; /**< byte stream head block */
block_t *p_block; block_t *p_block; /**< byte stream read pointer block */
size_t i_offset; size_t i_offset; /**< byte stream read pointer offset within block */
/* TODO? add tail pointer for faster push? */
} block_bytestream_t; } block_bytestream_t;
/***************************************************************************** /*****************************************************************************
...@@ -45,12 +45,12 @@ static inline void block_BytestreamInit( block_bytestream_t *p_bytestream ) ...@@ -45,12 +45,12 @@ static inline void block_BytestreamInit( block_bytestream_t *p_bytestream )
static inline void block_BytestreamRelease( block_bytestream_t *p_bytestream ) static inline void block_BytestreamRelease( block_bytestream_t *p_bytestream )
{ {
while( p_bytestream->p_chain ) for( block_t *block = p_bytestream->p_chain; block != NULL; )
{ {
block_t *p_next; block_t *p_next = block->p_next;
p_next = p_bytestream->p_chain->p_next;
p_bytestream->p_chain->pf_release( p_bytestream->p_chain ); block_Release( block );
p_bytestream->p_chain = p_next; block = p_next;
} }
} }
...@@ -68,22 +68,26 @@ static inline void block_BytestreamEmpty( block_bytestream_t *p_bytestream ) ...@@ -68,22 +68,26 @@ static inline void block_BytestreamEmpty( block_bytestream_t *p_bytestream )
*/ */
static inline void block_BytestreamFlush( block_bytestream_t *p_bytestream ) static inline void block_BytestreamFlush( block_bytestream_t *p_bytestream )
{ {
while( p_bytestream->p_chain != p_bytestream->p_block ) block_t *block = p_bytestream->p_chain;
while( block != p_bytestream->p_block )
{ {
block_t *p_next; block_t *p_next = block->p_next;
p_next = p_bytestream->p_chain->p_next;
p_bytestream->p_chain->pf_release( p_bytestream->p_chain ); block_Release( block );
p_bytestream->p_chain = p_next; block = p_next;
} }
while( p_bytestream->p_block &&
(p_bytestream->p_block->i_buffer - p_bytestream->i_offset) == 0 ) while( block != NULL && block->i_buffer == p_bytestream->i_offset )
{ {
block_t *p_next; block_t *p_next = block->p_next;
p_next = p_bytestream->p_chain->p_next;
p_bytestream->p_chain->pf_release( p_bytestream->p_chain ); block_Release( block );
p_bytestream->p_chain = p_bytestream->p_block = p_next; block = p_next;
p_bytestream->i_offset = 0; p_bytestream->i_offset = 0;
} }
p_bytestream->p_chain = p_bytestream->p_block = block;
} }
static inline void block_BytestreamPush( block_bytestream_t *p_bytestream, static inline void block_BytestreamPush( block_bytestream_t *p_bytestream,
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment