diff options
author | Bartosz Taudul <wolf.pld@gmail.com> | 2018-03-17 15:57:32 +0300 |
---|---|---|
committer | Bartosz Taudul <wolf.pld@gmail.com> | 2018-03-17 15:57:32 +0300 |
commit | 41d8ca0814b7637cd62e892f476cdc4a020f4b2b (patch) | |
tree | 478f6343aebaf842984743a08f8f962c06bf7dfb /server/TracyFileRead.hpp | |
parent | 79418d0c57e6e437001da560cc276b2ed410d92a (diff) |
Split read/write functions into small and big variants.
Diffstat (limited to 'server/TracyFileRead.hpp')
-rw-r--r-- | server/TracyFileRead.hpp | 52 |
1 files changed, 31 insertions, 21 deletions
diff --git a/server/TracyFileRead.hpp b/server/TracyFileRead.hpp index 8ab600bd..2002f899 100644 --- a/server/TracyFileRead.hpp +++ b/server/TracyFileRead.hpp @@ -30,30 +30,11 @@ public: { if( size <= BufSize - m_offset ) { - memcpy( ptr, m_buf[m_active] + m_offset, size ); - m_offset += size; + ReadSmall( ptr, size ); } else { - auto dst = (char*)ptr; - while( size > 0 ) - { - if( m_offset == BufSize ) - { - m_active = 1 - m_active; - m_offset = 0; - uint32_t sz; - fread( &sz, 1, sizeof( sz ), m_file ); - fread( m_lz4buf, 1, sz, m_file ); - LZ4_decompress_safe_continue( m_stream, m_lz4buf, m_buf[m_active], sz, BufSize ); - } - - const auto sz = std::min( size, BufSize - m_offset ); - memcpy( dst, m_buf[m_active] + m_offset, sz ); - m_offset += sz; - dst += sz; - size -= sz; - } + ReadBig( ptr, size ); } } @@ -65,6 +46,35 @@ private: , m_active( 1 ) {} + tracy_force_inline void ReadSmall( void* ptr, size_t size ) + { + memcpy( ptr, m_buf[m_active] + m_offset, size ); + m_offset += size; + } + + void ReadBig( void* ptr, size_t size ) + { + auto dst = (char*)ptr; + while( size > 0 ) + { + if( m_offset == BufSize ) + { + m_active = 1 - m_active; + m_offset = 0; + uint32_t sz; + fread( &sz, 1, sizeof( sz ), m_file ); + fread( m_lz4buf, 1, sz, m_file ); + LZ4_decompress_safe_continue( m_stream, m_lz4buf, m_buf[m_active], sz, BufSize ); + } + + const auto sz = std::min( size, BufSize - m_offset ); + memcpy( dst, m_buf[m_active] + m_offset, sz ); + m_offset += sz; + dst += sz; + size -= sz; + } + } + enum { BufSize = 64 * 1024 }; enum { LZ4Size = LZ4_COMPRESSBOUND( BufSize ) }; |