Commit graph

38 commits

Author SHA1 Message Date
Stephen Seo 292bffb636 Impl nested threaded calls
More testing is probably required to make sure it works properly.
2022-06-15 21:15:34 +09:00
Stephen Seo 3286aa5a74 WIP nestable threads via ThreadPool
Currently has a race-condition-like memory corruption bug where function
contexts are deleted before child-functions complete (probably).
2022-06-15 16:38:36 +09:00
Stephen Seo 841a591aa4 Impl deferring deletions allowing for delete in fn
deleteEntity() is now allowed during a "forMatching" call, since it is deferred
until the "forMatching" call(s) end.
2022-01-20 17:32:05 +09:00
Stephen Seo be43cd03c5 Heavy refactorings
Use temporary structs instead of tuples.
Enforce max line width of 80 characters.
Fix warning related to ECTest.cpp .

Note that currently this commit appears to be unable to be built by GCC,
but compiles OK with Clang.
2021-09-07 17:04:20 +09:00
Stephen Seo 6a8902ad51 Allow ThreadPool to be created with < 2 ThreadCount 2021-09-07 11:46:38 +09:00
Stephen Seo 13152d1c22 Tweak sleep times for threadpool to finish
Remove debug print
2021-09-06 21:01:01 +09:00
Stephen Seo 0f2a98b886 Usage of ThreadPool fixes 2021-09-06 20:57:13 +09:00
Stephen Seo f44d2f8c7b WIP convert Manager to use ThreadPool
valgrind seems to report memory issues, and documentation may need more
updating.
2021-09-06 19:52:23 +09:00
Stephen Seo 381e069ec2 Add UnitTest for previously fixed bug 2021-05-17 12:34:12 +09:00
Stephen Seo a310a8ae38 Add forMatchingSimple, refactorings 2019-11-06 16:33:12 +09:00
Stephen Seo 4db5e0caed Add fn to Manager allowing iterable indices as sig
As an alternative to forMatchingSignatures, which calls the given
function on entities matching the given Components/Tags in the
signature, forMatchingIterable allows filtering entities by an iterable
of indices that corresponds to Components/Tags.
2019-07-11 21:11:03 +09:00
Stephen Seo 8f133acbc6 Fix stored functions not being called in order
Manager::callForMatchingFunctions should now call all functions in the
order they were added.
2018-11-22 14:31:55 +09:00
Stephen Seo 6bf239a43b API change: context/userdata provided to functions
All functions called by EC/Manager now accept an additional parameter
as a void* to support user-provided data (or context) for functions
(useful when the function is not a lambda function and doesn't have any
other data stored with it).
2018-08-08 16:52:12 +09:00
Stephen Seo d12af4d527 Add ability to handle unknown types
EC/Manager and EC/Bitset can now handle types that are not known
(Components or Tags not in the given Components or Tags when created).

Manager::getEntityData now returns a pointer instead of a reference.
Functions passed to Manager::forMatchingFunction (and other similar fns)
should now accept Component fields as pointer types, not reference
types.
2018-05-17 17:05:49 +09:00
Stephen Seo 6f0b7cb65b Fix bug with multiple sig/func call
Fixed bug where if an entity is deleted during a multiple
signature/function call but matched a later signature/function, it would
still be called in that later function.

