From 1d86d24ed14822d0e78d90e8043a52a36c8527dc Mon Sep 17 00:00:00 2001 From: Toni Date: Sun, 2 Nov 2025 16:15:12 +0100 Subject: [PATCH] basic file format --- .clang-tidy | 2 +- src/common.h | 21 +++++++++++++++ src/mainwindow.cc | 65 +++++++++++++++++++++++++++++++++++++++++++++-- src/mainwindow.h | 4 +++ src/mainwindow.ui | 6 +++++ 5 files changed, 95 insertions(+), 3 deletions(-) create mode 100644 src/common.h diff --git a/.clang-tidy b/.clang-tidy index 3cda293..2445ece 100644 --- a/.clang-tidy +++ b/.clang-tidy @@ -1 +1 @@ -Checks: '*,clang-analyzer-*,-llvmlibc-*,-fuchsia-*,-altera-*,-abseil-*,-android-*,-modernize-use-trailing-return-type,-readability-identifier-length,-*-readability-todo,-*-magic-numbers,-readability-function-cognitive-complexity,-*-easily-swappable-parameters' \ No newline at end of file +Checks: '*,clang-analyzer-*,-llvmlibc-*,-fuchsia-*,-altera-*,-abseil-*,-android-*,-modernize-use-trailing-return-type,-readability-identifier-length,-*-readability-todo,-*-magic-numbers,-readability-function-cognitive-complexity,-*-easily-swappable-parameters,-*-pro-type-reinterpret-cast,-*-owning-memory' \ No newline at end of file diff --git a/src/common.h b/src/common.h new file mode 100644 index 0000000..7fa147a --- /dev/null +++ b/src/common.h @@ -0,0 +1,21 @@ +#pragma once + +#include + +#define ASSERT(cond) \ + if (!(cond)) { \ + std::cerr << "ASSERTION FAILED at " << __FILE__ << ":" << __LINE__ << "\n" \ + << #cond << std::endl; \ + abort(); \ + } + +using u8 = unsigned char; +using i8 = char; +using i32 = int32_t; +using u32 = uint32_t; +using i64 = int64_t; +using u64 = uint64_t; +static_assert(sizeof(float) * 8 == 32); +using f32 = float; +static_assert(sizeof(double) * 8 == 64); +using f64 = double; \ No newline at end of file diff --git a/src/mainwindow.cc b/src/mainwindow.cc index 30b7dc0..54eaaca 100644 --- a/src/mainwindow.cc +++ b/src/mainwindow.cc @@ -1,7 +1,10 @@ #include "mainwindow.h" +#include "common.h" #include #include +#include #include +#include MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow) { @@ -15,7 +18,65 @@ MainWindow::MainWindow(QWidget *parent) return; } - std::ofstream file(path.toStdString(), std::ios::binary); - file.write("TEST", 4); + { + std::ofstream file(path.toStdString(), std::ios::binary); + file.write("DULL", 4); + + std::string file_name = "hello.txt"; + u64 file_name_size = file_name.size(); + std::string file_content = "Hello, World!"; + u64 file_size = file_content.size(); + file.write(reinterpret_cast(&file_name_size), sizeof(u64)); + file.write(file_name.data(), static_cast(file_name_size)); + file.write(reinterpret_cast(&file_size), sizeof(u64)); + file.write(file_content.data(), static_cast(file_size)); + } + + m_vault_path = path; + reload_vault(); + }); + + connect(ui->actionOpen, &QAction::triggered, this, [this]() { + QString path = QFileDialog::getOpenFileName(this, "Choose vault to open", + QDir::currentPath(), + "Dull Vaults (*.dull)"); + if (path.isEmpty()) { + return; + } + + m_vault_path = path; + reload_vault(); }); } + +void MainWindow::reload_vault() { + ui->fsTreeWidget->clear(); + + std::ifstream file(m_vault_path.toStdString(), std::ios::binary); + ASSERT(file.good()); + + std::array header{}; + ASSERT(file.read(header.data(), header.size())); + + ASSERT(std::string_view(reinterpret_cast(header.data()), + header.size()) == "DULL"); + + while (true) { + u64 name_size = 0; + if (!file.read(reinterpret_cast(&name_size), sizeof(u64))) { + break; + } + + std::string name(name_size, '\0'); + file.read(name.data(), static_cast(name_size)); + + u64 content_size = 0; + file.read(reinterpret_cast(&content_size), sizeof(u64)); + + std::string content(content_size, '\0'); + file.read(content.data(), static_cast(content_size)); + + auto *item = new QTreeWidgetItem(ui->fsTreeWidget); + item->setText(0, QString::fromStdString(name)); + } +} diff --git a/src/mainwindow.h b/src/mainwindow.h index eb858d3..c3cf4ec 100644 --- a/src/mainwindow.h +++ b/src/mainwindow.h @@ -11,4 +11,8 @@ public: private: Ui::MainWindow *ui; + + QString m_vault_path; + + void reload_vault(); }; diff --git a/src/mainwindow.ui b/src/mainwindow.ui index 1acf7e6..20d0e8c 100644 --- a/src/mainwindow.ui +++ b/src/mainwindow.ui @@ -28,6 +28,7 @@ Vault + @@ -36,6 +37,11 @@ New + + + Open + +