Squashed 'third_party/marl/' changes from 7b43abfc4..f936d9438 f936d9438 Allow Affinity to be constructed from a vector. (#210) git-subtree-dir: third_party/marl git-subtree-split: f936d9438b2b0d92512075ea4dd5e0d47f80094a
diff --git a/include/marl/thread.h b/include/marl/thread.h index 68434cb..1fb2436 100644 --- a/include/marl/thread.h +++ b/include/marl/thread.h
@@ -99,6 +99,9 @@ MARL_EXPORT Affinity(std::initializer_list<Core>, Allocator* allocator); + MARL_EXPORT Affinity(const containers::vector<Core, 32>&, + Allocator* allocator); + // count() returns the number of enabled cores in the affinity. MARL_EXPORT size_t count() const;
diff --git a/src/thread.cpp b/src/thread.cpp index d0750fa..30897f0 100644 --- a/src/thread.cpp +++ b/src/thread.cpp
@@ -129,6 +129,10 @@ } } +Thread::Affinity::Affinity(const containers::vector<Core, 32>& coreList, + Allocator* allocator) + : cores(coreList, allocator) {} + Thread::Affinity Thread::Affinity::all( Allocator* allocator /* = Allocator::Default */) { Thread::Affinity affinity(allocator);
diff --git a/src/thread_test.cpp b/src/thread_test.cpp index 69370f9..306a959 100644 --- a/src/thread_test.cpp +++ b/src/thread_test.cpp
@@ -100,6 +100,20 @@ } } +TEST_F(WithoutBoundScheduler, ThreadAffinityFromVector) { + marl::containers::vector<marl::Thread::Core, 32> cores(allocator); + cores.push_back(core(10)); + cores.push_back(core(20)); + cores.push_back(core(30)); + cores.push_back(core(40)); + auto affinity = marl::Thread::Affinity(cores, allocator); + EXPECT_EQ(affinity.count(), cores.size()); + EXPECT_EQ(affinity[0], core(10)); + EXPECT_EQ(affinity[1], core(20)); + EXPECT_EQ(affinity[2], core(30)); + EXPECT_EQ(affinity[3], core(40)); +} + TEST_F(WithoutBoundScheduler, ThreadAffinityPolicyOneOf) { auto all = marl::Thread::Affinity( {