Minor fixes as well.
2017-12-01 19:20:59 +09:00
Stephen Seo 6124a45453 Replace garbage-collection-like cleanup
Entity IDs are now guaranteed to not change for a living entity.
Cleanup is replaced by using a std::unordered_set to store deleted
Entity IDs to be reclaimed on later calls to addEntity().
2017-12-01 14:00:49 +09:00
Stephen Seo 60bf841c11 Change CleanupReturnType to std::vector 2017-11-24 14:58:00 +09:00
Stephen Seo 506b027655 Fix bug with duplicate signatures
Fixed bug where if forMatchingSignatures and forMatchingSignaturesPtr
was called with some signatures in the TypeList being duplicates, then
only the first duplicate and function pair would be called, and all
other functions paired with other duplicate signatures would not be
called.
2017-11-15 15:36:04 +09:00
Stephen Seo 248cf2676a Add ptr versions of forMatchingSignature fns 2017-11-14 13:11:32 +09:00
Stephen Seo 648e47aae9 Fix crash bug, improve Unit Test
Crash bug from improperly implemented std::lock_guard for multi-threaded
usage of forMatchingSignatures fixed.
2017-11-10 13:19:50 +09:00
Stephen Seo 0dba6874ad Implement forMatchingSignatures for efficiency
EC::Manager::forMatchingSignatures is different from
EC::Manager::forMatchingSignature in that it takes multiple signatures
and functions and iterates through all entities once. The trade-off is
that a vector of vectors is created to store matching entities.
This function can be called to use multiple threads as well, similar
to the "non-plural" version of this function.

See the doxygen-style documentation in src/EC/Manager.hpp for
forMatchingSignatures (or the generated doxygen html) for how to use.
Usage example is in the last unit test function in src/test/ECTest.hpp .
2017-11-09 21:17:40 +09:00
Stephen Seo 1d2fbf7b52 Fix cleanup function's return value
Unordered map does not preserve order in which items were inserted.
This is a problem because an entity id relocated to a previously deleted
one could be read as deleted when iterating through the unordered map.
Thus, it has been replaced with a queue.
2017-10-31 13:25:27 +09:00
Stephen Seo 2523831097 Fix unit test 2017-10-06 14:35:37 +09:00
Stephen Seo a08b1575d6 Implement multithreading for function calls
Each of the EC::Manager's function calls over entities can now be
multi-threaded.
2017-10-06 12:47:05 +09:00
Stephen Seo aad97d6d42 Add feature to cleanup function in manager
ECManager's cleanup function now returns a map detailing info on all
entities changed by cleanup.
2017-09-28 16:05:05 +09:00
Stephen Seo bc70089822 Add a test to unit tests 2017-08-29 15:27:58 +09:00
Stephen Seo 1f052154ad Changed clearSomeMatchingFunctions, line lengths
clearSomeMatchingFunctions removed for
keepSomeMatchingFunctions and removeSomeMatchingFunctions to
avoid confusion.

Lines now respect 80 column limit.
2017-07-13 16:13:37 +09:00
Stephen Seo 49ae172c3a Added two new functions
Added "removeForMatchingFunction" and "callForMatchingFunction".
The former deletes a specific function and the latter calls a specific
function.
2017-07-12 22:02:02 +09:00
Stephen Seo 09a7546509 Changed implementation of stored functions to map
An unordered_map stores functions, allowing for functions to be
removed by index, and bulk removals with filtering by index.

Also added reset(), which changes the state of the Manager to be
almost identical to a newly constructed one.
2016-09-21 21:01:48 +09:00
Stephen Seo 2e115cd7a2 Fixed docs, ids changed to const references 2016-09-20 20:31:56 +09:00
Stephen Seo 7c49ab4f04 Added capability to store functions
EC::Manager can now store functions similar to functions
given to EC::Manager::forMatchingSignature.
2016-09-20 20:07:28 +09:00
Stephen Seo ab2209b698 Fixed bug where deleted entities retain info 2016-08-30 17:34:34 +09:00
Stephen Seo 577132554e Added support for components of type UniquePtr 2016-04-06 19:32:30 +09:00
Stephen Seo aa05522772 Slight change to unit tests, docs
Unit test now creates Component with
Manager::addComponent.
2016-03-14 20:36:05 +09:00
Stephen Seo 635eed34a4 Minor fixes/changes 2016-03-14 18:16:09 +09:00
Stephen Seo de07c8ad1a Fixed entity deletion bug
Fixed bug where deleted entity would retain Components/Tags.
2016-03-14 11:39:37 +09:00
Stephen Seo c6002149d3 Fix to Meta/Matching 2016-03-13 18:17:06 +09:00
Stephen Seo f123f075eb Added Meta/Matching, progress on Bitset/Manager 2016-03-13 18:07:49 +09:00