Commit Graph

74 Commits

Author SHA1 Message Date
Aryadev Chavali
6ffa63f7ac Make general delay 1ms
Just for my puny eyes to see.
2025-12-12 04:07:43 +00:00
Aryadev Chavali
2dbe3d0a58 merge generate_children into do_iteration
Also fix this really weird slow down we get from doing direct mutation
to a state.allocator.get_ref (i.e. a Node by reference).  Maybe the
compiler just can't inline that instruction?  Regardless, this patch
fixes the slow downs!
2025-12-12 03:55:43 +00:00
Aryadev Chavali
7e801df280 no more numerics 2025-12-12 03:55:43 +00:00
Aryadev Chavali
f70517cf41 Simplify mutex locking scheme (lock at start, unlock at end) 2025-12-12 03:08:56 +00:00
Aryadev Chavali
00858cf74f Rewrite main to draw based on our new state/draw_state
Arranges a thread set, draws based on draw_state.  No need to lock the
mutex since drawing should only require reading.  Still has a timer in
case we need to do timed checks.
2025-11-28 17:24:33 +00:00
Aryadev Chavali
3e065e50a9 Disable previous work
We're going to rewrite this
2025-11-28 17:24:12 +00:00
Aryadev Chavali
ab0f152742 Define worker function which a thread should run
Pauses until state.pause_work is false (checking every
THREAD_PAUSE_DELAY), then performs an iteration.  Quits when
state.quit_work is true (based on loop).  Generally delays itself by
THREAD_GENERAL_DELAY.
2025-11-28 17:23:05 +00:00
Aryadev Chavali
014821ceb5 Added booleans for thread workers to look at when running
pause_work temporarily stops work, but should keep the thread alive.

stop_work should kill the thread.
2025-11-28 17:22:39 +00:00
Aryadev Chavali
1bd8a9f7b2 Add run component to build script, activated by passing argument run 2025-11-28 17:21:21 +00:00
Aryadev Chavali
6f620644bf Define constructors for state.hpp explicitly 2025-11-27 01:57:10 +00:00
Aryadev Chavali
0008c31f53 Add src/worker.cpp to build pipeline 2025-11-27 01:53:20 +00:00
Aryadev Chavali
f8068c4a15 Implement the two worker functions 2025-11-27 01:52:52 +00:00
Aryadev Chavali
66c56f2c15 Define thread safe worker functions for generating new children on the tree 2025-11-27 01:51:58 +00:00
Aryadev Chavali
6247f2af49 Add src/state.cpp to the build pipeline 2025-11-27 01:44:23 +00:00
Aryadev Chavali
40e07e03f2 Add mutexes to state for the queue and the allocator
Our threads need to negotiate access and mutation to the two
resources - we don't want them treading on each others toes when
generating new child nodes /or/ when trying to remove/add work to the
queue.  The former situation is particularly worrisome due to how weak
the indexing system is with the allocator.
2025-11-27 01:42:24 +00:00
Aryadev Chavali
0abd353368 Implement cw::state::DrawState::compute_bounds 2025-11-27 01:30:35 +00:00
Aryadev Chavali
0ac316ada4 Define the general state of the sim (extract from main.cpp) 2025-11-27 01:30:21 +00:00
Aryadev Chavali
a03fa13a07 Implementation (copied from numerics) 2025-11-27 01:30:03 +00:00
Aryadev Chavali
ff9a2851d4 Switch to using i64's instead of optional u64 in Node 2025-11-27 01:30:03 +00:00
Aryadev Chavali
6c2bc93874 remove index_t definition
conflicts with prev code base.

Also std::optional doubles the size of the underlying type.
horrifying!  I don't want to have to give 16 bytes over for something
that could be embedded in the 8 bytes of the u64 directly.  I'm
thinking we could just use i64's instead, sacrificing that top bit to
indicate if the value is present or not.
2025-11-27 01:30:03 +00:00
Aryadev Chavali
7a4d158d2f Add gcd to base.hpp 2025-11-27 01:30:03 +00:00
Aryadev Chavali
e032303773 Define node.hpp (move definitions away from numerics.hpp) 2025-11-27 01:30:03 +00:00
Aryadev Chavali
9821a2ab15 Define basic type aliases and useful functions/macros for use throughout the system 2025-11-27 01:02:13 +00:00
Aryadev Chavali
739409d3be Use a shell script over a makefile
Simpler build system, easier to read.
2025-11-27 00:45:51 +00:00
Aryadev Chavali
9d8215bd45 Adjusted copyright template for code files 2025-11-27 00:39:01 +00:00
Aryadev Chavali
5e9e8d8010 Refined the TODOs 2025-11-17 01:31:35 +00:00
Aryadev Chavali
15b3f9fb12 Add some notes 2025-11-17 01:22:45 +00:00
Aryadev Chavali
8a2214f2fb Simulation only runs if SPACE is held or PERIOD is pressed.
KEY_SPACE, held, will keep the simulation running.

