You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
o3de/Gems/EMotionFX/Code/MCore/Source/File.h

120 lines
4.1 KiB
C++

/*
* Copyright (c) Contributors to the Open 3D Engine Project.
* For complete copyright and license terms please see the LICENSE at the root of this distribution.
*
* SPDX-License-Identifier: Apache-2.0 OR MIT
*
*/
#pragma once
// include the core headers
#include "StandardHeaders.h"
#include "Stream.h"
namespace MCore
{
/**
* The file abstract base class.
* This class represents some file from which the user can read, write, etc.
* Do not just think of this as only a file on disk. A file could be virtually anything from which can be read and
* to which can be written. Like a stream, but with more functionalities. For example the file could also be a
* specified section in your systems main memory. Another example could be the file being some sort of network stream.
*/
class MCORE_API File
: public Stream
{
public:
/**
* The constructor.
*/
File()
: Stream() {}
/**
* The destructor.
*/
virtual ~File() {}
/**
* Close the file.
*/
virtual void Close() = 0;
/**
* Flush the file. All cached (not yet written) data will be forced to written when calling this method.
*/
virtual void Flush() = 0;
/**
* Check if we reached the end of the file or not.
* @result Returns true when we have returned the end of the file. Otherwise false is returned.
*/
virtual bool GetIsEOF() const = 0;
/**
* Reads and returns the next byte/character in the file. So this will increase the position in the file with one.
* @result The character or byte read.
*/
virtual uint8 GetNextByte() = 0;
/**
* Returns the position in the file.
* @result The offset in the file in bytes.
*/
virtual size_t GetPos() const = 0;
/**
* Returns the size of this file in bytes.
* @result The filesize in bytes.
*/
virtual size_t GetFileSize() const = 0;
/**
* Write a character or byte in the file.
* @param value The character or byte to write.
* @result Returns true when successfully written, otherwise false is returned.
*/
virtual bool WriteByte(uint8 value) = 0;
/**
* Seek ahead a given number of bytes. This can be used to skip a given number of upcoming bytes in the file.
* @param numBytes The number of bytes to seek ahead.
* @result Returns true when succeeded or false when an error occured (for example when we where trying to read past the end of the file).
*/
virtual bool Forward(size_t numBytes) = 0;
/**
* Seek to a given byte position in the file, where 0 would be the beginning of the file.
* So we're talking about the absolute position in the file. After successfully executing this method
* the method GetPos will return the given offset.
* @param offset The offset in bytes (the position) in the file to seek to.
* @result Returns true when successfully moved to the given position in the file, otherwise false.
*/
virtual bool Seek(size_t offset) = 0;
/**
* Read a given amount of data from the file.
* @param data The pointer where to store the read data.
* @param length The size in bytes of the data to read.
* @result Returns the number of read bytes.
*/
virtual size_t Read(void* data, size_t length) = 0;
/**
* Writes a given amount of data to the file.
* @param data The pointer to the data to write.
* @param length The size in bytes of the data to write.
* @result Returns the number of written bytes.
*/
virtual size_t Write(const void* data, size_t length) = 0;
/**
* Check if the file has been opened already.
* @result Returns true when the file has been opened, otherwise false.
*/
virtual bool GetIsOpen() const = 0;
};
} // namespace MCore