diff options
| author | daoge_cmd <3523206925@qq.com> | 2026-03-01 12:16:08 +0800 |
|---|---|---|
| committer | daoge_cmd <3523206925@qq.com> | 2026-03-01 12:16:08 +0800 |
| commit | b691c43c44ff180d10e7d4a9afc83b98551ff586 (patch) | |
| tree | 3e9849222cbc6ba49f2f1fc6e5fe7179632c7390 /Minecraft.World/ConsoleSaveFileInputStream.cpp | |
| parent | def8cb415354ac390b7e89052a50605285f1aca9 (diff) | |
Initial commit
Diffstat (limited to 'Minecraft.World/ConsoleSaveFileInputStream.cpp')
| -rw-r--r-- | Minecraft.World/ConsoleSaveFileInputStream.cpp | 134 |
1 files changed, 134 insertions, 0 deletions
diff --git a/Minecraft.World/ConsoleSaveFileInputStream.cpp b/Minecraft.World/ConsoleSaveFileInputStream.cpp new file mode 100644 index 00000000..93d49956 --- /dev/null +++ b/Minecraft.World/ConsoleSaveFileInputStream.cpp @@ -0,0 +1,134 @@ +#include "stdafx.h" + +#include "File.h" +#include "ConsoleSaveFile.h" +#include "ConsoleSaveFileInputStream.h" + +ConsoleSaveFileInputStream::ConsoleSaveFileInputStream(ConsoleSaveFile *saveFile, const ConsoleSavePath &file) +{ + m_saveFile = saveFile; + m_file = m_saveFile->createFile( file ); + + m_saveFile->setFilePointer( m_file, 0, NULL, FILE_BEGIN ); +} + +ConsoleSaveFileInputStream::ConsoleSaveFileInputStream(ConsoleSaveFile *saveFile, FileEntry *file) +{ + m_saveFile = saveFile; + m_file = file; + + m_saveFile->setFilePointer( m_file, 0, NULL, FILE_BEGIN ); +} + +//Reads a byte of data from this input stream. This method blocks if no input is yet available. +//Returns: +//the next byte of data, or -1 if the end of the file is reached. +int ConsoleSaveFileInputStream::read() +{ + byte byteRead = 0; + DWORD numberOfBytesRead; + + BOOL result = m_saveFile->readFile( + m_file, + &byteRead, // data buffer + 1, // number of bytes to read + &numberOfBytesRead // number of bytes read + ); + + if( result == 0 ) + { + // TODO 4J Stu - Some kind of error handling + return -1; + } + else if( numberOfBytesRead == 0 ) + { + // File pointer is past the end of the file + return -1; + } + + return byteRead; +} + +//Reads up to b.length bytes of data from this input stream into an array of bytes. This method blocks until some input is available. +//Parameters: +//b - the buffer into which the data is read. +//Returns: +//the total number of bytes read into the buffer, or -1 if there is no more data because the end of the file has been reached. +int ConsoleSaveFileInputStream::read(byteArray b) +{ + DWORD numberOfBytesRead; + + BOOL result = m_saveFile->readFile( + m_file, + &b.data, // data buffer + b.length, // number of bytes to read + &numberOfBytesRead // number of bytes read + ); + + if( result == 0 ) + { + // TODO 4J Stu - Some kind of error handling + return -1; + } + else if( numberOfBytesRead == 0 ) + { + // File pointer is past the end of the file + return -1; + } + + return numberOfBytesRead; +} + +//Reads up to len bytes of data from this input stream into an array of bytes. If len is not zero, the method blocks until some input +//is available; otherwise, no bytes are read and 0 is returned. +//Parameters: +//b - the buffer into which the data is read. +//off - the start offset in the destination array b +//len - the maximum number of bytes read. +//Returns: +//the total number of bytes read into the buffer, or -1 if there is no more data because the end of the file has been reached. +int ConsoleSaveFileInputStream::read(byteArray b, unsigned int offset, unsigned int length) +{ + // 4J Stu - We don't want to read any more than the array buffer can hold + assert( length <= ( b.length - offset ) ); + + DWORD numberOfBytesRead; + + BOOL result = m_saveFile->readFile( + m_file, + &b[offset], // data buffer + length, // number of bytes to read + &numberOfBytesRead // number of bytes read + ); + + if( result == 0 ) + { + // TODO 4J Stu - Some kind of error handling + return -1; + } + else if( numberOfBytesRead == 0 ) + { + // File pointer is past the end of the file + return -1; + } + + return numberOfBytesRead; +} + +//Closes this file input stream and releases any system resources associated with the stream. +//If this stream has an associated channel then the channel is closed as well. +void ConsoleSaveFileInputStream::close() +{ + if( m_saveFile != NULL ) + { + BOOL result = m_saveFile->closeHandle( m_file ); + + if( result == 0 ) + { + // TODO 4J Stu - Some kind of error handling + } + + // Stop the dtor from trying to close it again + m_saveFile = NULL; + } +} |
