From 079d519e96c163a4ad91d1b15ee1959f1147c630 Mon Sep 17 00:00:00 2001 From: Bechir Braham Date: Tue, 13 Feb 2024 18:30:46 +0100 Subject: [PATCH] saving work --- .vscode/c_cpp_properties.json | 17 ++++++ .vscode/settings.json | 57 +++++++++++++++++++ CMakeLists.txt | 11 ++-- src/CMakeLists.txt | 4 +- src/core/CMakeLists.txt | 1 + src/core/Frame.cpp | 3 + src/core/Frame.hpp | 24 ++++++++ src/core/include/defs.hpp | 13 +++++ src/file_io/CMakeLists.txt | 8 +++ .../CMakeLists.txt => file_io/File.cpp} | 0 src/file_io/File.hpp | 29 ++++++++++ src/file_io/FileFactory.cpp | 31 ++++++++++ src/file_io/FileFactory.hpp | 12 ++++ src/file_io/JsonFileFactory.hpp | 10 ++++ src/file_io/RawFileFactory.cpp | 0 src/file_io/RawFileFactory.hpp | 9 +++ src/main.cpp | 8 ++- 17 files changed, 226 insertions(+), 11 deletions(-) create mode 100644 .vscode/c_cpp_properties.json create mode 100644 .vscode/settings.json create mode 100644 src/core/CMakeLists.txt create mode 100644 src/core/Frame.cpp create mode 100644 src/core/Frame.hpp create mode 100644 src/core/include/defs.hpp rename src/{models/CMakeLists.txt => file_io/File.cpp} (100%) create mode 100644 src/file_io/File.hpp create mode 100644 src/file_io/FileFactory.cpp create mode 100644 src/file_io/FileFactory.hpp create mode 100644 src/file_io/JsonFileFactory.hpp create mode 100644 src/file_io/RawFileFactory.cpp create mode 100644 src/file_io/RawFileFactory.hpp diff --git a/.vscode/c_cpp_properties.json b/.vscode/c_cpp_properties.json new file mode 100644 index 0000000..4912fde --- /dev/null +++ b/.vscode/c_cpp_properties.json @@ -0,0 +1,17 @@ +{ + "configurations": [ + { + "name": "Linux", + "includePath": [ + "${workspaceFolder}/**" + ], + "defines": [], + "compilerPath": "/usr/bin/clang", + "cStandard": "c17", + "cppStandard": "c++17", + "intelliSenseMode": "linux-clang-x64", + "configurationProvider": "ms-vscode.cmake-tools" + } + ], + "version": 4 +} \ No newline at end of file diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 0000000..052b81c --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,57 @@ +{ + "cmake.configureOnOpen": true, + "files.associations": { + "stdexcept": "cpp", + "cstddef": "cpp", + "cctype": "cpp", + "clocale": "cpp", + "cmath": "cpp", + "cstdarg": "cpp", + "cstdio": "cpp", + "cstdlib": "cpp", + "ctime": "cpp", + "cwchar": "cpp", + "cwctype": "cpp", + "array": "cpp", + "atomic": "cpp", + "bit": "cpp", + "*.tcc": "cpp", + "codecvt": "cpp", + "compare": "cpp", + "concepts": "cpp", + "cstdint": "cpp", + "deque": "cpp", + "string": "cpp", + "unordered_map": "cpp", + "vector": "cpp", + "exception": "cpp", + "algorithm": "cpp", + "functional": "cpp", + "iterator": "cpp", + "memory": "cpp", + "memory_resource": "cpp", + "numeric": "cpp", + "optional": "cpp", + "random": "cpp", + "ratio": "cpp", + "string_view": "cpp", + "system_error": "cpp", + "tuple": "cpp", + "type_traits": "cpp", + "utility": "cpp", + "initializer_list": "cpp", + "iomanip": "cpp", + "iosfwd": "cpp", + "iostream": "cpp", + "istream": "cpp", + "limits": "cpp", + "new": "cpp", + "numbers": "cpp", + "ostream": "cpp", + "sstream": "cpp", + "streambuf": "cpp", + "cinttypes": "cpp", + "typeinfo": "cpp", + "filesystem": "cpp" + } +} \ No newline at end of file diff --git a/CMakeLists.txt b/CMakeLists.txt index fc2a3da..d60fe21 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -19,7 +19,7 @@ if (CMAKE_BUILD_TYPE STREQUAL "Debug") set(OPTIMIZATION_FLAGS "-Og -ggdb3") else() set(OPTIMIZATION_FLAGS "-O3") - +endif() set(CMAKE_EXPORT_COMPILE_COMMANDS ON) option(USE_SANITIZER "Sanitizers for debugging" ON) @@ -41,9 +41,7 @@ if(DISABLE_WARNINGS) endif() if(USE_SANITIZER) - set(OPTIONAL_FLAGS "${OPTIONAL_FLAGS} -fdiagnostics-parseable-fixits -fdiagnostics-generate-patch - -fdiagnostics-show-template-tree -fsanitize=address,undefined -fno-sanitize-recover - -D_FORTIFY_SOURCE=2 -fstack-protector") + set(OPTIONAL_FLAGS "${OPTIONAL_FLAGS} -fdiagnostics-parseable-fixits -fdiagnostics-generate-patch -fdiagnostics-show-template-tree -fsanitize=address,undefined,pointer-compare -fno-sanitize-recover -D_FORTIFY_SOURCE=2 -fstack-protector -fno-omit-frame-pointer ") endif() # if(TUNE_LOCAL) @@ -58,8 +56,6 @@ endif() # # # endif() -if -set(CMAKE_CXX_FLAGS "") #Enable LTO if available @@ -71,6 +67,9 @@ else() message(STATUS "Building without link time optimization") endif() + +set(CMAKE_CXX_FLAGS "${OPTIONAL_FLAGS} ${OPTIMIZATION_FLAGS}") + add_executable(aare) add_subdirectory(src) diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index eb3e5ab..4c44806 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -1,6 +1,6 @@ add_subdirectory(file_io) -add_subdirectory(models) +add_subdirectory(core) add_subdirectory(processing) target_include_directories(aare PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}) -target_sources(aare PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/main.cpp) \ No newline at end of file +target_sources(aare PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/main.cpp) \ No newline at end of file diff --git a/src/core/CMakeLists.txt b/src/core/CMakeLists.txt new file mode 100644 index 0000000..8d6dc2d --- /dev/null +++ b/src/core/CMakeLists.txt @@ -0,0 +1 @@ +target_include_directories(aare PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/include) diff --git a/src/core/Frame.cpp b/src/core/Frame.cpp new file mode 100644 index 0000000..62b2b48 --- /dev/null +++ b/src/core/Frame.cpp @@ -0,0 +1,3 @@ +#include "Frame.hpp" + +ssize_t Frame::cols() const { return ssize_t(); } \ No newline at end of file diff --git a/src/core/Frame.hpp b/src/core/Frame.hpp new file mode 100644 index 0000000..65c6e8f --- /dev/null +++ b/src/core/Frame.hpp @@ -0,0 +1,24 @@ +#include +#include +#include +#include +#include +#include "defs.hpp" + +class Frame{ + + ssize_t nrows{}; + ssize_t ncols{}; + uint8_t bitdepth_{}; + std::unique_ptr data_{nullptr}; +public: + ssize_t rows() const; + ssize_t cols() const; + image_shape shape() const; + uint8_t bits_per_pixel() const; + uint8_t bytes_per_pixel() const; + size_t total_bytes() const; + + + +}; \ No newline at end of file diff --git a/src/core/include/defs.hpp b/src/core/include/defs.hpp new file mode 100644 index 0000000..14218ab --- /dev/null +++ b/src/core/include/defs.hpp @@ -0,0 +1,13 @@ +#include +#include +#include + + + + +using image_shape = std::array; +using dynamic_shape = std::vector; + +enum class DetectorType { Jungfrau, Eiger, Mythen3, Moench }; + +enum class TimingMode {Auto, Trigger}; \ No newline at end of file diff --git a/src/file_io/CMakeLists.txt b/src/file_io/CMakeLists.txt index e69de29..5fab7d8 100644 --- a/src/file_io/CMakeLists.txt +++ b/src/file_io/CMakeLists.txt @@ -0,0 +1,8 @@ +target_include_directories(aare PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}) +set(FILE_IO_SOURCES "File.cpp" "FileFactory.cpp" "RawFileFactory.cpp") +# append ${CMAKE_CURRENT_SOURCE_DIR} to the list of sources using for loop +foreach(FILE_IO_SOURCE ${FILE_IO_SOURCES}) + list(APPEND FILE_IO_SOURCES_WITH_PATH "${CMAKE_CURRENT_SOURCE_DIR}/${FILE_IO_SOURCE}") +endforeach() + +target_sources(aare PRIVATE ${FILE_IO_SOURCES_WITH_PATH}) \ No newline at end of file diff --git a/src/models/CMakeLists.txt b/src/file_io/File.cpp similarity index 100% rename from src/models/CMakeLists.txt rename to src/file_io/File.cpp diff --git a/src/file_io/File.hpp b/src/file_io/File.hpp new file mode 100644 index 0000000..8bbaf5c --- /dev/null +++ b/src/file_io/File.hpp @@ -0,0 +1,29 @@ +#pragma once + +#include +#include "defs.hpp" + +class File +{ +private: + // std::unique_ptr fp; +public: + // File(); + // ~File(); + size_t total_frames{}; + ssize_t rows{}; + ssize_t cols{}; + uint8_t bitdepth{}; + DetectorType type{}; + + inline size_t bytes_per_frame() const{ + //TODO: ask if this is correct + return rows*cols*bitdepth/8; + + } + inline size_t pixels() const{ + return rows*cols; + } + // size_t total_frames(); + +}; diff --git a/src/file_io/FileFactory.cpp b/src/file_io/FileFactory.cpp new file mode 100644 index 0000000..bd0e8ef --- /dev/null +++ b/src/file_io/FileFactory.cpp @@ -0,0 +1,31 @@ +#include "FileFactory.hpp" +#include "File.hpp" +#include "RawFileFactory.hpp" +#include "JsonFileFactory.hpp" +#include + +File FileFactory::loadFile(std::filesystem::path fpath){ + // check if file exists + if(!std::filesystem::exists(fpath)){ + throw std::runtime_error("File does not exist"); + } + + File ret; + // check if extension is raw + if(fpath.extension() == ".raw"){ + std::cout<<"Loading raw file"< +#include "File.hpp" + +class FileFactory{ + // Class that will be used to create File objects + // follows the factory pattern +public: + // virtual File createFile() = 0; + // virtual int deleteFile() = 0; + File loadFile(std::filesystem::path); //TODO: add option to load all file to memory or keep it on disk +}; diff --git a/src/file_io/JsonFileFactory.hpp b/src/file_io/JsonFileFactory.hpp new file mode 100644 index 0000000..d44bb13 --- /dev/null +++ b/src/file_io/JsonFileFactory.hpp @@ -0,0 +1,10 @@ +#include "FileFactory.hpp" + +class JsonFileFactory: FileFactory +{ +private: + /* data */ +public: + +}; + diff --git a/src/file_io/RawFileFactory.cpp b/src/file_io/RawFileFactory.cpp new file mode 100644 index 0000000..e69de29 diff --git a/src/file_io/RawFileFactory.hpp b/src/file_io/RawFileFactory.hpp new file mode 100644 index 0000000..2c0ca8c --- /dev/null +++ b/src/file_io/RawFileFactory.hpp @@ -0,0 +1,9 @@ +#include "File.hpp" +#include + +class RawFileFactory{ + public: + // RawFileFactory(); + // ~RawFileFactory(); + File loadFile(std::filesystem::path fpath); +}; \ No newline at end of file diff --git a/src/main.cpp b/src/main.cpp index a471857..27c632b 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -1,8 +1,10 @@ // Your First C++ Program - #include +#include "file_io/FileFactory.hpp" + int main() { - std::cout << "Hello World!"; - return 0; + FileFactory fileFactory=FileFactory(); + std::filesystem::path p = std::filesystem::current_path(); + File f = fileFactory.loadFile(p/"test.raw"); }