| Age | Commit message (Collapse) | Author | Files | Lines | |
|---|---|---|---|---|---|
| 9 days | kstd: ring_buffer: implement try_push_back() | Felix Morgner | 2 | -0/+28 | |
| 9 days | kstd: ring_buffer: implement push_back() | Felix Morgner | 2 | -2/+271 | |
| 9 days | kstd: ring_buffer: clear moved-from buffer | Felix Morgner | 2 | -12/+42 | |
| While the standard says that a move-from object is in a valid but unspecified state, thus making it legal to leave the moved-from buffer in a non-empty state, we can do better here. For one, standard containers generally leave the moved-from object in an empty state. Secondly, destroying the contents of a ring_buffer object has linear complexity, as does moving the contents of a ring_buffer object. We can therefore clear the moved-from object while we are moving from it, without increasing the complexity of the move operation. At the same time, we can thereby reduce the amount of work that needs to be done when the moved-from object is finally destroyed. Note that during the move assignment operation, the moved-from buffer is in a somewhat peculiar state. Some of its elements have been destroyed, but its size has not changed. This is okay, because we are essentially still executing a transition from one valid state into another once. At the end of the move operation, we ensure that the size of the moved-from buffer is set to zero, thus reestablishing its invariant. | |||||
| 9 days | kstd: ring_buffer: implement clear() | Felix Morgner | 2 | -1/+62 | |
| 9 days | kstd: tests: extract static tracker types | Felix Morgner | 2 | -112/+109 | |
| 9 days | kstd: ring_buffer: implement copy and move assignment | Felix Morgner | 2 | -0/+239 | |
| 9 days | kstd: ring_buffer: implement move ctor | Felix Morgner | 2 | -0/+25 | |
| 9 days | kstd: ring_buffer: implement copy ctor | Felix Morgner | 2 | -0/+36 | |
| 9 days | kstd: ring_buffer: implement dtor | Felix Morgner | 2 | -0/+56 | |
| 9 days | kstd: ring_buffer: move construction tests | Felix Morgner | 1 | -32/+32 | |
| 9 days | kstd: ring_buffer: add missing [c]rend() tests | Felix Morgner | 1 | -0/+15 | |
| 9 days | kstd: ring_buffer: implement [cr][begin|end]() | Felix Morgner | 2 | -0/+180 | |
| 9 days | kstd: ring_buffer: fix empty() and size() | Felix Morgner | 2 | -11/+26 | |
| 9 days | kstd: ring_buffer: add more range-based tests | Felix Morgner | 1 | -0/+50 | |
| 10 days | kstd: ring_buffer: implement [c]end() | Felix Morgner | 2 | -1/+134 | |
| 10 days | kstd: ring_buffer: implement [c]begin() | Felix Morgner | 2 | -1/+140 | |
| 10 days | kstd: ring_buffer: implement iterator type | Felix Morgner | 2 | -0/+165 | |
| 10 days | kstd: ring_buffer: add n-value-initialized ctor | Felix Morgner | 2 | -0/+52 | |
| 10 days | kstd: ring_buffer: add write-through tests | Felix Morgner | 1 | -0/+32 | |
| 10 days | kstd: ring_buffer: fix const-overload tests | Felix Morgner | 1 | -3/+3 | |
| 10 days | kstd: ring_buffer: add ctor panic test | Felix Morgner | 1 | -0/+10 | |
| 10 days | kstd: ring_buffer: extract basic storage | Felix Morgner | 2 | -23/+127 | |
| 11 days | kstd: ring_buffer: add missing test tag | Felix Morgner | 1 | -1/+1 | |
| 11 days | kstd: ring_buffer: add interface type tests | Felix Morgner | 1 | -0/+82 | |
| 11 days | kstd: ring_buffer: implement operator[] | Felix Morgner | 2 | -5/+45 | |
| 11 days | kstd: ring_buffer: simplify element_at | Felix Morgner | 1 | -3/+3 | |
| 11 days | kstd: ring_buffer: rename element_at_index | Felix Morgner | 1 | -4/+4 | |
| 11 days | kstd: ring_buffer: implement n-values ctor. | Felix Morgner | 2 | -1/+99 | |
| 11 days | kstd: ring_buffer: add missing documentation | Felix Morgner | 1 | -4/+13 | |
| 11 days | kstd: ring_buffer: rename head and tail | Felix Morgner | 1 | -9/+9 | |
| 11 days | kstd: ring_buffer: implement at() | Felix Morgner | 2 | -0/+84 | |
| 11 days | kstd: ring_buffer: implement size() | Felix Morgner | 2 | -0/+18 | |
| 11 days | kstd: ring_buffer: implement empty() | Felix Morgner | 2 | -0/+18 | |
| 11 days | kstd: ring_buffer: add do sections | Felix Morgner | 1 | -0/+5 | |
| 11 days | kstd: ring_buffer: implement max_size() | Felix Morgner | 2 | -0/+16 | |
| 11 days | kstd: ring_buffer: implement capacity() | Felix Morgner | 2 | -4/+16 | |
| 11 days | kstd: add ring_buffer include | Felix Morgner | 2 | -0/+37 | |
| 11 days | chore: clean up python scripts | Felix Morgner | 21 | -57/+113 | |
| 11 days | chore: update python dependencies | Felix Morgner | 1 | -182/+182 | |
| 11 days | ide: fix poetry dependencies | Felix Morgner | 2 | -387/+24 | |
| 11 days | Merge branch 'fmorgner/implement-interrupt-locking' into 'develop' | Felix Morgner | 14 | -25/+602 | |
| kapi/interrupts: implement irq_lock See merge request teachos/kernel!61 | |||||
| 12 days | x86_64: fix flag reading | Felix Morgner | 4 | -6/+92 | |
| 12 days | ide: enable <...> include checks | Felix Morgner | 1 | -0/+2 | |
| 12 days | kapi/interrupts: add tests | Felix Morgner | 2 | -0/+254 | |
| 12 days | kapi/interrupts: admit irq_lock dtor may panic | Felix Morgner | 1 | -1/+8 | |
| 12 days | kapi/interrupts: improve irq_lock protections | Felix Morgner | 1 | -5/+53 | |
| The previous implementation suffered from four problems: 1. try_lock in the basic irq_lock always succeeded. 2. lock in the basic irq_lock always succeeded. 3. try_lock in the wrapper irq_lock did not use the base try_lock. 4. a foreign CPU could wrongly unlock a remote irq_lock. These issues are mitigated in this patch. | |||||
| 12 days | kapi/interrupts: tests: fix state data race | Felix Morgner | 1 | -14/+3 | |
| 12 days | kapi/interrupts: tests: make IRQ state thread specific | Felix Morgner | 1 | -3/+12 | |
| 12 days | kapi/interrupts: implement IRQ lock | Felix Morgner | 2 | -0/+110 | |
| 12 days | kstd/mutex: export lockable concepts | Felix Morgner | 1 | -0/+9 | |
