Commit Graph

75 Commits

Author SHA1 Message Date
Aryadev Chavali
424fab2e40 Weird bug in draw_tree
Seems near the 100,000 node mark, the vector craps itself?  I keep
getting "heap use after free" errors here when trying to access the
allocator vector.  Disabling fsan just leads to a segment fault near
the same point.

I think we might need to introduce our own vector :)
2025-12-12 04:08:01 +00:00
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