io changes
parent
09d1a82268
commit
78c219cc67
|
@ -1,6 +1,6 @@
|
||||||
cmake_minimum_required(VERSION 3.20)
|
cmake_minimum_required(VERSION 3.20)
|
||||||
include(cmake/color.cmake)
|
include(cmake/color.cmake)
|
||||||
set(BLT_VERSION 5.2.40)
|
set(BLT_VERSION 5.2.41)
|
||||||
|
|
||||||
set(BLT_TARGET BLT)
|
set(BLT_TARGET BLT)
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,56 @@
|
||||||
|
#pragma once
|
||||||
|
/*
|
||||||
|
* Copyright (C) 2024 Brett Terpstra
|
||||||
|
*
|
||||||
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 3 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef BLT_FS_CSTDIO_WRAPPERS_H
|
||||||
|
#define BLT_FS_CSTDIO_WRAPPERS_H
|
||||||
|
|
||||||
|
#include <blt/fs/fwddecl.h>
|
||||||
|
|
||||||
|
namespace blt::fs
|
||||||
|
{
|
||||||
|
class file_reader_t final : public reader_t
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
explicit file_reader_t(void* file): m_file(file)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
i64 read(char* buffer, size_t bytes) override;
|
||||||
|
|
||||||
|
private:
|
||||||
|
void* m_file;
|
||||||
|
};
|
||||||
|
|
||||||
|
class file_writer_t final : public writer_t
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
explicit file_writer_t(void* file): m_file(file)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
i64 write(const char* buffer, size_t bytes) override;
|
||||||
|
|
||||||
|
i64 tell() override;
|
||||||
|
|
||||||
|
void seek(i64 offset, seek_origin origin = seek_origin::seek_set) override;
|
||||||
|
private:
|
||||||
|
void* m_file;
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif //BLT_FS_CSTDIO_WRAPPERS_H
|
|
@ -57,6 +57,16 @@ namespace blt::fs
|
||||||
class writer_t
|
class writer_t
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
|
enum class seek_origin
|
||||||
|
{
|
||||||
|
// Seek from current position
|
||||||
|
seek_cur = SEEK_CUR,
|
||||||
|
// Seek from end of file. Not valid on binary streams
|
||||||
|
seek_end = SEEK_END,
|
||||||
|
// Seek from start of file
|
||||||
|
seek_set = SEEK_SET
|
||||||
|
};
|
||||||
|
|
||||||
virtual ~writer_t() = default;
|
virtual ~writer_t() = default;
|
||||||
explicit writer_t() = default;
|
explicit writer_t() = default;
|
||||||
|
|
||||||
|
@ -71,6 +81,15 @@ namespace blt::fs
|
||||||
*/
|
*/
|
||||||
virtual i64 write(const char* buffer, size_t bytes) = 0;
|
virtual i64 write(const char* buffer, size_t bytes) = 0;
|
||||||
|
|
||||||
|
virtual i64 tell()
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
virtual void seek(i64 offset, seek_origin origin = seek_origin::seek_set)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
i64 write(const void* buffer, const size_t bytes)
|
i64 write(const void* buffer, const size_t bytes)
|
||||||
{
|
{
|
||||||
return this->write(static_cast<const char*>(buffer), bytes);
|
return this->write(static_cast<const char*>(buffer), bytes);
|
||||||
|
|
|
@ -33,10 +33,6 @@ namespace blt::fs
|
||||||
public:
|
public:
|
||||||
explicit fstream_reader_t(std::istream& stream);
|
explicit fstream_reader_t(std::istream& stream);
|
||||||
|
|
||||||
explicit fstream_reader_t(fstream_reader_t& copy) = delete;
|
|
||||||
|
|
||||||
fstream_reader_t& operator=(const fstream_reader_t& copy) = delete;
|
|
||||||
|
|
||||||
i64 read(char* buffer, size_t bytes) override;
|
i64 read(char* buffer, size_t bytes) override;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
@ -48,14 +44,14 @@ namespace blt::fs
|
||||||
public:
|
public:
|
||||||
explicit fstream_writer_t(std::ostream& stream);
|
explicit fstream_writer_t(std::ostream& stream);
|
||||||
|
|
||||||
explicit fstream_writer_t(fstream_writer_t& copy) = delete;
|
|
||||||
|
|
||||||
fstream_writer_t& operator=(const fstream_writer_t& copy) = delete;
|
|
||||||
|
|
||||||
i64 write(const char* buffer, size_t bytes) override;
|
i64 write(const char* buffer, size_t bytes) override;
|
||||||
|
|
||||||
void flush() override;
|
void flush() override;
|
||||||
|
|
||||||
|
i64 tell() override;
|
||||||
|
|
||||||
|
void seek(i64 offset, seek_origin origin = seek_origin::seek_set) override;
|
||||||
|
|
||||||
virtual ~fstream_writer_t() override // NOLINT
|
virtual ~fstream_writer_t() override // NOLINT
|
||||||
{
|
{
|
||||||
flush();
|
flush();
|
||||||
|
|
|
@ -0,0 +1,42 @@
|
||||||
|
/*
|
||||||
|
* <Short Description>
|
||||||
|
* Copyright (C) 2025 Brett Terpstra
|
||||||
|
*
|
||||||
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 3 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
#include <cstdio>
|
||||||
|
#include <blt/fs/cstdio_wrappers.h>
|
||||||
|
|
||||||
|
namespace blt::fs
|
||||||
|
{
|
||||||
|
i64 file_reader_t::read(char* buffer, const size_t bytes)
|
||||||
|
{
|
||||||
|
return fread(buffer, bytes, 1, static_cast<FILE*>(m_file));
|
||||||
|
}
|
||||||
|
|
||||||
|
i64 file_writer_t::write(const char* buffer, const size_t bytes)
|
||||||
|
{
|
||||||
|
return fwrite(buffer, bytes, 1, static_cast<FILE*>(m_file));
|
||||||
|
}
|
||||||
|
|
||||||
|
i64 file_writer_t::tell()
|
||||||
|
{
|
||||||
|
return ftell(static_cast<FILE*>(m_file));
|
||||||
|
}
|
||||||
|
|
||||||
|
void file_writer_t::seek(const i64 offset, const seek_origin origin)
|
||||||
|
{
|
||||||
|
fseek(static_cast<FILE*>(m_file), offset, static_cast<int>(origin));
|
||||||
|
}
|
||||||
|
}
|
|
@ -42,4 +42,25 @@ namespace blt::fs
|
||||||
{
|
{
|
||||||
m_stream->flush();
|
m_stream->flush();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
i64 fstream_writer_t::tell()
|
||||||
|
{
|
||||||
|
return m_stream->tellp();
|
||||||
|
}
|
||||||
|
|
||||||
|
void fstream_writer_t::seek(const i64 offset, const seek_origin origin)
|
||||||
|
{
|
||||||
|
switch (origin)
|
||||||
|
{
|
||||||
|
case seek_origin::seek_cur:
|
||||||
|
m_stream->seekp(offset, std::ios_base::cur);
|
||||||
|
break;
|
||||||
|
case seek_origin::seek_end:
|
||||||
|
m_stream->seekp(offset, std::ios_base::end);
|
||||||
|
break;
|
||||||
|
case seek_origin::seek_set:
|
||||||
|
m_stream->seekp(offset, std::ios_base::beg);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue