diff --git a/modules/beast_core/files/beast_RandomAccessFile.cpp b/modules/beast_core/files/beast_RandomAccessFile.cpp index 8ca6843491..28c029cd8b 100644 --- a/modules/beast_core/files/beast_RandomAccessFile.cpp +++ b/modules/beast_core/files/beast_RandomAccessFile.cpp @@ -17,12 +17,9 @@ */ //============================================================================== -RandomAccessFile::RandomAccessFile (int bufferSizeToUse) noexcept +RandomAccessFile::RandomAccessFile () noexcept : fileHandle (nullptr) , currentPosition (0) - , bufferSize (bufferSizeToUse) - , bytesInBuffer (0) - , writeBuffer (bmax (bufferSizeToUse, 16)) // enforce minimum size of 16 { } @@ -42,7 +39,6 @@ void RandomAccessFile::close () { if (isOpen ()) { - flushBuffer (); nativeFlush (); nativeClose (); } @@ -52,8 +48,6 @@ Result RandomAccessFile::setPosition (FileOffset newPosition) { if (newPosition != currentPosition) { - flushBuffer (); - // VFALCO NOTE I dislike return from the middle but // Result::ok() is showing up in the profile // @@ -76,37 +70,10 @@ Result RandomAccessFile::write (const void* data, ByteCount numBytes, ByteCount* ByteCount amountWritten = 0; - if (bytesInBuffer + numBytes < bufferSize) - { - memcpy (writeBuffer + bytesInBuffer, data, numBytes); - bytesInBuffer += numBytes; - currentPosition += numBytes; - } - else - { - result = flushBuffer (); + result = nativeWrite (data, numBytes, &amountWritten); - if (result.wasOk ()) - { - if (numBytes < bufferSize) - { - bassert (bytesInBuffer == 0); - - memcpy (writeBuffer + bytesInBuffer, data, numBytes); - bytesInBuffer += numBytes; - currentPosition += numBytes; - } - else - { - ByteCount bytesWritten; - - result = nativeWrite (data, numBytes, &bytesWritten); - - if (result.wasOk ()) - currentPosition += bytesWritten; - } - } - } + if (result.wasOk ()) + currentPosition += amountWritten; if (pActualAmount != nullptr) *pActualAmount = amountWritten; @@ -126,27 +93,7 @@ Result RandomAccessFile::truncate () Result RandomAccessFile::flush () { - Result result = flushBuffer (); - - if (result.wasOk ()) - result = nativeFlush (); - - return result; -} - -Result RandomAccessFile::flushBuffer () -{ - bassert (isOpen ()); - - Result result (Result::ok ()); - - if (bytesInBuffer > 0) - { - result = nativeWrite (writeBuffer, bytesInBuffer); - bytesInBuffer = 0; - } - - return result; + return nativeFlush (); } //------------------------------------------------------------------------------ @@ -158,6 +105,11 @@ public: { } + enum + { + maxPayload = 8192 + }; + /* For this test we will create a file which consists of a fixed number of variable length records. Each record is numbered sequentially starting at 0. To calculate the position of each record we first build @@ -260,15 +212,13 @@ public: } // Perform the test at the given buffer size. - void testFile (int const numRecords, int const bufferSize) + void testFile (int const numRecords) { using namespace UnitTestUtilities; int const seedValue = 50; - beginTest (String ("numRecords=") + String (numRecords) + ", bufferSize=" + String (bufferSize)); - - int const maxPayload = bmax (1000, bufferSize * 2); + beginTest (String ("numRecords=") + String (numRecords)); // Calculate the path File const path (File::createTempFile ("RandomAccessFile")); @@ -281,7 +231,7 @@ public: { // Create the file - RandomAccessFile file (bufferSize); + RandomAccessFile file; result = file.open (path, RandomAccessFile::readWrite); expect (result.wasOk (), "Should be ok"); @@ -300,7 +250,7 @@ public: if (result.wasOk ()) { // Re-open the file in read only mode - RandomAccessFile file (bufferSize); + RandomAccessFile file; result = file.open (path, RandomAccessFile::readOnly); expect (result.wasOk (), "Should be ok"); @@ -313,11 +263,7 @@ public: void runTest () { - int const numRecords = 1000; - - testFile (numRecords, 0); - testFile (numRecords, 1000); - testFile (numRecords, 10000); + testFile (10000); } private: diff --git a/modules/beast_core/files/beast_RandomAccessFile.h b/modules/beast_core/files/beast_RandomAccessFile.h index f2eaca1ccf..2b7c9505c6 100644 --- a/modules/beast_core/files/beast_RandomAccessFile.h +++ b/modules/beast_core/files/beast_RandomAccessFile.h @@ -3,10 +3,6 @@ This file is part of Beast: https://github.com/vinniefalco/Beast Copyright 2013, Vinnie Falco - Portions of this file are from JUCE. - Copyright (c) 2013 - Raw Material Software Ltd. - Please visit http://www.juce.com - Permission to use, copy, modify, and/or distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. @@ -34,10 +30,6 @@ provided for obtaining an input or output stream which will work with the file. - Writes are batched using an internal buffer. The buffer is flushed when - it fills, the current position is manually changed, or the file - is closed. It is also possible to explicitly flush the buffer. - @note All files are opened in binary mode. No text newline conversions are performed. @@ -76,7 +68,7 @@ public: @see open, isOpen */ - explicit RandomAccessFile (int bufferSizeToUse = 16384) noexcept; + RandomAccessFile () noexcept; /** Destroy the file object. @@ -182,12 +174,11 @@ public: //============================================================================== private: - Result flushBuffer (); - // Some of these these methods are implemented natively on // the corresponding platform. // // See beast_posix_SharedCode.h and beast_win32_Files.cpp + // Result nativeOpen (File const& path, Mode mode); void nativeClose (); Result nativeSetPosition (FileOffset newPosition); @@ -200,45 +191,6 @@ private: File file; void* fileHandle; FileOffset currentPosition; - ByteCount const bufferSize; - ByteCount bytesInBuffer; - HeapBlock writeBuffer; -}; - -class BEAST_API RandomAccessFileInputStream : public InputStream -{ -public: - explicit RandomAccessFileInputStream (RandomAccessFile& file) : m_file (file) { } - - int64 getTotalLength() { return m_file.getFile ().getSize (); } - bool isExhausted() { return getPosition () == getTotalLength (); } - int read (void* destBuffer, int maxBytesToRead) - { - size_t actualBytes = 0; - m_file.read (destBuffer, maxBytesToRead, &actualBytes); - return actualBytes; - } - - int64 getPosition() { return m_file.getPosition (); } - bool setPosition (int64 newPosition) { return m_file.setPosition (newPosition); } - void skipNextBytes (int64 numBytesToSkip) { m_file.setPosition (getPosition () + numBytesToSkip); } - -private: - RandomAccessFile& m_file; -}; - -class BEAST_API RandomAccessFileOutputStream : public OutputStream -{ -public: - explicit RandomAccessFileOutputStream (RandomAccessFile& file) : m_file (file) { } - - void flush() { m_file.flush (); } - int64 getPosition() { return m_file.getPosition (); } - bool setPosition (int64 newPosition) { return m_file.setPosition (newPosition); } - bool write (const void* dataToWrite, size_t numberOfBytes) { return m_file.write (dataToWrite, numberOfBytes); } - -private: - RandomAccessFile& m_file; }; #endif