Commit graph

107 commits

Author SHA1 Message Date
Stephen Seo 222639ec3a Update CMakeLists.txt cmake version
All checks were successful
Publish doxygen documentation to seodisparate.com / doxygen-gen-and-publish (push) Successful in 1s
Run UnitTests / build-and-run-unittests (push) Successful in 13s
2024-01-17 19:02:51 +09:00
Stephen Seo 033a455e3e clang-format EC/ThreadPool.hpp 2022-06-16 13:39:26 +09:00
Stephen Seo b4b0802e7c Apply minor fix and documentation to ThreadPool 2022-06-16 13:39:05 +09:00
Stephen Seo 2745362e41 Reformat EC/Manager.hpp 2022-06-16 13:27:43 +09:00
Stephen Seo 6e07bb1877 Undo change of temporary struct in Manager 2022-06-16 13:26:06 +09:00
Stephen Seo c245b438a7 Remove zero-ing of atomic_uint in ThreadPool
Setting the current "stacks" atomic_uint to zero is unnecessary once all
the threads have finished execution.
2022-06-16 12:41:08 +09:00
Stephen Seo a879e0ef8c Add atomic_bool to ThreadPool to ensure validity
The new deque<atomic_bool> ensures that values are not dropped from the
deque until the entry's threads have finished execution.
2022-06-16 12:37:09 +09:00
Stephen Seo 62600cbfa6 Fix ThreadPool::easyStartAndWait()
Previously, the "waiting" part wasn't implemented.
2022-06-16 12:20:02 +09:00
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 e61d2724e6 Fix possible data-race with isAlive() calls
Removed isAlive() calls from functions passed to ThreadPool, and instead use an
unordered_set prior to using ThreadPool to "cache" which entities are not alive.
This is so that if a function passed to ThreadPool modifies the ECManager (e.g.
creating a new entity), then there will be no data race from also calling
isAlive(). (Note that this does not protect against "deleting" entities from the
ECManager during use of ThreadPool. It is expected for the caller to do the
"deleting" after use of stored/called functions is finished.)
2022-01-20 14:31:23 +09:00
Stephen Seo f27c22675a Add easyWakeAndWait() to ThreadPool
Changed usage of ThreadPool in EC::Manager to use easyWakeAndWait().
2021-09-09 15:53:55 +09:00
Stephen Seo 79748d58f1 Double the number of tasks given to ThreadPool
Previous implementation only enqueued "ThreadCount" tasks to ThreadPool.
For more efficiency, this has been changed to "ThreadCount * 2" tasks.
2021-09-08 15:55:08 +09:00
Stephen Seo 577a647ca4 Update doxygen documentation 2021-09-08 14:58:41 +09:00
Stephen Seo 120368094e Remove redundant function
"deleteForMatchingFunction()" was exactly the same as
"removeForMatchingFunction()", so it was removed.
2021-09-08 14:14:14 +09:00
Stephen Seo c2dc5124c9 Rename a UnitTest for ThreadPool 2021-09-08 10:49:32 +09:00
Stephen Seo 64e9b18f89 Fix UnitTests for ThreadPool 2021-09-08 10:46:26 +09:00
Stephen Seo 222fbb0862 Make ThreadPool::getThreadCount() constexpr 2021-09-07 20:24:47 +09:00
Stephen Seo 4fd463a870 Add tests for ThreadPool::getThreadCount() 2021-09-07 20:21:20 +09:00
Stephen Seo 5c72ecb74b Add ThreadPool::getThreadCount()
Without the previously removed THREADCOUNT constant, there was no way to
query the ThreadCount from outside the class. This function provides
this.
2021-09-07 20:18:41 +09:00
Stephen Seo beb3eae6e2 Remove "THREADCOUNT" from ThreadPool
Redundant because "SIZE" provides the same value.
2021-09-07 20:15:53 +09:00
Stephen Seo e8f5e57772 Add missing include for "array" 2021-09-07 18:28:44 +09:00
Stephen Seo a851c63619 Workaround for gcc debug build fail
Instead of defining temporary structs in functions, the temporary
structs are defined as part of the Manager class.
2021-09-07 18:11:06 +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 dc7c29f7cc Fix failing to wait for ThreadPool to finish 2021-09-07 12:24:27 +09:00
Stephen Seo d32c6d8d40 Fix CMakeLists.txt to use FindThreads 2021-09-07 12:09:02 +09:00
Stephen Seo 183eab10b3 Update documentation 2021-09-07 12:04:42 +09:00
Stephen Seo 6a8902ad51 Allow ThreadPool to be created with < 2 ThreadCount 2021-09-07 11:46:38 +09:00
Stephen Seo 16f410c8ef Add isQueueEmpty() to ThreadPool 2021-09-07 11:29:06 +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 2e9e18a964 Impl ThreadPool 2021-09-06 15:54:24 +09:00
Stephen Seo 381e069ec2 Add UnitTest for previously fixed bug 2021-05-17 12:34:12 +09:00
Stephen Seo e0f30db951 Fix bug using callForMatchingFunction(s)
Fixed bug where invalid entity ids were used when using the
callForMatchingFunction(s) functions.
2021-05-16 20:07:14 +09:00
Stephen Seo a310a8ae38 Add forMatchingSimple, refactorings 2019-11-06 16:33:12 +09:00
Stephen Seo e0da16a63e Replace vector with deque for Component storage
When reallocating more data, vector moves the original data to a new
buffer. Deque preserves the location of the original data, preventing
invalidated pointers to existing data when additional allocation is
required.
2019-11-06 15:47:16 +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 50a84f5c8c Minor whitespace fixes, minor .gitignore change 2019-07-11 19:47:39 +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 8c462b83a1 Add static_assert, components must be def-const
EC::Manager will fail to compile if any given Component is not default
constructible, so a static_assert and ctest was added.
2018-09-11 12:16:04 +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 2411125003 Fix C++14 requirement in CMakeLists.txt 2018-05-21 19:24:49 +09:00
Stephen Seo b9589b909d Minor fixes/improvements 2018-05-19 16:09:31 +09:00
Stephen Seo 9d914ce10d Update documentation 2018-05-18 20:47:34 +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 1e1344cdae Fix warning about unused capture for lambda fn 2018-05-16 16:18:11 +09:00
Stephen Seo 3b742735f0 Add type reference to Components/Tags in Manager 2018-05-16 14:48:33 +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