// Copyright (c) 2012-2022 Wojciech Figat. All rights reserved.
#pragma once
#include "Engine/Platform/Types.h"
#include "WriteStream.h"
///
/// Implementation of the stream that has access to the file and is optimized for fast writing to it.
///
///
class FLAXENGINE_API FileWriteStream : public WriteStream
{
private:
File* _file;
uint32 _virtualPosInBuffer;
byte _buffer[FILESTREAM_BUFFER_SIZE];
public:
NON_COPYABLE(FileWriteStream);
///
/// Init
///
/// File to write
FileWriteStream(File* file);
///
/// Destructor
///
~FileWriteStream();
public:
///
/// Gets the file handle.
///
/// File
FORCE_INLINE const File* GetFile() const
{
return _file;
}
///
/// Unlink file object passed via constructor
///
void Unlink();
public:
///
/// Open file to read data from it
///
/// Path to the file
/// Created file writer stream or null if cannot perform it
static FileWriteStream* Open(const StringView& path);
public:
// [WriteStream]
void Flush() final override;
void Close() final override;
uint32 GetLength() override;
uint32 GetPosition() override;
void SetPosition(uint32 seek) override;
void WriteBytes(const void* data, uint32 bytes) override;
};