aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.gitpod.yml1
-rw-r--r--include/cru/common/io/OpenFileFlag.hpp18
-rw-r--r--include/cru/platform/UnixFileStream.hpp20
-rw-r--r--src/platform/CMakeLists.txt8
-rw-r--r--src/platform/UnixFileStream.cpp3
5 files changed, 50 insertions, 0 deletions
diff --git a/.gitpod.yml b/.gitpod.yml
index 93729dff..90a88a72 100644
--- a/.gitpod.yml
+++ b/.gitpod.yml
@@ -12,3 +12,4 @@ vscode:
extensions:
- "llvm-vs-code-extensions.vscode-clangd"
- "wayou.vscode-todo-highlight"
+ - "editorconfig.editorconfig"
diff --git a/include/cru/common/io/OpenFileFlag.hpp b/include/cru/common/io/OpenFileFlag.hpp
new file mode 100644
index 00000000..3319bb4f
--- /dev/null
+++ b/include/cru/common/io/OpenFileFlag.hpp
@@ -0,0 +1,18 @@
+#pragma once
+
+#include "../Bitmask.hpp"
+
+namespace cru::io {
+namespace details {
+struct OpenFileFlagTag {};
+} // namespace details
+using OpenFileFlag = Bitmask<details::OpenFileFlagTag>;
+
+struct OpenFileFlags {
+ static constexpr OpenFileFlag Read{0x1};
+ static constexpr OpenFileFlag Write{0x2};
+ static constexpr OpenFileFlag Append{0x4};
+ static constexpr OpenFileFlag Create{0x8};
+ static constexpr OpenFileFlag ThrowOnExist{0x10};
+};
+} // namespace cru::io
diff --git a/include/cru/platform/UnixFileStream.hpp b/include/cru/platform/UnixFileStream.hpp
new file mode 100644
index 00000000..612a08f0
--- /dev/null
+++ b/include/cru/platform/UnixFileStream.hpp
@@ -0,0 +1,20 @@
+#pragma once
+
+#include "cru/common/String.hpp"
+#include "cru/common/io/OpenFileFlag.hpp"
+#include "cru/common/io/Stream.hpp"
+
+namespace cru::platform {
+class UnixFileStream : public io::Stream {
+ public:
+ UnixFileStream(String path, io::OpenFileFlag flags);
+ UnixFileStream(int file_descriptor, bool auto_close);
+
+ CRU_DELETE_COPY(UnixFileStream)
+ CRU_DELETE_MOVE(UnixFileStream)
+
+ ~UnixFileStream() override;
+
+ private:
+};
+} // namespace cru::platform
diff --git a/src/platform/CMakeLists.txt b/src/platform/CMakeLists.txt
index 466b6900..2d12ce86 100644
--- a/src/platform/CMakeLists.txt
+++ b/src/platform/CMakeLists.txt
@@ -15,6 +15,14 @@ target_sources(cru_platform_base PUBLIC
target_link_libraries(cru_platform_base PUBLIC cru_base)
target_compile_definitions(cru_platform_base PRIVATE CRU_PLATFORM_EXPORT_API)
+if (UNIX)
+target_sources(cru_platform_base PRIVATE
+ UnixFileStream.cpp
+PUBLIC
+ ${CRU_PLATFORM_BASE_INCLUDE_DIR}/UnixFileStream.hpp
+)
+endif()
+
add_subdirectory(filesystem)
add_subdirectory(graphics)
add_subdirectory(gui)
diff --git a/src/platform/UnixFileStream.cpp b/src/platform/UnixFileStream.cpp
new file mode 100644
index 00000000..d4745980
--- /dev/null
+++ b/src/platform/UnixFileStream.cpp
@@ -0,0 +1,3 @@
+#include "cru/platform/UnixFileStream.hpp"
+
+