From 4bf1ad2566bc65255a624ef109b1da0aaaa18b93 Mon Sep 17 00:00:00 2001 From: rparanjpe Date: Fri, 11 Dec 2015 15:18:55 -0800 Subject: [PATCH] Write out stxxl vector for names correctly --- extractor/extraction_containers.cpp | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) diff --git a/extractor/extraction_containers.cpp b/extractor/extraction_containers.cpp index 52afdf36d..5be2c003e 100644 --- a/extractor/extraction_containers.cpp +++ b/extractor/extraction_containers.cpp @@ -51,6 +51,8 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #include #include +static const int WRITE_BLOCK_BUFFER_SIZE = 8000; + ExtractionContainers::ExtractionContainers() { // Check if stxxl can be instantiated @@ -130,8 +132,23 @@ void ExtractionContainers::WriteNames(const std::string& names_file_name) const name_file_stream.write((char *)&total_length, sizeof(unsigned)); + // write all chars consecutively - name_file_stream.write((const char *)&name_char_data[0], name_char_data.size()); + char write_buffer[WRITE_BLOCK_BUFFER_SIZE]; + unsigned buffer_len = 0; + + for (const char &c : name_char_data) + { + write_buffer[buffer_len++] = c; + + if (buffer_len >= WRITE_BLOCK_BUFFER_SIZE) + { + name_file_stream.write(write_buffer, WRITE_BLOCK_BUFFER_SIZE); + buffer_len = 0; + } + } + + name_file_stream.write(write_buffer, buffer_len); name_file_stream.close(); TIMER_STOP(write_name_index);