From 9dbc24efc1fcbd33da893c028fe909a0b34dbbc2 Mon Sep 17 00:00:00 2001 From: my name Date: Fri, 17 Jul 2026 00:04:28 +0200 Subject: [PATCH] visualization of bsort, manager now responsible for updates and time split timeractions from timers into seperate header integrated the experiments into an improved displaynumbers, which includes the vector as well as bars above them outsourced the calculation of delta time to the manager to clean up main() --- cpp/ui/ncurses/hw/hwcurses.cpp | 35 +++++++++++++------- cpp/ui/ncurses/hw/timer.cpp | 44 +++++++------------------ cpp/ui/ncurses/hw/timer.hpp | 19 ----------- cpp/ui/ncurses/hw/timeractions.cpp | 53 ++++++++++++++++++++++++++++++ cpp/ui/ncurses/hw/timeractions.hpp | 32 ++++++++++++++++++ 5 files changed, 120 insertions(+), 63 deletions(-) create mode 100644 cpp/ui/ncurses/hw/timeractions.cpp create mode 100644 cpp/ui/ncurses/hw/timeractions.hpp diff --git a/cpp/ui/ncurses/hw/hwcurses.cpp b/cpp/ui/ncurses/hw/hwcurses.cpp index b954b9a..5c04f68 100644 --- a/cpp/ui/ncurses/hw/hwcurses.cpp +++ b/cpp/ui/ncurses/hw/hwcurses.cpp @@ -1,4 +1,5 @@ #include "timer.hpp" +#include "timeractions.hpp" #include #include #include @@ -24,16 +25,18 @@ void myupdatedisplay(const timer &timer_input) { "test: █"); } -void createbalk(const timer &timer_input, cchar_t &input_char) { - int ticnt = timer_input.triggercounter; - mvwvline_set(stdscr, LINES - ticnt, ticnt, &input_char, ticnt); -} - std::vector mynumbers = {1, 2, 3, 4, 5, 6, 7, 8, 9}; +std::vector myothernumbers = {1, 4, 9, 8, 6, 2, 3, 5, 7}; -void displaynumbers(int myy, std::vector &input_numbers) { +void displaynumbers(int startx, int starty, std::vector &input_numbers, cchar_t &input_char) { for (size_t i = 0; i < input_numbers.size(); i++) { - mvprintw(myy, 10 + i, "%d,", input_numbers[i]); + /** +I make a horizontal line of i chars, which are supposed to represent mynumbers +above that, I want a line of bars. +_all_ bars stretch from LINES-1 to LINES-1-numbervalue + **/ + mvprintw(LINES -1 - starty, i + startx, "%d,", input_numbers[i]); + mvwvline_set(stdscr, LINES-1-input_numbers[i]-starty, i+startx, &input_char, input_numbers[i]); } } @@ -53,20 +56,28 @@ void myinitialize() { int main() { myinitialize(); cchar_t my_c_char = {.attr= A_NORMAL, .chars={L'█'}, .ext_color = 0}; + + //create actions, then put them in timers, then put them into the timermanager auto myaction = std::make_unique(mynumbers); - auto clocktimer = std::make_unique("secondsprinter", 1, 10, std::move(myaction)); + auto clocktimer = + std::make_unique("secondsprinter", 1, 10, std::move(myaction)); + + auto myothersort = std::make_unique(myothernumbers); + auto sorttimer = + std::make_unique("sorttimer", 0.1, std::move(myothersort)); + timermanager mytimermanager; mytimermanager.addtimer(std::move(clocktimer)); - displaynumbers(2, mynumbers); - - // calculate delta between current and previous time + mytimermanager.addtimer(std::move(sorttimer)); + while (true) { erase(); mytimermanager.updatetimers(); - displaynumbers(3, mynumbers); + displaynumbers(0,0,mynumbers, my_c_char); + displaynumbers(10, 10, myothernumbers, my_c_char); refresh(); std::this_thread::sleep_for(std::chrono::milliseconds(500)); diff --git a/cpp/ui/ncurses/hw/timer.cpp b/cpp/ui/ncurses/hw/timer.cpp index 273f27d..c48f27a 100644 --- a/cpp/ui/ncurses/hw/timer.cpp +++ b/cpp/ui/ncurses/hw/timer.cpp @@ -11,14 +11,14 @@ // infinite timer timer::timer(std::string name_input, size_t interval_input, std::unique_ptr action_input) - : time_interval(interval_input), name(name_input), is_infinite(true), - action(std::move(action_input)) {} + : time_interval(interval_input), name(name_input), is_infinite(true), + action(std::move(action_input)) {} // limited timer timer::timer(std::string name, size_t interval_input, int triggeramount, std::unique_ptr action_input) - : triggeramount(triggeramount), time_interval(interval_input), name(name), - action(std::move(action_input)) {} + : triggeramount(triggeramount), time_interval(interval_input), name(name), + action(std::move(action_input)) {} // callbackfunc once enough time has accumulated void timer::updatetime(double DeltaTime) { @@ -40,14 +40,18 @@ void timermanager::addtimer(std::unique_ptr input_timer) { } void timermanager::updatetimers() { + //get dtime + auto currenttime = std::chrono::steady_clock::now(); + std::chrono::duration myDeltaTime = currenttime - prevtime; + double dtime = myDeltaTime.count(); + + //update timers with dtime for (auto &mytimer : timers) { - auto currenttime = std::chrono::steady_clock::now(); - std::chrono::duration myDeltaTime = currenttime - prevtime; - double dtime = myDeltaTime.count(); mytimer->updatetime(dtime); - prevtime = currenttime; mvprintw(12, 0, "updated timer %s", mytimer->name.c_str()); } + //reset for next tick + prevtime = currenttime; timers.erase(std::remove_if(timers.begin(), timers.end(), [](auto &timer) { return timer->is_expired; }), timers.end()); @@ -56,28 +60,4 @@ void timermanager::updatetimers() { } timermanager::timermanager(): prevtime(std::chrono::steady_clock::now()){} - -swapaction::swapaction(std::vector &input_vector): input_vector(input_vector){} - -void swapaction::update(const timer &input_timer){ - if (!iscomplete) { - int temp = input_vector[it_i]; - input_vector[it_i] = input_vector[input_vector.size() -1 - it_i]; - input_vector[input_vector.size() - 1 - it_i] = temp; - it_i++; - if(it_i>=input_vector.size() / 2){iscomplete=true;} - } -} - - -printaction::printaction(std::vector &input_vector): input_vector(input_vector) {} - -void printaction::update(const timer &input_timer) { - if(!iscomplete) { - // for each it_i add a balkje then eventually print it - if (it_i>=10) { - iscomplete=true; - } - } -} diff --git a/cpp/ui/ncurses/hw/timer.hpp b/cpp/ui/ncurses/hw/timer.hpp index 169914f..12bebc5 100644 --- a/cpp/ui/ncurses/hw/timer.hpp +++ b/cpp/ui/ncurses/hw/timer.hpp @@ -62,25 +62,6 @@ public: void updatetimers(); }; -class swapaction : public timeraction { -public: - size_t it_i = 0; - bool iscomplete = false; - std::vector &input_vector; - swapaction(std::vector &input_vector); - void update(const timer &t); -}; - -class printaction : public timeraction { -public: - size_t it_i = 0; - bool iscomplete = false; - std::vector &input_vector; - printaction(std::vector &input_vector); - void update(const timer &t); -}; - - #endif diff --git a/cpp/ui/ncurses/hw/timeractions.cpp b/cpp/ui/ncurses/hw/timeractions.cpp new file mode 100644 index 0000000..1baa3c3 --- /dev/null +++ b/cpp/ui/ncurses/hw/timeractions.cpp @@ -0,0 +1,53 @@ +#include +#include "timer.hpp" +#include "timeractions.hpp" +#include +#include +#include +#include +#include +#include +#include + +swapaction::swapaction(std::vector &input_vector): input_vector(input_vector){} + +void swapaction::update(const timer &input_timer){ + if (!iscomplete) { + int temp = input_vector[it_i]; + input_vector[it_i] = input_vector[input_vector.size() -1 - it_i]; + input_vector[input_vector.size() - 1 - it_i] = temp; + it_i++; + if(it_i>=input_vector.size() / 2){iscomplete=true;} + } +} + + +sortaction::sortaction(std::vector &input_vector): input_vector(input_vector) {} + +//sorts the included array using bsort and external iterators rather than for loops +void sortaction::update(const timer &input_timer) { + if (!iscomplete) { + /** + we take a number, it_i loop + compare it with its neighbour, it_j loop + if it's larger swap it + keep going until it_i == length - sorted numbers + once that is true, reset it_j and advance it_i + **/ + if (input_vector[it_j]>input_vector[it_j+1]) { + // int temp = input_vector[it_j + 1]; + // input_vector[it_j + 1] = input_vector[it_j]; + // input_vector[it_j] = temp; + std::swap(input_vector[it_j], input_vector[it_j+1]); + } + it_j++; + + if (it_j >= input_vector.size() - 1 - it_i) { + it_j = 0; + it_i++; + } + if (it_i>=input_vector.size()) { + iscomplete=true; + } + } +} diff --git a/cpp/ui/ncurses/hw/timeractions.hpp b/cpp/ui/ncurses/hw/timeractions.hpp new file mode 100644 index 0000000..483a89c --- /dev/null +++ b/cpp/ui/ncurses/hw/timeractions.hpp @@ -0,0 +1,32 @@ +#ifndef TIMERACTIONS_HPP +#define TIMERACTIONS_HPP + +#include "timer.hpp" +#include +#include +#include +#include +#include +#include +#include + +class swapaction : public timeraction { +public: + size_t it_i = 0; + bool iscomplete = false; + std::vector &input_vector; + swapaction(std::vector &input_vector); + void update(const timer &t); +}; + +class sortaction : public timeraction { +public: + size_t it_i = 0; + size_t it_j = 0; + bool iscomplete = false; + std::vector &input_vector; + sortaction(std::vector &input_vector); + void update(const timer &t); +}; + +#endif