Stephen Seo
222639ec3a
Update CMakeLists.txt cmake version
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