17 FW_ASSERT(&this->m_delegate == reinterpret_cast<FileInterface*>(&this->m_handle_storage[0]));
21 FW_ASSERT(&this->m_delegate == reinterpret_cast<FileInterface*>(&this->m_handle_storage[0]));
29 : m_mode(other.m_mode),
33 m_delegate(*
FileInterface::getDelegate(m_handle_storage, &other.m_delegate)) {
34 FW_ASSERT(&this->m_delegate == reinterpret_cast<FileInterface*>(&this->m_handle_storage[0]));
39 this->m_mode = other.m_mode;
40 this->m_crc = other.m_crc;
47 return this->
open(filepath, requested_mode, OverwriteType::NO_OVERWRITE);
56 return this->
open(filepath, length, requested_mode, OverwriteType::NO_OVERWRITE);
63 FW_ASSERT(&this->m_delegate == reinterpret_cast<FileInterface*>(&this->m_handle_storage[0]));
66 FW_ASSERT(string_len < length, static_cast<FwAssertArgType>(string_len), static_cast<FwAssertArgType>(length));
67 FW_ASSERT(File::Mode::OPEN_NO_MODE < requested_mode && File::Mode::MAX_OPEN_MODE > requested_mode);
68 FW_ASSERT((0 <= this->m_mode) && (this->m_mode < Mode::MAX_OPEN_MODE));
69 FW_ASSERT((0 <= overwrite) && (overwrite < OverwriteType::MAX_OVERWRITE_TYPE));
72 return File::Status::INVALID_MODE;
74 File::Status status = this->m_delegate.
open(filepath, requested_mode, overwrite);
76 this->m_mode = requested_mode;
78 this->m_crc = File::INITIAL_CRC;
86 OverwriteType::NO_OVERWRITE);
94 FW_ASSERT(&this->m_delegate == reinterpret_cast<FileInterface*>(&this->m_handle_storage[0]));
95 FW_ASSERT(this->m_mode < Mode::MAX_OPEN_MODE);
96 FW_ASSERT((0 <= this->m_mode) && (this->m_mode < Mode::MAX_OPEN_MODE));
97 this->m_delegate.
close();
98 this->m_mode = Mode::OPEN_NO_MODE;
102 FW_ASSERT(&this->m_delegate == reinterpret_cast<const FileInterface*>(&this->m_handle_storage[0]));
103 FW_ASSERT((0 <= this->m_mode) && (this->m_mode < Mode::MAX_OPEN_MODE));
104 return this->m_mode != Mode::OPEN_NO_MODE;
108 FW_ASSERT(&this->m_delegate == reinterpret_cast<FileInterface*>(&this->m_handle_storage[0]));
109 FW_ASSERT((0 <= this->m_mode) && (this->m_mode < Mode::MAX_OPEN_MODE));
111 return File::Status::NOT_OPENED;
113 return this->m_delegate.
size(size_result);
117 FW_ASSERT(&this->m_delegate == reinterpret_cast<FileInterface*>(&this->m_handle_storage[0]));
118 FW_ASSERT((0 <= this->m_mode) && (this->m_mode < Mode::MAX_OPEN_MODE));
121 return File::Status::NOT_OPENED;
123 return this->m_delegate.
position(position_result);
127 FW_ASSERT(&this->m_delegate == reinterpret_cast<FileInterface*>(&this->m_handle_storage[0]));
128 FW_ASSERT((0 <= this->m_mode) && (this->m_mode < Mode::MAX_OPEN_MODE));
131 return File::Status::NOT_OPENED;
133 return File::Status::INVALID_MODE;
135 return this->m_delegate.
preallocate(offset, length);
139 FW_ASSERT(&this->m_delegate == reinterpret_cast<FileInterface*>(&this->m_handle_storage[0]));
140 FW_ASSERT((0 <= seekType) && (seekType < SeekType::MAX_SEEK_TYPE));
142 FW_ASSERT((seekType == File::SeekType::RELATIVE) || (offset >= 0));
143 FW_ASSERT((0 <= this->m_mode) && (this->m_mode < Mode::MAX_OPEN_MODE));
146 return File::Status::NOT_OPENED;
148 return this->m_delegate.
seek(offset, seekType);
154 if (static_cast<FwSizeType>(std::numeric_limits<FwSignedSizeType>::max()) >= offset) {
156 FW_ASSERT(static_cast<FwSignedSizeType>(offset) >= 0);
157 status = this->
seek(static_cast<FwSignedSizeType>(offset), File::SeekType::ABSOLUTE);
166 bool is_odd = (offset % 2) == 1;
167 status = this->
seek(half_offset, File::SeekType::ABSOLUTE);
169 status = this->
seek(half_offset, File::SeekType::RELATIVE);
172 status = this->
seek((is_odd) ? 1 : 0, File::SeekType::RELATIVE);
179 FW_ASSERT(&this->m_delegate == reinterpret_cast<FileInterface*>(&this->m_handle_storage[0]));
180 FW_ASSERT(this->m_mode < Mode::MAX_OPEN_MODE);
183 return File::Status::NOT_OPENED;
185 return File::Status::INVALID_MODE;
187 return this->m_delegate.
flush();
191 return this->
read(buffer,
size, WaitType::WAIT);
195 FW_ASSERT(&this->m_delegate == reinterpret_cast<FileInterface*>(&this->m_handle_storage[0]));
197 FW_ASSERT(this->m_mode < Mode::MAX_OPEN_MODE);
201 return File::Status::NOT_OPENED;
204 return File::Status::INVALID_MODE;
206 return this->m_delegate.
read(buffer,
size, wait);
210 return this->
write(buffer,
size, WaitType::WAIT);
214 FW_ASSERT(&this->m_delegate == reinterpret_cast<FileInterface*>(&this->m_handle_storage[0]));
216 FW_ASSERT(this->m_mode < Mode::MAX_OPEN_MODE);
220 return File::Status::NOT_OPENED;
223 return File::Status::INVALID_MODE;
225 return this->m_delegate.
write(buffer,
size, wait);
229 FW_ASSERT(&this->m_delegate == reinterpret_cast<FileInterface*>(&this->m_handle_storage[0]));
237 for (
FwSizeType i = 0; i < std::numeric_limits<FwSizeType>::max(); i++) {
255 status = File::Status::NOT_OPENED;
257 status = File::Status::INVALID_MODE;
260 status = this->
read(this->m_crc_buffer,
size, File::WaitType::NO_WAIT);
261 if (
OP_OK == status) {
263 this->m_crc =
static_cast<U32
>(
update_crc_32(this->m_crc, static_cast<CHAR>(this->m_crc_buffer[i])));
273 this->m_crc = File::INITIAL_CRC;
279 FW_ASSERT(&this->m_delegate == reinterpret_cast<FileInterface*>(&this->m_handle_storage[0]));
281 FW_ASSERT(this->m_mode < Mode::MAX_OPEN_MODE);
285 return File::Status::NOT_OPENED;
288 return File::Status::INVALID_MODE;
302 read = current_chunk_size;
303 status = this->
read(buffer + i,
read, wait);
315 if (buffer[j] ==
'\n') {
319 FW_ASSERT(std::numeric_limits<FwSizeType>::max() -
size >= original_location);
virtual Status open(const char *path, Mode mode, OverwriteType overwrite)=0
open file with supplied path and mode
Status incrementalCrc(FwSizeType &size)
calculate the CRC32 of the next section of data
base implementation of FileHandle
Status calculateCrc(U32 &crc)
calculate the CRC32 of the entire file
A catch-all for other errors. Have to look in implementation-specific code.
PlatformSizeType FwSizeType
File mode not yet selected.
Status preallocate(FwSizeType offset, FwSizeType length) override
pre-allocate file storage
Status position(FwSizeType &position_result) override
get file pointer position of the currently open file
Status seek_absolute(FwSizeType offset_unsigned)
seek the file pointer to the given offset absolutely with the full range
virtual void close()=0
close the file, if not opened then do nothing
Status size(FwSizeType &size_result) override
get size of currently open file
virtual const CHAR * toChar() const =0
Convert to a C-style char*.
PlatformSignedSizeType FwSignedSizeType
Os::FileInterface::Status open(const char *path, Mode mode)
open file with supplied path and mode
virtual FileHandle * getHandle()=0
returns the raw file handle
virtual ~FileInterface()=default
unsigned long update_crc_32(unsigned long crc, char c)
virtual Status size(FwSizeType &size_result)=0
get size of currently open file
virtual Status flush()=0
flush file contents to storage
virtual Status seek(FwSignedSizeType offset, SeekType seekType)=0
seek the file pointer to the given offset
Status seek(FwSignedSizeType offset, SeekType seekType) override
seek the file pointer to the given offset
FileHandle * getHandle() override
returns the raw file handle
void close() override
close the file, if not opened then do nothing
Status write(const U8 *buffer, FwSizeType &size)
write data to this file from the supplied buffer bounded by size
virtual SizeType getCapacity() const =0
Return the size of the buffer.
uint8_t U8
8-bit unsigned integer
Status read(U8 *buffer, FwSizeType &size)
read data from this file into supplied buffer bounded by size
Status flush() override
flush file contents to storage
static U32 min(const U32 a, const U32 b)
virtual Status write(const U8 *buffer, FwSizeType &size, WaitType wait)=0
read data from this file into supplied buffer bounded by size
Status readline(U8 *buffer, FwSizeType &size, WaitType wait)
read a line from the file using \n as the delimiter
Operation was successful.
A read-only abstract superclass for StringBase.
Status finalizeCrc(U32 &crc)
finalize and retrieve the CRC value
static FileInterface * getDelegate(FileHandleStorage &aligned_placement_new_memory, const FileInterface *to_copy=nullptr)
provide a pointer to a file delegate object
virtual Status preallocate(FwSizeType offset, FwSizeType length)=0
pre-allocate file storage
File & operator=(const File &other)
assignment operator that copies the internal representation
virtual Status position(FwSizeType &position_result)=0
get file pointer position of the currently open file
bool isOpen() const
determine if the file is open
virtual Status read(U8 *buffer, FwSizeType &size, WaitType wait)=0
read data from this file into supplied buffer bounded by size
FwSizeType string_length(const CHAR *source, FwSizeType buffer_size)
get the length of the source string