Not perfect, not rust-ly nice, but i have the feeling that rust needs some more time to counter this pattern. However it even occurs with stable features (the Lifetime of C,I and T as you see in the previous commit)
I have found: https://matklad.github.io/2018/05/04/encapsulating-lifetime-of-the-field.html which looks like it might be related to my problem. but i am not yet sure, anyway, problem solved for now, future will tell
now we create seperate files for materializeable and layers which cover A) the trait and B) the implementations of data and delta inside
this helps to find the right stuff in this trait chaos :D
also those structs/trait are prob often edited at once
this trait needs to be implemented for the TopMost Layer of a LodTree as well of the LodDelta.
This can be archived by a lot of trait magic.
However, due to a fight with the borrow checker, this commit here contains a lot of weird lifetimes, i really have no idea, and prob will cleanup this, BUT, it compiles, and tests run green
the delta has a traversable iterator
then we create a deltawriter that gets a reference to delta and data
deltawriter also gets a traverable interator which uses the existing traversables
Regression: as of this commit, it failes to compile with rust nightly 2019-10-02
Regression: LodDelta is not implemented yet
Regression: LodMakeAtLeast is not implemented yet
Regression: Tests are missing
Redone the whole implementation again on this and now use a trait for HashResult and VecResult which solves the .get() problem and .mat() problem
added benchmarks and (with repeated tests) we gain 14ns for 1 hash lookup and 2 veclookups and the result vec lookup
set a tem OWN_PER_PARENT const because i couldn't figure out childs correctly
experiment with a first get implementation, and choose to make trav return a ResultLayer on current layer not one below
implement a api to travers to the Detail already
create a DetailStore for actual work on the Detail
create Nestable for child layer trait
update description
this state does not work, because i tried to iplement delta in a trait type. however this is not necessary, i will revert this.
Just keep this commit for historical reasons - it wont build.
Option<usize> takes 16 bytes which we cannot allow,
so we use a u32 to store the same information, we use std::u32::MAX to mark that a LOD has no children
we have no checks for that limit, so we hope it never gets that high... dear god...
the intel laptop statistics now seem to be alot more stable and even top the ryzen desktop statistics, we get faster in every bench
the old implementation needed a Vec per Element, which itself needs 24 bytes, which is a huge overhead for a single byte element.
the new implementation has global Vec per region and only needs a index for the first element, which might be 8 bytes (implementation 4 bytes because of some assumptions) or none at all.
It's still not ideal, because it will requiere alot of duplicate coding.
Former-commit-id: 7172829c18ceabe67689487ffd269ebe62d1647b
implement a regionmanager and basic region component as well as tests for those
this is a fist implementation and likly to change
Former-commit-id: fdb7097dc30ab1642d25a02532458bcc2811ab61
+ notifying about sucessful kit application
+ notifying about case with insufficient space
+ handle case where you don't have enough free slots
+ handle quantity of non-stackable items
+ add test for items in kit manifest