diff options
author | Bartosz Taudul <wolf.pld@gmail.com> | 2017-09-30 19:43:39 +0300 |
---|---|---|
committer | Bartosz Taudul <wolf.pld@gmail.com> | 2017-09-30 19:43:57 +0300 |
commit | ddf2453ccae88b63d8364719ac1e58065cf4cbf0 (patch) | |
tree | 5506bba7f0cb4ece617fa51de0de7052630a904e /server/TracyFileRead.hpp | |
parent | 1c29367a5464e17d7ddc5f360fb3bf3c3e75df25 (diff) |
Buffer reads.
Diffstat (limited to 'server/TracyFileRead.hpp')
-rwxr-xr-x | server/TracyFileRead.hpp | 28 |
1 files changed, 25 insertions, 3 deletions
diff --git a/server/TracyFileRead.hpp b/server/TracyFileRead.hpp index c777c037..b7758a27 100755 --- a/server/TracyFileRead.hpp +++ b/server/TracyFileRead.hpp @@ -1,6 +1,7 @@ #ifndef __TRACYFILEREAD_HPP__ #define __TRACYFILEREAD_HPP__ +#include <algorithm> #include <stdio.h> namespace tracy @@ -20,15 +21,36 @@ public: fclose( m_file ); } - size_t Read( void* ptr, size_t size ) + void Read( void* ptr, size_t size ) { - return fread( ptr, 1, size, m_file ); + auto dst = (char*)ptr; + while( size > 0 ) + { + if( m_offset == BufSize ) + { + fread( m_buf, 1, BufSize, m_file ); + m_offset = 0; + } + + const auto sz = std::min( size, BufSize - m_offset ); + memcpy( dst, m_buf + m_offset, sz ); + m_offset += sz; + dst += sz; + size -= sz; + } } private: - FileRead( FILE* f ) : m_file( f ) {} + FileRead( FILE* f ) + : m_file( f ) + , m_offset( BufSize ) + {} + + enum { BufSize = 64 * 1024 }; FILE* m_file; + char m_buf[BufSize]; + size_t m_offset; }; } |