KEY_PERIOD will do exactly one iteration per press.
2025-11-17 01:10:46 +00:00
Aryadev Chavali
bd96755654 Added README 2024-07-27 02:25:52 +01:00
Aryadev Chavali
564bac363f Clean up and use the right initial fraction for CW tree 2024-07-27 02:20:31 +01:00
Aryadev Chavali
76d407ae1b Added timer to automatically do iterations
Looks very cool.
2024-07-27 01:44:07 +01:00
Aryadev Chavali
f1b878c991 Left and right fractions are now drawn at the top with counter 2024-07-27 01:35:43 +01:00
Aryadev Chavali
feabcf24a0 Draw the three iteration nodes in special colours
green for the centre, blue for the new nodes generated.
2024-07-27 01:25:27 +01:00
Aryadev Chavali
1c06a4b613 iterate now returns a tuple of the three fractions worked on
The left, currently processed (centre) and right fractions are
returned by iterate.  This allows us to see exactly what fractions
have been generated/worked on in every iteration.
2024-07-27 01:23:31 +01:00
Aryadev Chavali
32314708d5 Made nested Bounds structure to encapsulate work with bounds
Looks a bit nicer, probably increases padding but whatever.
2024-07-26 21:58:53 +01:00
Aryadev Chavali
bb6ded706f Move all functions and state into one struct
One God structure which will hold all the necessary state, ensuring I
only need to compute stuff like bounds at most once, better than
computing it on every draw (which is WAY slower at scale).
2024-07-26 21:44:08 +01:00
Aryadev Chavali
ca7931e0c2 NodeAllocator constructor now reserves space in vector
This is different to vec{capacity}, which would adjust vec::size.
This adjusts vec::capacity instead, which is what I want.
2024-07-26 21:43:19 +01:00
Aryadev Chavali
7720544e07 NodeAllocator has default constructor
capacity at 0 by default, because it screws with usage of size later.
2024-07-26 21:25:40 +01:00
Aryadev Chavali
0eaa851114 Increase font size, other small changes 2024-07-26 21:08:59 +01:00
Aryadev Chavali
2ddf2d0b48 Clean up count drawing logic a bit, add iterations to the count text 2024-07-26 21:07:18 +01:00
Aryadev Chavali
edc0383132 Added counter to draw loop to show the amount of nodes computed 2024-07-26 21:03:56 +01:00
Aryadev Chavali
a614626b21 Functioning main loop which draws number lines and iterations
Pretty cool!
2024-07-26 21:02:24 +01:00
Aryadev Chavali
950706fdaf Function to draw the complete number line
Draws a guide line, computes bounds (which we should defer), draws all
nodes in the tree then draws the bounds.
2024-07-26 21:00:34 +01:00
Aryadev Chavali
89fd812981 Make draw_node_number_line non recursive
Using a stack or queue, we can replace a function recursive tree
traversal with a single call.  A stack would make it a DFS while a
queue would be a BFS.  Since there's only ever two children, and at
high iteration counts we're getting quite large depth, it would be
best to do a DFS, hence the stack.
2024-07-26 20:53:54 +01:00
Aryadev Chavali
01468f793f recursive function to draw tree in a number line
Draws the current node by converting its norm value (which is in
(lower, upper)) to a screen value, drawing a line there.

It then recurs on the children of the node.
2024-07-26 20:46:39 +01:00
Aryadev Chavali
3a911db312 Helper to draw a fraction as text at point (x, y) 2024-07-26 20:46:34 +01:00
Aryadev Chavali
99d3794749 Helper to convert a value in (min, max) to an equivalent in (0, width) 2024-07-26 20:46:34 +01:00
Aryadev Chavali
096c1089ca Helpers to get the rightmost and leftmost node
This, due to the properties of a cw tree, will be the largest and
smallest fraction of the tree.
2024-07-26 20:46:34 +01:00
Aryadev Chavali
08e890ee4a Define some constants and include a ton of stuff 2024-07-26 20:46:34 +01:00
Aryadev Chavali
163f1e691a NodeAllocator can now get nodes by value or by reference
Abstracting the interface more, such that callers can use functions
rather than accessing internals directly, allows me to refactor the
allocator without having to do a ton of edits all across the source
tree.
2024-07-26 17:01:20 +01:00