Commit graph

102 commits

Author SHA1 Message Date
94ba0b70e8 Isolated code that fails to compile on gcc
The original changes is in the "refactoring" branch. This branch has
removed most of the changes except for the specific parts of code that
triggers the compilation to fail on gcc.

The minor lambda fn capture change ("function" to "&function") is to
fix compiler error with Clang.

EDIT: It seems if the UnitTests are compiled with the "Release"
build-type instead of "Debug", then gcc does not fail to compile.
2021-09-07 17:48:29 +09:00
dc7c29f7cc Fix failing to wait for ThreadPool to finish 2021-09-07 12:24:27 +09:00
d32c6d8d40 Fix CMakeLists.txt to use FindThreads 2021-09-07 12:09:02 +09:00
99fef060d5 Merge branch 'threadpool' 2021-09-07 12:07:05 +09:00
183eab10b3 Update documentation 2021-09-07 12:04:42 +09:00
6a8902ad51 Allow ThreadPool to be created with < 2 ThreadCount 2021-09-07 11:46:38 +09:00
16f410c8ef Add isQueueEmpty() to ThreadPool 2021-09-07 11:29:06 +09:00
13152d1c22 Tweak sleep times for threadpool to finish
Remove debug print
2021-09-06 21:01:01 +09:00
0f2a98b886 Usage of ThreadPool fixes 2021-09-06 20:57:13 +09:00
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
2e9e18a964 Impl ThreadPool 2021-09-06 15:54:24 +09:00
381e069ec2 Add UnitTest for previously fixed bug 2021-05-17 12:34:12 +09:00
f9c40984c7 Update LICENSE year 2021-05-16 20:08:06 +09:00
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
d1b0de62f2 Update LICENSE year 2019-11-06 16:44:28 +09:00
a310a8ae38 Add forMatchingSimple, refactorings 2019-11-06 16:33:12 +09:00
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
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
50a84f5c8c Minor whitespace fixes, minor .gitignore change 2019-07-11 19:47:39 +09:00
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
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
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
2411125003 Fix C++14 requirement in CMakeLists.txt 2018-05-21 19:24:49 +09:00
08433bcb4e Update README.md 2018-05-21 16:49:37 +09:00
8f35cf4fa4 Update LICENSE year 2018-05-21 16:46:31 +09:00
b9589b909d Minor fixes/improvements 2018-05-19 16:09:31 +09:00
9d914ce10d Update documentation 2018-05-18 20:47:34 +09:00
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
1e1344cdae Fix warning about unused capture for lambda fn 2018-05-16 16:18:11 +09:00
3b742735f0 Add type reference to Components/Tags in Manager 2018-05-16 14:48:33 +09:00
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
f8d27d65d3 Remove .gitlab-ci.yml 2017-12-01 14:03:47 +09:00
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
477580ad34 Minor fixes to documentation 2017-11-24 15:06:57 +09:00
60bf841c11 Change CleanupReturnType to std::vector 2017-11-24 14:58:00 +09:00
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
6b0e950c84 Improve efficiency of stored function calling
Previously, every called function iterated through all entities for
calling the function on matching entities.

Now, callForMatchingFunctions iterates through all entities once,
stores matching entities for each function, then calls the functions on
the matching entities.
2017-11-14 13:51:24 +09:00
248cf2676a Add ptr versions of forMatchingSignature fns 2017-11-14 13:11:32 +09:00
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
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
d809d34716 Add getCurrentSize and getCurrentCapacity 2017-11-03 17:11:20 +09:00
16fd8e9ec3 Fix minor typo 2017-10-31 14:10:21 +09:00
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
2523831097 Fix unit test 2017-10-06 14:35:37 +09:00
ab580a5565 Replace variable length arrays with std::vector 2017-10-06 12:58:49 +09:00
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
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
396ede1c76 Add const fns to Manager, obey 80 char line limit 2017-09-20 17:18:29 +09:00
bc70089822 Add a test to unit tests 2017-08-29 15:27:58 +09:00
d700b023b3 Fixed keepSomeMatchingFunctions
Previous implementation would fail if functionIndex had wrapped around
2017-07-13 17:28:45 +09:00