- ~ConcurrentTaskSet() : dispenso::ConcurrentTaskSet
- ~ConcurrentVector() : dispenso::ConcurrentVector< T, Traits, SizeTraits >
- ~Future() : dispenso::Future< Result >
-- ~PoolAllocator() : dispenso::PoolAllocator
+- ~PoolAllocatorT() : dispenso::PoolAllocatorT< kThreadSafe >
- ~ResourcePool() : dispenso::ResourcePool< T >
- ~TaskSet() : dispenso::TaskSet
- ~ThreadPool() : dispenso::ThreadPool
diff --git a/graph_8cpp_source.html b/graph_8cpp_source.html
index 31ee3c4..abda1e8 100644
--- a/graph_8cpp_source.html
+++ b/graph_8cpp_source.html
@@ -107,141 +107,204 @@
8#include <dispenso/graph.h>
-
-
-
- 12constexpr size_t kToDelete = std::numeric_limits<size_t>::max();
-
-
- 15 std::vector<const dispenso::BiPropNode*>& s1,
- 16 const std::vector<const dispenso::BiPropNode*>& s2) {
- 17 std::vector<const dispenso::BiPropNode*> tmp(s1);
-
- 19 std::set_union(tmp.cbegin(), tmp.cend(), s2.cbegin(), s2.cend(), std::back_inserter(s1));
-
-
-
- 23 auto it = std::upper_bound(s.begin(), s.end(), node);
- 24 if (it == s.begin() || *(it - 1) != node) {
-
-
-
-
-
-
+
+
+
+
+
+ 14constexpr size_t kToDelete = std::numeric_limits<size_t>::max();
+
+
+ 17 std::vector<const dispenso::BiPropNode*>& s1,
+ 18 const std::vector<const dispenso::BiPropNode*>& s2) {
+ 19 std::vector<const dispenso::BiPropNode*> tmp(s1);
+
+ 21 std::set_union(tmp.cbegin(), tmp.cend(), s2.cbegin(), s2.cend(), std::back_inserter(s1));
+
+
+
+ 25 auto it = std::upper_bound(s.begin(), s.end(), node);
+ 26 if (it == s.begin() || *(it - 1) != node) {
+
+
+
+
- 32void BiPropNode::biPropDependsOnOneNode(BiPropNode& node) {
- 33 Node::dependsOnOneNode(node);
- 34 if (node.biPropSet_ ==
nullptr && biPropSet_ ==
nullptr) {
- 35 biPropSet_ = std::make_shared<std::vector<const BiPropNode*>>();
- 36 set_insert(*biPropSet_,
this);
- 37 set_insert(*biPropSet_, &node);
- 38 node.biPropSet_ = biPropSet_;
- 39 }
else if (node.biPropSet_ !=
nullptr && biPropSet_ !=
nullptr) {
- 40 set_union(*biPropSet_, *node.biPropSet_);
- 41 node.biPropSet_ = biPropSet_;
- 42 }
else if (biPropSet_ ==
nullptr) {
- 43 biPropSet_ = node.biPropSet_;
- 44 set_insert(*biPropSet_,
this);
-
- 46 node.biPropSet_ = biPropSet_;
- 47 set_insert(*biPropSet_, &node);
-
-
-
-
-
- 53 decrementDependentCounters();
- 54 const size_t numGraphPredecessors = markNodesWithPredicessors();
- 55 if (numGraphPredecessors != 0) {
- 56 removePredecessorDependencies(numGraphPredecessors);
-
-
-
-
-
-
- 63 for (N& node : nodes_) {
- 64 for (
Node*
const dependent : node.dependents_) {
- 65 dependent->numPredecessors_--;
-
- 67 removeNodeFromBiPropSet(node);
-
-
-
-
- 72size_t SubgraphT<N>::markNodesWithPredicessors() {
- 73 size_t numGraphPredecessors = 0;
- 74 for (N& node : nodes_) {
- 75 if (node.numPredecessors_ != 0) {
- 76 numGraphPredecessors += node.numPredecessors_;
- 77 node.numPredecessors_ = kToDelete;
-
-
- 80 return numGraphPredecessors;
-
-
-
- 84void SubgraphT<N>::removePredecessorDependencies(
size_t numGraphPredecessors) {
- 85 for (SubgraphT<N>& subgraph : graph_->subgraphs_) {
- 86 if (&subgraph ==
this) {
-
-
- 89 for (N& node : subgraph.nodes_) {
- 90 std::vector<Node*>& dependents = node.dependents_;
- 91 size_t num = dependents.size();
- 92 for (
size_t i = 0; i < num;) {
- 93 if (dependents[i]->numPredecessors_ == kToDelete) {
- 94 dependents[i] = dependents[num - 1];
-
- 96 if (--numGraphPredecessors == 0) {
- 97 dependents.resize(num);
-
-
-
-
-
-
- 104 dependents.resize(num);
-
-
-
-
-
-
-
- 112 subgraph.graph_ =
this;
-
-
-
-
-
- 118 subgraphs_ = std::move(other.subgraphs_);
-
- 120 subgraph.graph_ =
this;
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-SubgraphT< N > & addSubgraph()
-
-
-
+
+
+ 34void BiPropNode::biPropDependsOnOneNode(BiPropNode& node) {
+ 35 Node::dependsOnOneNode(node);
+ 36 if (node.biPropSet_ ==
nullptr && biPropSet_ ==
nullptr) {
+ 37 biPropSet_ = std::make_shared<std::vector<const BiPropNode*>>();
+ 38 set_insert(*biPropSet_,
this);
+ 39 set_insert(*biPropSet_, &node);
+ 40 node.biPropSet_ = biPropSet_;
+ 41 }
else if (node.biPropSet_ !=
nullptr && biPropSet_ !=
nullptr) {
+ 42 set_union(*biPropSet_, *node.biPropSet_);
+ 43 node.biPropSet_ = biPropSet_;
+ 44 }
else if (biPropSet_ ==
nullptr) {
+ 45 biPropSet_ = node.biPropSet_;
+ 46 set_insert(*biPropSet_,
this);
+
+ 48 node.biPropSet_ = biPropSet_;
+ 49 set_insert(*biPropSet_, &node);
+
+
+
+
+
+ 55 decrementDependentCounters();
+ 56 const size_t numGraphPredecessors = markNodesWithPredicessors();
+ 57 if (numGraphPredecessors != 0) {
+ 58 removePredecessorDependencies(numGraphPredecessors);
+
+ 60 for (NodeType* n : nodes_) {
+
+
+
+
+
+
+
+
+ 69 for (NodeType* n : nodes_) {
+
+
+
+
+
+ 75void SubgraphT<N>::decrementDependentCounters() {
+ 76 for (N* node : nodes_) {
+ 77 for (Node*
const dependent : node->dependents_) {
+ 78 dependent->numPredecessors_--;
+
+ 80 removeNodeFromBiPropSet(node);
+
+
+
+
+ 85size_t SubgraphT<N>::markNodesWithPredicessors() {
+ 86 size_t numGraphPredecessors = 0;
+ 87 for (N* node : nodes_) {
+ 88 if (node->numPredecessors_ != 0) {
+ 89 numGraphPredecessors += node->numPredecessors_;
+ 90 node->numPredecessors_ = kToDelete;
+
+
+ 93 return numGraphPredecessors;
+
+
+
+ 97void SubgraphT<N>::removePredecessorDependencies(
size_t numGraphPredecessors) {
+ 98 for (SubgraphT<N>& subgraph : graph_->subgraphs_) {
+ 99 if (&subgraph ==
this) {
+
+
+ 102 for (N* node : subgraph.nodes_) {
+ 103 std::vector<Node*>& dependents = node->dependents_;
+ 104 size_t num = dependents.size();
+ 105 for (
size_t i = 0; i < num;) {
+ 106 if (dependents[i]->numPredecessors_ == kToDelete) {
+ 107 dependents[i] = dependents[num - 1];
+
+ 109 if (--numGraphPredecessors == 0) {
+ 110 dependents.resize(num);
+
+
+
+
+
+
+ 117 dependents.resize(num);
+
+
+
+
+
+ 123constexpr size_t kMaxCache = 8;
+
+
+
+ 127constexpr size_t kMaxChunkCapacity = 1 << 16;
+ 128std::vector<std::unique_ptr<NoLockPoolAllocator>> g_sgcache[2];
+ 129std::mutex g_sgcacheMtx;
+
+
+ 132constexpr size_t kCacheIndex =
size_t{std::is_same<T, BiPropNode>::value};
+
+
+
+
+ 137typename SubgraphT<N>::PoolPtr SubgraphT<N>::getAllocator() {
+ 138 std::unique_ptr<NoLockPoolAllocator> ptr;
+
+ 140 auto& cache = g_sgcache[kCacheIndex<N>];
+
+
+ 143 std::lock_guard<std::mutex> lk(g_sgcacheMtx);
+
+ 145 ptr = std::make_unique<NoLockPoolAllocator>(
+ 146 sizeof(NodeType), 128 *
sizeof(NodeType), ::malloc, ::free);
+
+ 148 ptr = std::move(cache.back());
+
+
+
+
+ 153 return PoolPtr(ptr.release(), releaseAllocator);
+
+
+
+ 157void SubgraphT<N>::releaseAllocator(NoLockPoolAllocator* ptr) {
+
+
+
+ 161 if (ptr->totalChunkCapacity() < kMaxChunkCapacity) {
+ 162 auto& cache = g_sgcache[kCacheIndex<N>];
+
+ 164 std::lock_guard<std::mutex> lk(g_sgcacheMtx);
+ 165 if (cache.size() < kMaxCache) {
+ 166 cache.emplace_back(ptr);
+
+
+
+
+
+
+
+
+
+
+ 177 subgraph.graph_ =
this;
+
+
+
+
+
+ 183 subgraphs_ = std::move(other.subgraphs_);
+
+ 185 subgraph.graph_ =
this;
+
+
+
+
+
+
+
+ 193 return subgraphs_.back();
+
+
+
+
+
+
+
+
+
+
+SubgraphT< N > & addSubgraph()
+
+
diff --git a/graph_8h_source.html b/graph_8h_source.html
index 7f67718..f2c0e25 100644
--- a/graph_8h_source.html
+++ b/graph_8h_source.html
@@ -108,523 +108,541 @@
- 10#include <dispenso/platform.h>
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+ 17#include <dispenso/platform.h>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 202void callFunctor(
void* ptr) {
- 203 (*
static_cast<F*
>(ptr))();
-
-
-
- 207void destroyFunctor(
void* ptr) {
- 208 static_cast<F*
>(ptr)->~F();
- 209 constexpr size_t kFuncSize =
static_cast<size_t>(dispenso::detail::nextPow2(
sizeof(F)));
- 210 dispenso::deallocSmallBuffer<kFuncSize>(ptr);
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 204void callFunctor(
void* ptr) {
+ 205 (*
static_cast<F*
>(ptr))();
+
+
+
+ 209void destroyFunctor(
void* ptr) {
+ 210 static_cast<F*
>(ptr)->~F();
+ 211 constexpr size_t kFuncSize =
static_cast<size_t>(dispenso::detail::nextPow2(
sizeof(F)));
+ 212 dispenso::deallocSmallBuffer<kFuncSize>(ptr);
+
-
-
-
-
-
- 223 Node& operator=(
const Node&) =
delete;
-
- 225 : numIncompletePredecessors_(other.numIncompletePredecessors_.load()),
- 226 numPredecessors_(other.numPredecessors_),
- 227 invoke_(other.invoke_),
- 228 destroy_(other.destroy_),
- 229 funcBuffer_(other.funcBuffer_),
- 230 dependents_(std::move(other.dependents_)) {
- 231 other.funcBuffer_ =
nullptr;
-
-
-
- 235 destroy_(funcBuffer_);
-
-
- 243 template <
typename... Ns>
-
- 245 ((void)std::initializer_list<int>{(dependsOnOneNode(nodes), 0)...});
-
-
- 252 invoke_(funcBuffer_);
- 253 numIncompletePredecessors_.store(kCompleted, std::memory_order_release);
-
-
-
- 262 for (
const Node* dependent : dependents_) {
-
-
-
-
-
- 273 for (
Node* dependent : dependents_) {
-
-
-
-
- 281 return numPredecessors_;
-
-
- 290 return numIncompletePredecessors_.load(std::memory_order_relaxed) == kCompleted;
-
-
- 300 if (numIncompletePredecessors_.load(std::memory_order_relaxed) == kCompleted) {
- 301 numIncompletePredecessors_.store(0, std::memory_order_relaxed);
-
-
-
-
-
-
- 313 numIncompletePredecessors_.store(kCompleted, std::memory_order_relaxed);
-
-
-
- 317 template <class F, class X = std::enable_if_t<!std::is_base_of<Node, F>::value,
void>>
- 318 Node(F&& f) : numIncompletePredecessors_(0) {
- 319 using FNoRef =
typename std::remove_reference<F>::type;
-
- 321 constexpr size_t kFuncSize =
static_cast<size_t>(detail::nextPow2(
sizeof(FNoRef)));
- 322 funcBuffer_ = allocSmallBuffer<kFuncSize>();
- 323 new (funcBuffer_) FNoRef(std::forward<F>(f));
- 324 invoke_ = ::detail::callFunctor<FNoRef>;
- 325 destroy_ = ::detail::destroyFunctor<FNoRef>;
-
-
- 328 void dependsOnOneNode(Node& node) {
- 329 node.dependents_.emplace_back(
this);
-
-
-
- 333 static constexpr size_t kCompleted = std::numeric_limits<size_t>::max();
- 334 mutable std::atomic<size_t> numIncompletePredecessors_;
- 335 size_t numPredecessors_ = 0;
-
-
- 338 using InvokerType = void (*)(
void* ptr);
-
-
- 341 InvokerType destroy_;
-
-
- 344 std::vector<Node*> dependents_;
+
+
+
+
+
+
+
+ 225 Node& operator=(
const Node&) =
delete;
+
+ 227 : numIncompletePredecessors_(other.numIncompletePredecessors_.load()),
+ 228 numPredecessors_(other.numPredecessors_),
+ 229 invoke_(other.invoke_),
+ 230 destroy_(other.destroy_),
+ 231 funcBuffer_(other.funcBuffer_),
+ 232 dependents_(std::move(other.dependents_)) {
+ 233 other.funcBuffer_ =
nullptr;
+
+
+
+ 237 destroy_(funcBuffer_);
+
+
+ 245 template <
typename... Ns>
+
+ 247 ((void)std::initializer_list<int>{(dependsOnOneNode(nodes), 0)...});
+
+
+ 254 invoke_(funcBuffer_);
+ 255 numIncompletePredecessors_.store(kCompleted, std::memory_order_release);
+
+
+
+ 264 for (
const Node* dependent : dependents_) {
+
+
+
+
+
+ 275 for (
Node* dependent : dependents_) {
+
+
+
+
+ 283 return numPredecessors_;
+
+
+ 292 return numIncompletePredecessors_.load(std::memory_order_relaxed) == kCompleted;
+
+
+ 302 if (numIncompletePredecessors_.load(std::memory_order_relaxed) == kCompleted) {
+ 303 numIncompletePredecessors_.store(0, std::memory_order_relaxed);
+
+
+
+
+
+
+ 315 numIncompletePredecessors_.store(kCompleted, std::memory_order_relaxed);
+
+
+
+ 319 template <class F, class X = std::enable_if_t<!std::is_base_of<Node, F>::value,
void>>
+ 320 Node(F&& f) : numIncompletePredecessors_(0) {
+ 321 using FNoRef =
typename std::remove_reference<F>::type;
+
+ 323 constexpr size_t kFuncSize =
static_cast<size_t>(detail::nextPow2(
sizeof(FNoRef)));
+ 324 funcBuffer_ = allocSmallBuffer<kFuncSize>();
+ 325 new (funcBuffer_) FNoRef(std::forward<F>(f));
+ 326 invoke_ = ::detail::callFunctor<FNoRef>;
+ 327 destroy_ = ::detail::destroyFunctor<FNoRef>;
+
+
+ 330 void dependsOnOneNode(Node& node) {
+ 331 node.dependents_.emplace_back(
this);
+
+
+
+ 335 static constexpr size_t kCompleted = std::numeric_limits<size_t>::max();
+ 336 mutable std::atomic<size_t> numIncompletePredecessors_;
+ 337 size_t numPredecessors_ = 0;
+
+
+ 340 using InvokerType = void (*)(
void* ptr);
+
+
+ 343 InvokerType destroy_;
+
-
- 347 friend class SubgraphT;
- 348 friend class ::detail::ExecutorBase;
- 349 template <
typename G>
- 350 friend void setAllNodesIncomplete(
const G& graph);
-
-
-
-
-
-
-
- 362 :
Node(std::move(other)), biPropSet_(std::move(other.biPropSet_)) {}
- 369 template <
class... Ns>
-
- 371 ((void)std::initializer_list<int>{(biPropDependsOnOneNode(nodes), 0)...});
-
-
-
- 375 template <class T, class X = std::enable_if_t<!std::is_base_of<BiPropNode, T>::value,
void>>
-
- 377 inline void removeFromBiPropSet() {
- 378 if (biPropSet_ !=
nullptr) {
- 379 auto it = std::find(biPropSet_->begin(), biPropSet_->end(),
this);
- 380 if (it != biPropSet_->end()) {
- 381 biPropSet_->erase(it);
-
-
-
-
- 386 DISPENSO_DLL_ACCESS
void biPropDependsOnOneNode(BiPropNode& node);
+ 346 std::vector<Node*> dependents_;
+
+
+ 349 friend class SubgraphT;
+ 350 friend class ::detail::ExecutorBase;
+ 351 template <
typename G>
+ 352 friend void setAllNodesIncomplete(
const G& graph);
+
+
+
+
+
+
+
+ 364 :
Node(std::move(other)), biPropSet_(std::move(other.biPropSet_)) {}
+ 371 template <
class... Ns>
+
+ 373 ((void)std::initializer_list<int>{(biPropDependsOnOneNode(nodes), 0)...});
+
+
+
+ 377 template <class T, class X = std::enable_if_t<!std::is_base_of<BiPropNode, T>::value,
void>>
+
+ 379 inline void removeFromBiPropSet() {
+ 380 if (biPropSet_ !=
nullptr) {
+ 381 auto it = std::find(biPropSet_->begin(), biPropSet_->end(),
this);
+ 382 if (it != biPropSet_->end()) {
+ 383 biPropSet_->erase(it);
+
+
+
- 388 std::shared_ptr<std::vector<const BiPropNode*>> biPropSet_;
+ 388 DISPENSO_DLL_ACCESS
void biPropDependsOnOneNode(BiPropNode& node);
-
- 391 friend class SubgraphT;
- 392 friend class ::detail::ExecutorBase;
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 414 nodes_.push_back(NodeType(std::forward<T>(f)));
- 415 return nodes_.back();
-
-
- 421 return nodes_.size();
+ 390 std::shared_ptr<std::vector<const BiPropNode*>> biPropSet_;
+
+
+ 393 friend class SubgraphT;
+ 394 friend class ::detail::ExecutorBase;
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 408 : graph_(other.graph_),
+ 409 nodes_(std::move(other.nodes_)),
+ 410 allocator_(std::move(other.allocator_)) {}
+
+
+
+ 420 nodes_.push_back(
new (allocator_->alloc()) NodeType(std::forward<T>(f)));
+ 421 return *nodes_.back();
- 428 const N&
node(
size_t index)
const {
- 429 return nodes_[index];
-
-
- 437 return nodes_[index];
-
-
-
- 446 for (
const N&
node : nodes_) {
-
-
-
-
-
- 458 for (N&
node : nodes_) {
-
-
-
-
-
-
-
- 470 inline void removeNodeFromBiPropSet(Node& ) {}
- 471 void removeNodeFromBiPropSet(BiPropNode&
node) {
- 472 node.removeFromBiPropSet();
-
- 474 void decrementDependentCounters();
- 475 size_t markNodesWithPredicessors();
- 476 void removePredecessorDependencies(
size_t numGraphPredecessors);
+
+ 427 return nodes_.size();
+
+ 434 const N&
node(
size_t index)
const {
+ 435 return *nodes_[index];
+
+
+ 443 return *nodes_[index];
+
+
+
+ 452 for (
const N* node : nodes_) {
+
+
+
+
+
+ 464 for (N* node : nodes_) {
+
+
+
+
+
+
+
+ 476 using PoolPtr = std::unique_ptr<NoLockPoolAllocator, DeallocFunc>;
-
-
-
- 481#pragma warning(disable : 4251)
-
- 483 std::deque<N> nodes_;
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 521 return subgraphs_[0].addNode(std::forward<T>(f));
-
-
- 527 return subgraphs_[0].numNodes();
-
- 534 const N&
node(
size_t index)
const {
- 535 return subgraphs_[0].node(index);
-
-
- 543 return subgraphs_[0].node(index);
-
-
-
- 553 return subgraphs_.size();
-
-
- 561 return subgraphs_[index];
-
-
- 569 return subgraphs_[index];
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 602 for (
const N&
node : subgraph.nodes_) {
-
-
-
-
-
-
-
- 615 for (N&
node : subgraph.nodes_) {
-
-
-
-
-
-
-
-
-
-
-
-
- 631#pragma warning(disable : 4251)
-
- 633 std::deque<SubgraphT<N>> subgraphs_;
-
-
-
-
-
-
-
-
- 642using Graph = GraphT<Node>;
- 643using BiPropGraph = GraphT<BiPropNode>;
+ 478 static constexpr size_t kNodeSizeP2 = detail::nextPow2(
sizeof(NodeType));
+
+
+
+ 482 inline void removeNodeFromBiPropSet(Node* ) {}
+ 483 void removeNodeFromBiPropSet(BiPropNode* node) {
+ 484 node->removeFromBiPropSet();
+
+ 486 void decrementDependentCounters();
+ 487 size_t markNodesWithPredicessors();
+ 488 void removePredecessorDependencies(
size_t numGraphPredecessors);
+
+ 490 static PoolPtr getAllocator();
+ 491 static void releaseAllocator(NoLockPoolAllocator* ptr);
+
+
+
+
+ 496#pragma warning(disable : 4251)
+
+ 498 std::vector<N*> nodes_;
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 538 return subgraphs_[0].addNode(std::forward<T>(f));
+
+
+ 544 return subgraphs_[0].numNodes();
+
+ 551 const N&
node(
size_t index)
const {
+ 552 return subgraphs_[0].node(index);
+
+
+ 560 return subgraphs_[0].node(index);
+
+
+
+ 570 return subgraphs_.size();
+
+
+ 578 return subgraphs_[index];
+
+
+ 586 return subgraphs_[index];
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 619 for (
const N* node : subgraph.nodes_) {
+
+
+
+
+
+
+
+ 632 for (N* node : subgraph.nodes_) {
+
+
+
+
+
+
+
+
- 645using Subgraph = SubgraphT<Node>;
- 646using BiPropSubgraph = SubgraphT<BiPropNode>;
-
-
-void biPropDependsOn(Ns &... nodes)
-
-const SubgraphT< N > & subgraphs(size_t index) const
-
-void forEachNode(F &&func) const
-
-SubgraphT< N > & subgraphs(size_t index)
-void forEachNode(F &&func)
-void forEachSubgraph(F &&func) const
-size_t numSubgraphs() const
-void forEachSubgraph(F &&func)
-
-
-const N & node(size_t index) const
-SubgraphT< N > & addSubgraph()
-
-
-
-void forEachDependent(F func)
-void forEachDependent(F func) const
-bool setIncomplete() const
-void setCompleted() const
-void dependsOn(Ns &... nodes)
-size_t numPredecessors() const
-
-
-
-const N & node(size_t index) const
-
-
-void forEachNode(F func) const
-
-
+
+ 646 static constexpr size_t kSubgraphSizeP2 = detail::nextPow2(
sizeof(SubgraphType));
+
+
+
+ 650#pragma warning(disable : 4251)
+
+ 652 std::deque<SubgraphT<N>> subgraphs_;
+
+
+
+
+
+
+
+
+ 661using Graph = GraphT<Node>;
+ 662using BiPropGraph = GraphT<BiPropNode>;
+
+ 664using Subgraph = SubgraphT<Node>;
+ 665using BiPropSubgraph = SubgraphT<BiPropNode>;
+
+
+void biPropDependsOn(Ns &... nodes)
+
+const SubgraphT< N > & subgraphs(size_t index) const
+
+void forEachNode(F &&func) const
+
+SubgraphT< N > & subgraphs(size_t index)
+void forEachNode(F &&func)
+void forEachSubgraph(F &&func) const
+size_t numSubgraphs() const
+void forEachSubgraph(F &&func)
+
+const N & node(size_t index) const
+
+
+
+void forEachDependent(F func)
+void forEachDependent(F func) const
+bool setIncomplete() const
+void setCompleted() const
+void dependsOn(Ns &... nodes)
+size_t numPredecessors() const
+
+
+
+const N & node(size_t index) const
+
+
+void forEachNode(F func) const
+
+
+
diff --git a/graph__executor_8cpp_source.html b/graph__executor_8cpp_source.html
index fe42505..aaac41e 100644
--- a/graph__executor_8cpp_source.html
+++ b/graph__executor_8cpp_source.html
@@ -284,11 +284,11 @@
183template DISPENSO_DLL_ACCESS
void ForwardPropagator::operator()<BiPropGraph>(
const BiPropGraph&);
-
+
void schedule(F &&f, bool skipRecheck=false)
DISPENSO_DLL_ACCESS bool wait()
-
+
void operator()(TaskSetT &taskSet, const G &graph)
void operator()(const G &graph)
void parallel_for(TaskSetT &taskSet, StateContainer &states, const StateGen &defaultState, const ChunkedRange< IntegerT > &range, F &&f, ParForOptions options={})
diff --git a/hierarchy.html b/hierarchy.html
index a04a9cb..bc7a4c6 100644
--- a/hierarchy.html
+++ b/hierarchy.html
@@ -132,7 +132,7 @@
Cdispenso::BiPropNode | |
Cdispenso::OnceFunction | |
Cdispenso::ParForOptions | |
- Cdispenso::PoolAllocator | |
+ Cdispenso::PoolAllocatorT< kThreadSafe > | |
Cdispenso::ReserveTagS | |
Cdispenso::Resource< T > | |
Cdispenso::ResourcePool< T > | |
diff --git a/hierarchy.js b/hierarchy.js
index a585295..756c3d8 100644
--- a/hierarchy.js
+++ b/hierarchy.js
@@ -36,7 +36,7 @@ var hierarchy =
] ],
[ "dispenso::OnceFunction", "classdispenso_1_1_once_function.html", null ],
[ "dispenso::ParForOptions", "structdispenso_1_1_par_for_options.html", null ],
- [ "dispenso::PoolAllocator", "classdispenso_1_1_pool_allocator.html", null ],
+ [ "dispenso::PoolAllocatorT< kThreadSafe >", "classdispenso_1_1_pool_allocator_t.html", null ],
[ "dispenso::ReserveTagS", "structdispenso_1_1_reserve_tag_s.html", null ],
[ "dispenso::Resource< T >", "classdispenso_1_1_resource.html", null ],
[ "dispenso::ResourcePool< T >", "classdispenso_1_1_resource_pool.html", null ],
diff --git a/navtreedata.js b/navtreedata.js
index 41e09d6..cc04d98 100644
--- a/navtreedata.js
+++ b/navtreedata.js
@@ -45,7 +45,7 @@ var NAVTREE =
var NAVTREEINDEX =
[
"annotated.html",
-"functions_rela.html"
+"functions_p.html"
];
var SYNCONMSG = 'click to disable panel synchronisation';
diff --git a/navtreeindex0.js b/navtreeindex0.js
index 140244f..2ac3c85 100644
--- a/navtreeindex0.js
+++ b/navtreeindex0.js
@@ -160,11 +160,13 @@ var NAVTREEINDEX0 =
"classdispenso_1_1_once_function.html#a7bec1f15cb5ca710f21145b37783e052":[0,0,0,22,0],
"classdispenso_1_1_parallel_for_executor.html":[0,0,0,23],
"classdispenso_1_1_parallel_for_executor.html#ae59c8e5924faa0fe0ad03004b22f52db":[0,0,0,23,0],
-"classdispenso_1_1_pool_allocator.html":[0,0,0,25],
-"classdispenso_1_1_pool_allocator.html#a38a9be5293b77653b1560cb8e74b5bd4":[0,0,0,25,2],
-"classdispenso_1_1_pool_allocator.html#a5c40ea70c1e81435ee7c9152fb9ce62a":[0,0,0,25,1],
-"classdispenso_1_1_pool_allocator.html#a7a393687ca662206fea08d6d261cdd20":[0,0,0,25,0],
-"classdispenso_1_1_pool_allocator.html#ae7121e9dcebfeb09a6a045d04455a582":[0,0,0,25,3],
+"classdispenso_1_1_pool_allocator_t.html":[0,0,0,25],
+"classdispenso_1_1_pool_allocator_t.html#a04ec8c4a58977f8ca6011431e1860036":[0,0,0,25,2],
+"classdispenso_1_1_pool_allocator_t.html#a67dc4676c39f7226c23ac48ea1a58ad1":[0,0,0,25,3],
+"classdispenso_1_1_pool_allocator_t.html#a6f1cf4cfc584a9eef84a3e5e4e92ad60":[0,0,0,25,1],
+"classdispenso_1_1_pool_allocator_t.html#a811782e39e4b441b960bc35757af59c1":[0,0,0,25,5],
+"classdispenso_1_1_pool_allocator_t.html#a82adb70b33422125a6f3de59a0b63d11":[0,0,0,25,0],
+"classdispenso_1_1_pool_allocator_t.html#add24c6cf8e3ea586940a18acf7959a4d":[0,0,0,25,4],
"classdispenso_1_1_r_w_lock.html":[0,0,0,29],
"classdispenso_1_1_resource.html":[0,0,0,27],
"classdispenso_1_1_resource.html#a61190270b880598f6f816905299fb858":[0,0,0,27,0],
@@ -247,7 +249,5 @@ var NAVTREEINDEX0 =
"functions_l.html":[0,3,0,9],
"functions_m.html":[0,3,0,10],
"functions_n.html":[0,3,0,11],
-"functions_o.html":[0,3,0,12],
-"functions_p.html":[0,3,0,13],
-"functions_r.html":[0,3,0,14]
+"functions_o.html":[0,3,0,12]
};
diff --git a/navtreeindex1.js b/navtreeindex1.js
index ad0ee13..837da77 100644
--- a/navtreeindex1.js
+++ b/navtreeindex1.js
@@ -1,5 +1,7 @@
var NAVTREEINDEX1 =
{
+"functions_p.html":[0,3,0,13],
+"functions_r.html":[0,3,0,14],
"functions_rela.html":[0,3,3],
"functions_s.html":[0,3,0,15],
"functions_t.html":[0,3,0,16],
diff --git a/pool__allocator_8cpp_source.html b/pool__allocator_8cpp_source.html
index f5717bb..72e64cb 100644
--- a/pool__allocator_8cpp_source.html
+++ b/pool__allocator_8cpp_source.html
@@ -110,75 +110,117 @@
-
-
-
- 15 std::function<
void*(
size_t)> allocFunc,
- 16 std::function<
void(
void*)> deallocFunc)
- 17 : chunkSize_(chunkSize),
- 18 allocSize_(allocSize),
- 19 chunksPerAlloc_(allocSize / chunkSize),
- 20 allocFunc_(std::move(allocFunc)),
- 21 deallocFunc_(std::move(deallocFunc)) {
-
- 23 chunks_.reserve(chunksPerAlloc_);
-
-
-
-
- 28 uint32_t allocId = backingAllocLock_.fetch_or(1, std::memory_order_acquire);
-
-
- 31 if (chunks_.empty()) {
- 32 char* buffer =
reinterpret_cast<char*
>(allocFunc_(allocSize_));
- 33 backingAllocs_.push_back(buffer);
-
- 35 for (
size_t i = 0; i < chunksPerAlloc_ - 1; ++i) {
- 36 chunks_.push_back(buffer);
-
-
- 39 backingAllocLock_.store(0, std::memory_order_release);
-
-
- 42 char* back = chunks_.back();
-
- 44 backingAllocLock_.store(0, std::memory_order_release);
-
-
- 47 std::this_thread::yield();
-
-
-
-
-
-
-
-
-
-
-
-
-
- 61 uint32_t allocId = backingAllocLock_.fetch_or(1, std::memory_order_acquire);
-
- 63 chunks_.push_back(ptr);
- 64 backingAllocLock_.store(0, std::memory_order_release);
-
-
-
-
-
-
- 71 for (
char* backing : backingAllocs_) {
- 72 deallocFunc_(backing);
-
-
+ 12template <
bool kThreadSafe>
+
+
+
+ 16 std::function<
void*(
size_t)> allocFunc,
+ 17 std::function<
void(
void*)> deallocFunc)
+ 18 : chunkSize_(chunkSize),
+ 19 allocSize_(allocSize),
+ 20 chunksPerAlloc_(allocSize / chunkSize),
+ 21 allocFunc_(std::move(allocFunc)),
+ 22 deallocFunc_(std::move(deallocFunc)) {
+
+ 24 chunks_.reserve(chunksPerAlloc_);
+
+
+ 27template <
bool kThreadSafe>
+
+
+
+
+ 32 allocId = backingAllocLock_.fetch_or(1, std::memory_order_acquire);
+
+
+
+ 36 if (chunks_.empty()) {
+
+ 38 if (backingAllocs2_.empty()) {
+ 39 buffer =
reinterpret_cast<char*
>(allocFunc_(allocSize_));
+
+ 41 buffer = backingAllocs2_.back();
+ 42 backingAllocs2_.pop_back();
+
+ 44 backingAllocs_.push_back(buffer);
+
+ 46 for (
size_t i = 0; i < chunksPerAlloc_ - 1; ++i) {
+ 47 chunks_.push_back(buffer);
+
+
+
+ 51 backingAllocLock_.store(0, std::memory_order_release);
+
+
+
+ 55 char* back = chunks_.back();
+
+
+ 58 backingAllocLock_.store(0, std::memory_order_release);
+
+
+
+ 62 std::this_thread::yield();
+
+
+
+
+ 67template <
bool kThreadSafe>
+
+
+
+
+
+
+
-
-DISPENSO_DLL_ACCESS char * alloc()
-DISPENSO_DLL_ACCESS ~PoolAllocator()
-DISPENSO_DLL_ACCESS PoolAllocator(size_t chunkSize, size_t allocSize, std::function< void *(size_t)> allocFunc, std::function< void(void *)> deallocFunc)
-DISPENSO_DLL_ACCESS void dealloc(char *ptr)
+
+
+
+ 79 allocId = backingAllocLock_.fetch_or(1, std::memory_order_acquire);
+
+
+ 82 chunks_.push_back(ptr);
+
+ 84 backingAllocLock_.store(0, std::memory_order_release);
+
+
+
+
+
+
+ 91template <
bool kThreadSafe>
+
+
+ 94 if (backingAllocs2_.size() < backingAllocs_.size()) {
+ 95 std::swap(backingAllocs2_, backingAllocs_);
+
+ 97 for (
char* ba : backingAllocs_) {
+ 98 backingAllocs2_.push_back(ba);
+
+ 100 backingAllocs_.clear();
+
+
+ 103template <
bool kThreadSafe>
+
+ 105 for (
char* backing : backingAllocs_) {
+ 106 deallocFunc_(backing);
+
+ 108 for (
char* backing : backingAllocs2_) {
+ 109 deallocFunc_(backing);
+
+
+
+
+
+
+
+
+DISPENSO_DLL_ACCESS char * alloc()
+DISPENSO_DLL_ACCESS void clear()
+DISPENSO_DLL_ACCESS ~PoolAllocatorT()
+DISPENSO_DLL_ACCESS PoolAllocatorT(size_t chunkSize, size_t allocSize, std::function< void *(size_t)> allocFunc, std::function< void(void *)> deallocFunc)
+DISPENSO_DLL_ACCESS void dealloc(char *ptr)
diff --git a/pool__allocator_8h.html b/pool__allocator_8h.html
index 4fbf0d9..4c5c600 100644
--- a/pool__allocator_8h.html
+++ b/pool__allocator_8h.html
@@ -97,7 +97,8 @@
@@ -110,14 +111,54 @@
A pool allocator to help reduce calls to the underlying allocation and deallocation functions that can be provided custom backing allocation and deallocation functions, e.g. cudaMalloc, cudaFree.
Definition in file pool_allocator.h.
-
+
+
+◆ NoLockPoolAllocator
+
+
+
+◆ PoolAllocator
+
+
+
diff --git a/pool__allocator_8h.js b/pool__allocator_8h.js
index 9efffe6..d183c50 100644
--- a/pool__allocator_8h.js
+++ b/pool__allocator_8h.js
@@ -1,4 +1,4 @@
var pool__allocator_8h =
[
- [ "dispenso::PoolAllocator", "classdispenso_1_1_pool_allocator.html", "classdispenso_1_1_pool_allocator" ]
+ [ "dispenso::PoolAllocatorT< kThreadSafe >", "classdispenso_1_1_pool_allocator_t.html", "classdispenso_1_1_pool_allocator_t" ]
];
\ No newline at end of file
diff --git a/pool__allocator_8h_source.html b/pool__allocator_8h_source.html
index ff64c72..9500d95 100644
--- a/pool__allocator_8h_source.html
+++ b/pool__allocator_8h_source.html
@@ -116,40 +116,52 @@
-
-
-
-
-
-
41 std::function<
void*(
size_t)> allocFunc,
-
42 std::function<
void(
void*)> deallocFunc);
-
-
49 DISPENSO_DLL_ACCESS
char*
alloc();
-
-
56 DISPENSO_DLL_ACCESS
void dealloc(
char* ptr);
-
-
-
-
-
64 const size_t chunkSize_;
-
65 const size_t allocSize_;
-
66 const size_t chunksPerAlloc_;
-
-
68 std::function<
void*(size_t)> allocFunc_;
-
69 std::function<void(
void*)> deallocFunc_;
-
-
-
72 alignas(kCacheLineSize) std::atomic<uint32_t> backingAllocLock_{0};
-
73 std::vector<char*> backingAllocs_;
-
-
75 std::vector<char*> chunks_;
-
+
28template <
bool kThreadSafe>
+
+
+
+
+
+
42 std::function<
void*(
size_t)> allocFunc,
+
43 std::function<
void(
void*)> deallocFunc);
+
+
50 DISPENSO_DLL_ACCESS
char*
alloc();
+
+
57 DISPENSO_DLL_ACCESS
void dealloc(
char* ptr);
+
+
64 DISPENSO_DLL_ACCESS
void clear();
+
+
+
71 return (backingAllocs2_.size() + backingAllocs_.size()) * chunksPerAlloc_;
+
+
-
-
-
DISPENSO_DLL_ACCESS char * alloc()
-
DISPENSO_DLL_ACCESS ~PoolAllocator()
-
DISPENSO_DLL_ACCESS void dealloc(char *ptr)
+
+
79 const size_t chunkSize_;
+
80 const size_t allocSize_;
+
81 const size_t chunksPerAlloc_;
+
+
83 std::function<
void*(size_t)> allocFunc_;
+
84 std::function<void(
void*)> deallocFunc_;
+
+
+
87 alignas(kCacheLineSize) std::atomic<uint32_t> backingAllocLock_{0};
+
88 std::vector<char*> backingAllocs_;
+
89 std::vector<char*> backingAllocs2_;
+
+
91 std::vector<char*> chunks_;
+
+
+
94using PoolAllocator = PoolAllocatorT<true>;
+
95using NoLockPoolAllocator = PoolAllocatorT<false>;
+
+
+
+
DISPENSO_DLL_ACCESS char * alloc()
+
DISPENSO_DLL_ACCESS void clear()
+
DISPENSO_DLL_ACCESS ~PoolAllocatorT()
+
size_t totalChunkCapacity() const
+
DISPENSO_DLL_ACCESS void dealloc(char *ptr)
diff --git a/search/all_0.js b/search/all_0.js
index 630a0a8..5815750 100644
--- a/search/all_0.js
+++ b/search/all_0.js
@@ -3,7 +3,7 @@ var searchData=
['acquire_0',['acquire',['../classdispenso_1_1_resource_pool.html#aa3dfd898745a3d729f6ab66311ffd443',1,'dispenso::ResourcePool']]],
['addnode_1',['addNode',['../classdispenso_1_1_subgraph_t.html#a3f314f17214ede38225e89be5cdd79ab',1,'dispenso::SubgraphT::addNode()'],['../classdispenso_1_1_graph_t.html#a13d24b1056de5324500d20702661fa7e',1,'dispenso::GraphT::addNode(T &&f)']]],
['addsubgraph_2',['addSubgraph',['../classdispenso_1_1_graph_t.html#adf47c5ba380b61e20df7ec680a1cca43',1,'dispenso::GraphT']]],
- ['alloc_3',['alloc',['../classdispenso_1_1_pool_allocator.html#a38a9be5293b77653b1560cb8e74b5bd4',1,'dispenso::PoolAllocator']]],
+ ['alloc_3',['alloc',['../classdispenso_1_1_pool_allocator_t.html#a04ec8c4a58977f8ca6011431e1860036',1,'dispenso::PoolAllocatorT']]],
['allocsmallbuffer_4',['allocSmallBuffer',['../small__buffer__allocator_8h.html#ab83550597ed4347b3d89d15bb16cd49a',1,'dispenso']]],
['approxbytesallocatedsmallbuffer_5',['approxBytesAllocatedSmallBuffer',['../small__buffer__allocator_8h.html#ad883cfcdabda87d64afdab3d04f11a47',1,'dispenso']]],
['arrive_5fand_5fwait_6',['arrive_and_wait',['../classdispenso_1_1_latch.html#a20d9a291572a64adf4cb2c419f195292',1,'dispenso::Latch']]],
diff --git a/search/all_10.js b/search/all_10.js
index 5f0f2c9..adf8476 100644
--- a/search/all_10.js
+++ b/search/all_10.js
@@ -8,8 +8,9 @@ var searchData=
['threadpriority_5',['ThreadPriority',['../priority_8h.html#ad04637f316fbde5fba47d984c3700bb7',1,'dispenso']]],
['timedtask_6',['TimedTask',['../classdispenso_1_1_timed_task.html',1,'dispenso']]],
['timedtaskscheduler_7',['TimedTaskScheduler',['../classdispenso_1_1_timed_task_scheduler.html',1,'dispenso::TimedTaskScheduler'],['../classdispenso_1_1_timed_task_scheduler.html#afda120b230ff030f8f9af68c6f7899bc',1,'dispenso::TimedTaskScheduler::TimedTaskScheduler()']]],
- ['try_5fwait_8',['try_wait',['../classdispenso_1_1_latch.html#abe26b747c7ddb5620585faad089b2d3f',1,'dispenso::Latch']]],
- ['tryemplaceupdate_9',['tryEmplaceUpdate',['../classdispenso_1_1_async_request.html#a4fc2ef79cd8d2efd6cbab96b0ca8ef1d',1,'dispenso::AsyncRequest']]],
- ['trywait_10',['tryWait',['../classdispenso_1_1_task_set.html#a17cf46f5790f1a818ac404167a796bd5',1,'dispenso::TaskSet::tryWait()'],['../classdispenso_1_1_concurrent_task_set.html#a5338ddfb4e5d98f769386b7b35b3f7ad',1,'dispenso::ConcurrentTaskSet::tryWait()']]],
- ['tsan_5fannotations_2eh_11',['tsan_annotations.h',['../tsan__annotations_8h.html',1,'']]]
+ ['totalchunkcapacity_8',['totalChunkCapacity',['../classdispenso_1_1_pool_allocator_t.html#a811782e39e4b441b960bc35757af59c1',1,'dispenso::PoolAllocatorT']]],
+ ['try_5fwait_9',['try_wait',['../classdispenso_1_1_latch.html#abe26b747c7ddb5620585faad089b2d3f',1,'dispenso::Latch']]],
+ ['tryemplaceupdate_10',['tryEmplaceUpdate',['../classdispenso_1_1_async_request.html#a4fc2ef79cd8d2efd6cbab96b0ca8ef1d',1,'dispenso::AsyncRequest']]],
+ ['trywait_11',['tryWait',['../classdispenso_1_1_task_set.html#a17cf46f5790f1a818ac404167a796bd5',1,'dispenso::TaskSet::tryWait()'],['../classdispenso_1_1_concurrent_task_set.html#a5338ddfb4e5d98f769386b7b35b3f7ad',1,'dispenso::ConcurrentTaskSet::tryWait()']]],
+ ['tsan_5fannotations_2eh_12',['tsan_annotations.h',['../tsan__annotations_8h.html',1,'']]]
];
diff --git a/search/all_14.js b/search/all_14.js
index 61303fd..4d90671 100644
--- a/search/all_14.js
+++ b/search/all_14.js
@@ -3,7 +3,7 @@ var searchData=
['_7econcurrenttaskset_0',['~ConcurrentTaskSet',['../classdispenso_1_1_concurrent_task_set.html#aaf3fa4c1b3da5fe5c542aa161dcf9478',1,'dispenso::ConcurrentTaskSet']]],
['_7econcurrentvector_1',['~ConcurrentVector',['../classdispenso_1_1_concurrent_vector.html#af180093482b0fdd9c89c1157cab07d5d',1,'dispenso::ConcurrentVector']]],
['_7efuture_2',['~Future',['../classdispenso_1_1_future.html#a14d27f2276dedd9e4e6d17b6fcfdb74f',1,'dispenso::Future']]],
- ['_7epoolallocator_3',['~PoolAllocator',['../classdispenso_1_1_pool_allocator.html#a5c40ea70c1e81435ee7c9152fb9ce62a',1,'dispenso::PoolAllocator']]],
+ ['_7epoolallocatort_3',['~PoolAllocatorT',['../classdispenso_1_1_pool_allocator_t.html#a6f1cf4cfc584a9eef84a3e5e4e92ad60',1,'dispenso::PoolAllocatorT']]],
['_7eresourcepool_4',['~ResourcePool',['../classdispenso_1_1_resource_pool.html#a72c23146a6e1d6fdb38ec623f11106dd',1,'dispenso::ResourcePool']]],
['_7etaskset_5',['~TaskSet',['../classdispenso_1_1_task_set.html#a2fbdd27aa8ffcb216e51f45aad709f12',1,'dispenso::TaskSet']]],
['_7ethreadpool_6',['~ThreadPool',['../classdispenso_1_1_thread_pool.html#acd886dd712424330935b64959e8188af',1,'dispenso::ThreadPool']]],
diff --git a/search/all_2.js b/search/all_2.js
index d9ebf0c..d4263b7 100644
--- a/search/all_2.js
+++ b/search/all_2.js
@@ -8,13 +8,13 @@ var searchData=
['cbegin_5',['cbegin',['../classdispenso_1_1_concurrent_vector.html#a8157ca262ec71edddb03db8ad05f2b52',1,'dispenso::ConcurrentVector']]],
['cend_6',['cend',['../classdispenso_1_1_concurrent_vector.html#a699a704e271c79bf9a3d537b4a090607',1,'dispenso::ConcurrentVector']]],
['chunkedrange_7',['ChunkedRange',['../structdispenso_1_1_chunked_range.html#a488b20ac57d038c6088ba6289c05dd47',1,'dispenso::ChunkedRange::ChunkedRange(IntegerT s, IntegerT e, Auto)'],['../structdispenso_1_1_chunked_range.html#a8a59cc087d0646ce617c04259db26149',1,'dispenso::ChunkedRange::ChunkedRange(IntegerT s, IntegerT e, Static)'],['../structdispenso_1_1_chunked_range.html#a644b2269aed883922db39c928a009b16',1,'dispenso::ChunkedRange::ChunkedRange(IntegerT s, IntegerT e, IntegerT c)'],['../structdispenso_1_1_chunked_range.html',1,'dispenso::ChunkedRange< IntegerT >']]],
- ['clear_8',['clear',['../classdispenso_1_1_graph_t.html#a23d36763edcc0162257ee176355ee1da',1,'dispenso::GraphT::clear()'],['../classdispenso_1_1_concurrent_vector.html#ae3f8595a52183e3a145cf8f4213250b1',1,'dispenso::ConcurrentVector::clear()'],['../classdispenso_1_1_subgraph_t.html#a2e39c55d6e04462971f93f349c5be3fe',1,'dispenso::SubgraphT::clear()']]],
+ ['clear_8',['clear',['../classdispenso_1_1_pool_allocator_t.html#a67dc4676c39f7226c23ac48ea1a58ad1',1,'dispenso::PoolAllocatorT::clear()'],['../classdispenso_1_1_concurrent_vector.html#ae3f8595a52183e3a145cf8f4213250b1',1,'dispenso::ConcurrentVector::clear()'],['../classdispenso_1_1_subgraph_t.html#a2e39c55d6e04462971f93f349c5be3fe',1,'dispenso::SubgraphT::clear()'],['../classdispenso_1_1_graph_t.html#a23d36763edcc0162257ee176355ee1da',1,'dispenso::GraphT::clear()']]],
['completed_9',['completed',['../classdispenso_1_1_completion_event.html#aadf4486fc37923878b4d732f0a7f47f4',1,'dispenso::CompletionEvent']]],
['completion_5fevent_2eh_10',['completion_event.h',['../completion__event_8h.html',1,'']]],
['completionevent_11',['CompletionEvent',['../classdispenso_1_1_completion_event.html',1,'dispenso']]],
['concurrent_5fobject_5farena_2eh_12',['concurrent_object_arena.h',['../concurrent__object__arena_8h.html',1,'']]],
['concurrent_5fvector_2eh_13',['concurrent_vector.h',['../concurrent__vector_8h.html',1,'']]],
- ['concurrentobjectarena_14',['ConcurrentObjectArena',['../structdispenso_1_1_concurrent_object_arena.html#a97beaf8f43ab51528598d980d520bb24',1,'dispenso::ConcurrentObjectArena::ConcurrentObjectArena(const ConcurrentObjectArena< T, Index, alignment > &other)'],['../structdispenso_1_1_concurrent_object_arena.html#a727fe346168e1672195109502e9c60dc',1,'dispenso::ConcurrentObjectArena::ConcurrentObjectArena(ConcurrentObjectArena< T, Index, alignment > &&other) noexcept'],['../structdispenso_1_1_concurrent_object_arena.html#ac2e855dc6e3e325e4b9dff88de2ad597',1,'dispenso::ConcurrentObjectArena::ConcurrentObjectArena(const Index minBuffSize)'],['../structdispenso_1_1_concurrent_object_arena.html',1,'dispenso::ConcurrentObjectArena< T, Index, alignment >']]],
+ ['concurrentobjectarena_14',['ConcurrentObjectArena',['../structdispenso_1_1_concurrent_object_arena.html#ac2e855dc6e3e325e4b9dff88de2ad597',1,'dispenso::ConcurrentObjectArena::ConcurrentObjectArena(const Index minBuffSize)'],['../structdispenso_1_1_concurrent_object_arena.html#a727fe346168e1672195109502e9c60dc',1,'dispenso::ConcurrentObjectArena::ConcurrentObjectArena(ConcurrentObjectArena< T, Index, alignment > &&other) noexcept'],['../structdispenso_1_1_concurrent_object_arena.html#a97beaf8f43ab51528598d980d520bb24',1,'dispenso::ConcurrentObjectArena::ConcurrentObjectArena(const ConcurrentObjectArena< T, Index, alignment > &other)'],['../structdispenso_1_1_concurrent_object_arena.html',1,'dispenso::ConcurrentObjectArena< T, Index, alignment >']]],
['concurrenttaskset_15',['ConcurrentTaskSet',['../classdispenso_1_1_concurrent_task_set.html#a5e48f4df33cd5cf87b3973ffb9153f16',1,'dispenso::ConcurrentTaskSet::ConcurrentTaskSet()'],['../classdispenso_1_1_concurrent_task_set.html',1,'dispenso::ConcurrentTaskSet']]],
['concurrenttasksetexecutor_16',['ConcurrentTaskSetExecutor',['../classdispenso_1_1_concurrent_task_set_executor.html',1,'dispenso']]],
['concurrentvector_17',['ConcurrentVector',['../classdispenso_1_1_concurrent_vector.html#a520f78b3837308ae0bf5042bc02db374',1,'dispenso::ConcurrentVector::ConcurrentVector(size_t startSize)'],['../classdispenso_1_1_concurrent_vector.html#af0f4f336438d230d23cc088c2e650b3a',1,'dispenso::ConcurrentVector::ConcurrentVector(ConcurrentVector &&other)'],['../classdispenso_1_1_concurrent_vector.html#a54dc4ebacd3d78bb0f3d6aa59d60efcf',1,'dispenso::ConcurrentVector::ConcurrentVector(const ConcurrentVector &other)'],['../classdispenso_1_1_concurrent_vector.html#a9c2fcc7dc242363af82ec208c23be729',1,'dispenso::ConcurrentVector::ConcurrentVector(std::initializer_list< T > l)'],['../classdispenso_1_1_concurrent_vector.html#a969ceec28f12a4454fa08578ad8679d1',1,'dispenso::ConcurrentVector::ConcurrentVector(size_type startSize, InIterator start, InIterator end)'],['../classdispenso_1_1_concurrent_vector.html#ad7d74051f6a7341625a2749da507da7b',1,'dispenso::ConcurrentVector::ConcurrentVector(InIterator start, InIterator end)'],['../classdispenso_1_1_concurrent_vector.html#a205540e4da8eba5f90a311154df24d47',1,'dispenso::ConcurrentVector::ConcurrentVector(size_t startSize, const T &defaultValue)'],['../classdispenso_1_1_concurrent_vector.html#ae4d0bc2c37e42d74abbd221ba7d6ca3b',1,'dispenso::ConcurrentVector::ConcurrentVector(size_t startCapacity, ReserveTagS)'],['../classdispenso_1_1_concurrent_vector.html#a479d98beb884647f48dcd11226b9db80',1,'dispenso::ConcurrentVector::ConcurrentVector()'],['../classdispenso_1_1_concurrent_vector.html',1,'dispenso::ConcurrentVector< T, Traits, SizeTraits >']]],
diff --git a/search/all_3.js b/search/all_3.js
index 7600158..4ecf81a 100644
--- a/search/all_3.js
+++ b/search/all_3.js
@@ -1,6 +1,6 @@
var searchData=
[
- ['dealloc_0',['dealloc',['../classdispenso_1_1_pool_allocator.html#ae7121e9dcebfeb09a6a045d04455a582',1,'dispenso::PoolAllocator']]],
+ ['dealloc_0',['dealloc',['../classdispenso_1_1_pool_allocator_t.html#add24c6cf8e3ea586940a18acf7959a4d',1,'dispenso::PoolAllocatorT']]],
['deallocsmallbuffer_1',['deallocSmallBuffer',['../small__buffer__allocator_8h.html#a1ba6120f1467502c75d6e8bd3d8131ec',1,'dispenso']]],
['default_5fcapacity_2',['default_capacity',['../classdispenso_1_1_concurrent_vector.html#a8ce7e4f78d13c0660b9de99ac96a11df',1,'dispenso::ConcurrentVector']]],
['defaultchunking_3',['defaultChunking',['../structdispenso_1_1_par_for_options.html#a2cfd7b948697c97874c727940529d1d8',1,'dispenso::ParForOptions']]],
diff --git a/search/all_d.js b/search/all_d.js
index 471f526..35a381d 100644
--- a/search/all_d.js
+++ b/search/all_d.js
@@ -8,7 +8,7 @@ var searchData=
['pipeline_5',['pipeline',['../pipeline_8h.html#a5438114dce2544c8cdab8100309478ab',1,'dispenso::pipeline(ThreadPool &pool, Stages &&... sIn)'],['../pipeline_8h.html#a9a0289cbbb678c03532bdf458da1401b',1,'dispenso::pipeline(Stages &&... sIn)']]],
['pipeline_2eh_6',['pipeline.h',['../pipeline_8h.html',1,'']]],
['pool_5fallocator_2eh_7',['pool_allocator.h',['../pool__allocator_8h.html',1,'']]],
- ['poolallocator_8',['PoolAllocator',['../classdispenso_1_1_pool_allocator.html',1,'dispenso::PoolAllocator'],['../classdispenso_1_1_pool_allocator.html#a7a393687ca662206fea08d6d261cdd20',1,'dispenso::PoolAllocator::PoolAllocator()']]],
+ ['poolallocatort_8',['PoolAllocatorT',['../classdispenso_1_1_pool_allocator_t.html',1,'dispenso::PoolAllocatorT< kThreadSafe >'],['../classdispenso_1_1_pool_allocator_t.html#a82adb70b33422125a6f3de59a0b63d11',1,'dispenso::PoolAllocatorT::PoolAllocatorT()']]],
['pop_5fback_9',['pop_back',['../classdispenso_1_1_concurrent_vector.html#a6df17279a0127ce60af3abb56121678b',1,'dispenso::ConcurrentVector']]],
['priority_2eh_10',['priority.h',['../priority_8h.html',1,'']]],
['push_5fback_11',['push_back',['../classdispenso_1_1_concurrent_vector.html#a1306ac315f6e7062a6b1ee39e2978b22',1,'dispenso::ConcurrentVector::push_back(T &&val)'],['../classdispenso_1_1_concurrent_vector.html#a0cc5821267defcaf8eaec2bb77ae19ff',1,'dispenso::ConcurrentVector::push_back(const T &val)']]]
diff --git a/search/classes_a.js b/search/classes_a.js
index 2e9d522..a11c937 100644
--- a/search/classes_a.js
+++ b/search/classes_a.js
@@ -2,5 +2,5 @@ var searchData=
[
['parallelforexecutor_0',['ParallelForExecutor',['../classdispenso_1_1_parallel_for_executor.html',1,'dispenso']]],
['parforoptions_1',['ParForOptions',['../structdispenso_1_1_par_for_options.html',1,'dispenso']]],
- ['poolallocator_2',['PoolAllocator',['../classdispenso_1_1_pool_allocator.html',1,'dispenso']]]
+ ['poolallocatort_2',['PoolAllocatorT',['../classdispenso_1_1_pool_allocator_t.html',1,'dispenso']]]
];
diff --git a/search/functions_0.js b/search/functions_0.js
index 463623d..96d2295 100644
--- a/search/functions_0.js
+++ b/search/functions_0.js
@@ -3,7 +3,7 @@ var searchData=
['acquire_0',['acquire',['../classdispenso_1_1_resource_pool.html#aa3dfd898745a3d729f6ab66311ffd443',1,'dispenso::ResourcePool']]],
['addnode_1',['addNode',['../classdispenso_1_1_subgraph_t.html#a3f314f17214ede38225e89be5cdd79ab',1,'dispenso::SubgraphT::addNode()'],['../classdispenso_1_1_graph_t.html#a13d24b1056de5324500d20702661fa7e',1,'dispenso::GraphT::addNode(T &&f)']]],
['addsubgraph_2',['addSubgraph',['../classdispenso_1_1_graph_t.html#adf47c5ba380b61e20df7ec680a1cca43',1,'dispenso::GraphT']]],
- ['alloc_3',['alloc',['../classdispenso_1_1_pool_allocator.html#a38a9be5293b77653b1560cb8e74b5bd4',1,'dispenso::PoolAllocator']]],
+ ['alloc_3',['alloc',['../classdispenso_1_1_pool_allocator_t.html#a04ec8c4a58977f8ca6011431e1860036',1,'dispenso::PoolAllocatorT']]],
['allocsmallbuffer_4',['allocSmallBuffer',['../small__buffer__allocator_8h.html#ab83550597ed4347b3d89d15bb16cd49a',1,'dispenso']]],
['approxbytesallocatedsmallbuffer_5',['approxBytesAllocatedSmallBuffer',['../small__buffer__allocator_8h.html#ad883cfcdabda87d64afdab3d04f11a47',1,'dispenso']]],
['arrive_5fand_5fwait_6',['arrive_and_wait',['../classdispenso_1_1_latch.html#a20d9a291572a64adf4cb2c419f195292',1,'dispenso::Latch']]],
diff --git a/search/functions_13.js b/search/functions_13.js
index 61303fd..4d90671 100644
--- a/search/functions_13.js
+++ b/search/functions_13.js
@@ -3,7 +3,7 @@ var searchData=
['_7econcurrenttaskset_0',['~ConcurrentTaskSet',['../classdispenso_1_1_concurrent_task_set.html#aaf3fa4c1b3da5fe5c542aa161dcf9478',1,'dispenso::ConcurrentTaskSet']]],
['_7econcurrentvector_1',['~ConcurrentVector',['../classdispenso_1_1_concurrent_vector.html#af180093482b0fdd9c89c1157cab07d5d',1,'dispenso::ConcurrentVector']]],
['_7efuture_2',['~Future',['../classdispenso_1_1_future.html#a14d27f2276dedd9e4e6d17b6fcfdb74f',1,'dispenso::Future']]],
- ['_7epoolallocator_3',['~PoolAllocator',['../classdispenso_1_1_pool_allocator.html#a5c40ea70c1e81435ee7c9152fb9ce62a',1,'dispenso::PoolAllocator']]],
+ ['_7epoolallocatort_3',['~PoolAllocatorT',['../classdispenso_1_1_pool_allocator_t.html#a6f1cf4cfc584a9eef84a3e5e4e92ad60',1,'dispenso::PoolAllocatorT']]],
['_7eresourcepool_4',['~ResourcePool',['../classdispenso_1_1_resource_pool.html#a72c23146a6e1d6fdb38ec623f11106dd',1,'dispenso::ResourcePool']]],
['_7etaskset_5',['~TaskSet',['../classdispenso_1_1_task_set.html#a2fbdd27aa8ffcb216e51f45aad709f12',1,'dispenso::TaskSet']]],
['_7ethreadpool_6',['~ThreadPool',['../classdispenso_1_1_thread_pool.html#acd886dd712424330935b64959e8188af',1,'dispenso::ThreadPool']]],
diff --git a/search/functions_2.js b/search/functions_2.js
index 1f0940b..de20b04 100644
--- a/search/functions_2.js
+++ b/search/functions_2.js
@@ -7,10 +7,10 @@ var searchData=
['cbegin_4',['cbegin',['../classdispenso_1_1_concurrent_vector.html#a8157ca262ec71edddb03db8ad05f2b52',1,'dispenso::ConcurrentVector']]],
['cend_5',['cend',['../classdispenso_1_1_concurrent_vector.html#a699a704e271c79bf9a3d537b4a090607',1,'dispenso::ConcurrentVector']]],
['chunkedrange_6',['ChunkedRange',['../structdispenso_1_1_chunked_range.html#a644b2269aed883922db39c928a009b16',1,'dispenso::ChunkedRange::ChunkedRange(IntegerT s, IntegerT e, IntegerT c)'],['../structdispenso_1_1_chunked_range.html#a8a59cc087d0646ce617c04259db26149',1,'dispenso::ChunkedRange::ChunkedRange(IntegerT s, IntegerT e, Static)'],['../structdispenso_1_1_chunked_range.html#a488b20ac57d038c6088ba6289c05dd47',1,'dispenso::ChunkedRange::ChunkedRange(IntegerT s, IntegerT e, Auto)']]],
- ['clear_7',['clear',['../classdispenso_1_1_concurrent_vector.html#ae3f8595a52183e3a145cf8f4213250b1',1,'dispenso::ConcurrentVector::clear()'],['../classdispenso_1_1_subgraph_t.html#a2e39c55d6e04462971f93f349c5be3fe',1,'dispenso::SubgraphT::clear()'],['../classdispenso_1_1_graph_t.html#a23d36763edcc0162257ee176355ee1da',1,'dispenso::GraphT::clear()']]],
+ ['clear_7',['clear',['../classdispenso_1_1_pool_allocator_t.html#a67dc4676c39f7226c23ac48ea1a58ad1',1,'dispenso::PoolAllocatorT::clear()'],['../classdispenso_1_1_graph_t.html#a23d36763edcc0162257ee176355ee1da',1,'dispenso::GraphT::clear()'],['../classdispenso_1_1_concurrent_vector.html#ae3f8595a52183e3a145cf8f4213250b1',1,'dispenso::ConcurrentVector::clear()'],['../classdispenso_1_1_subgraph_t.html#a2e39c55d6e04462971f93f349c5be3fe',1,'dispenso::SubgraphT::clear()']]],
['completed_8',['completed',['../classdispenso_1_1_completion_event.html#aadf4486fc37923878b4d732f0a7f47f4',1,'dispenso::CompletionEvent']]],
['concurrentobjectarena_9',['ConcurrentObjectArena',['../structdispenso_1_1_concurrent_object_arena.html#ac2e855dc6e3e325e4b9dff88de2ad597',1,'dispenso::ConcurrentObjectArena::ConcurrentObjectArena(const Index minBuffSize)'],['../structdispenso_1_1_concurrent_object_arena.html#a97beaf8f43ab51528598d980d520bb24',1,'dispenso::ConcurrentObjectArena::ConcurrentObjectArena(const ConcurrentObjectArena< T, Index, alignment > &other)'],['../structdispenso_1_1_concurrent_object_arena.html#a727fe346168e1672195109502e9c60dc',1,'dispenso::ConcurrentObjectArena::ConcurrentObjectArena(ConcurrentObjectArena< T, Index, alignment > &&other) noexcept']]],
['concurrenttaskset_10',['ConcurrentTaskSet',['../classdispenso_1_1_concurrent_task_set.html#a5e48f4df33cd5cf87b3973ffb9153f16',1,'dispenso::ConcurrentTaskSet']]],
- ['concurrentvector_11',['ConcurrentVector',['../classdispenso_1_1_concurrent_vector.html#a479d98beb884647f48dcd11226b9db80',1,'dispenso::ConcurrentVector::ConcurrentVector()'],['../classdispenso_1_1_concurrent_vector.html#ae4d0bc2c37e42d74abbd221ba7d6ca3b',1,'dispenso::ConcurrentVector::ConcurrentVector(size_t startCapacity, ReserveTagS)'],['../classdispenso_1_1_concurrent_vector.html#a520f78b3837308ae0bf5042bc02db374',1,'dispenso::ConcurrentVector::ConcurrentVector(size_t startSize)'],['../classdispenso_1_1_concurrent_vector.html#a205540e4da8eba5f90a311154df24d47',1,'dispenso::ConcurrentVector::ConcurrentVector(size_t startSize, const T &defaultValue)'],['../classdispenso_1_1_concurrent_vector.html#ad7d74051f6a7341625a2749da507da7b',1,'dispenso::ConcurrentVector::ConcurrentVector(InIterator start, InIterator end)'],['../classdispenso_1_1_concurrent_vector.html#a969ceec28f12a4454fa08578ad8679d1',1,'dispenso::ConcurrentVector::ConcurrentVector(size_type startSize, InIterator start, InIterator end)'],['../classdispenso_1_1_concurrent_vector.html#a9c2fcc7dc242363af82ec208c23be729',1,'dispenso::ConcurrentVector::ConcurrentVector(std::initializer_list< T > l)'],['../classdispenso_1_1_concurrent_vector.html#a54dc4ebacd3d78bb0f3d6aa59d60efcf',1,'dispenso::ConcurrentVector::ConcurrentVector(const ConcurrentVector &other)'],['../classdispenso_1_1_concurrent_vector.html#af0f4f336438d230d23cc088c2e650b3a',1,'dispenso::ConcurrentVector::ConcurrentVector(ConcurrentVector &&other)']]],
+ ['concurrentvector_11',['ConcurrentVector',['../classdispenso_1_1_concurrent_vector.html#ae4d0bc2c37e42d74abbd221ba7d6ca3b',1,'dispenso::ConcurrentVector::ConcurrentVector(size_t startCapacity, ReserveTagS)'],['../classdispenso_1_1_concurrent_vector.html#af0f4f336438d230d23cc088c2e650b3a',1,'dispenso::ConcurrentVector::ConcurrentVector(ConcurrentVector &&other)'],['../classdispenso_1_1_concurrent_vector.html#a54dc4ebacd3d78bb0f3d6aa59d60efcf',1,'dispenso::ConcurrentVector::ConcurrentVector(const ConcurrentVector &other)'],['../classdispenso_1_1_concurrent_vector.html#a9c2fcc7dc242363af82ec208c23be729',1,'dispenso::ConcurrentVector::ConcurrentVector(std::initializer_list< T > l)'],['../classdispenso_1_1_concurrent_vector.html#a969ceec28f12a4454fa08578ad8679d1',1,'dispenso::ConcurrentVector::ConcurrentVector(size_type startSize, InIterator start, InIterator end)'],['../classdispenso_1_1_concurrent_vector.html#ad7d74051f6a7341625a2749da507da7b',1,'dispenso::ConcurrentVector::ConcurrentVector(InIterator start, InIterator end)'],['../classdispenso_1_1_concurrent_vector.html#a205540e4da8eba5f90a311154df24d47',1,'dispenso::ConcurrentVector::ConcurrentVector(size_t startSize, const T &defaultValue)'],['../classdispenso_1_1_concurrent_vector.html#a520f78b3837308ae0bf5042bc02db374',1,'dispenso::ConcurrentVector::ConcurrentVector(size_t startSize)'],['../classdispenso_1_1_concurrent_vector.html#a479d98beb884647f48dcd11226b9db80',1,'dispenso::ConcurrentVector::ConcurrentVector()']]],
['count_5fdown_12',['count_down',['../classdispenso_1_1_latch.html#a32b1cd1f97ba95656204c9ba90de41fb',1,'dispenso::Latch']]]
];
diff --git a/search/functions_3.js b/search/functions_3.js
index 5460982..1ecf833 100644
--- a/search/functions_3.js
+++ b/search/functions_3.js
@@ -1,6 +1,6 @@
var searchData=
[
- ['dealloc_0',['dealloc',['../classdispenso_1_1_pool_allocator.html#ae7121e9dcebfeb09a6a045d04455a582',1,'dispenso::PoolAllocator']]],
+ ['dealloc_0',['dealloc',['../classdispenso_1_1_pool_allocator_t.html#add24c6cf8e3ea586940a18acf7959a4d',1,'dispenso::PoolAllocatorT']]],
['deallocsmallbuffer_1',['deallocSmallBuffer',['../small__buffer__allocator_8h.html#a1ba6120f1467502c75d6e8bd3d8131ec',1,'dispenso']]],
['default_5fcapacity_2',['default_capacity',['../classdispenso_1_1_concurrent_vector.html#a8ce7e4f78d13c0660b9de99ac96a11df',1,'dispenso::ConcurrentVector']]],
['dependson_3',['dependsOn',['../classdispenso_1_1_node.html#abfb52f4bd018eee8791499a9bd160c8a',1,'dispenso::Node']]],
diff --git a/search/functions_c.js b/search/functions_c.js
index dff578a..85f3b0c 100644
--- a/search/functions_c.js
+++ b/search/functions_c.js
@@ -2,7 +2,7 @@ var searchData=
[
['parallel_5ffor_0',['parallel_for',['../parallel__for_8h.html#a8201f4fc565c557f5cbaf6b4403991b1',1,'dispenso::parallel_for(TaskSetT &taskSet, StateContainer &states, const StateGen &defaultState, const ChunkedRange< IntegerT > &range, F &&f, ParForOptions options={})'],['../parallel__for_8h.html#acc7052102a8bc76b02f21b6c82264c18',1,'dispenso::parallel_for(TaskSetT &taskSet, const ChunkedRange< IntegerT > &range, F &&f, ParForOptions options={})'],['../parallel__for_8h.html#a7d469e66515688d74cc2ebcf9ff0cc54',1,'dispenso::parallel_for(const ChunkedRange< IntegerT > &range, F &&f, ParForOptions options={})'],['../parallel__for_8h.html#acd1434f629d379d54363d93c6970440a',1,'dispenso::parallel_for(StateContainer &states, const StateGen &defaultState, const ChunkedRange< IntegerT > &range, F &&f, ParForOptions options={})'],['../parallel__for_8h.html#a4c7907a22bed40a3cdb0890936e6e402',1,'dispenso::parallel_for(TaskSetT &taskSet, IntegerA start, IntegerB end, F &&f, ParForOptions options={})'],['../parallel__for_8h.html#a4b3adc98a791e37ef19708242b30d047',1,'dispenso::parallel_for(IntegerA start, IntegerB end, F &&f, ParForOptions options={})'],['../parallel__for_8h.html#ac28cb63caa4dc43f836ea3c4d03e9255',1,'dispenso::parallel_for(TaskSetT &taskSet, StateContainer &states, const StateGen &defaultState, IntegerA start, IntegerB end, F &&f, ParForOptions options={})'],['../parallel__for_8h.html#ac0f644b9ba92c8c5c0d86101bf5007fc',1,'dispenso::parallel_for(StateContainer &states, const StateGen &defaultState, IntegerA start, IntegerB end, F &&f, ParForOptions options={})']]],
['pipeline_1',['pipeline',['../pipeline_8h.html#a5438114dce2544c8cdab8100309478ab',1,'dispenso::pipeline(ThreadPool &pool, Stages &&... sIn)'],['../pipeline_8h.html#a9a0289cbbb678c03532bdf458da1401b',1,'dispenso::pipeline(Stages &&... sIn)']]],
- ['poolallocator_2',['PoolAllocator',['../classdispenso_1_1_pool_allocator.html#a7a393687ca662206fea08d6d261cdd20',1,'dispenso::PoolAllocator']]],
+ ['poolallocatort_2',['PoolAllocatorT',['../classdispenso_1_1_pool_allocator_t.html#a82adb70b33422125a6f3de59a0b63d11',1,'dispenso::PoolAllocatorT']]],
['pop_5fback_3',['pop_back',['../classdispenso_1_1_concurrent_vector.html#a6df17279a0127ce60af3abb56121678b',1,'dispenso::ConcurrentVector']]],
['push_5fback_4',['push_back',['../classdispenso_1_1_concurrent_vector.html#a0cc5821267defcaf8eaec2bb77ae19ff',1,'dispenso::ConcurrentVector::push_back(const T &val)'],['../classdispenso_1_1_concurrent_vector.html#a1306ac315f6e7062a6b1ee39e2978b22',1,'dispenso::ConcurrentVector::push_back(T &&val)']]]
];
diff --git a/search/functions_f.js b/search/functions_f.js
index ec10dac..6ff6375 100644
--- a/search/functions_f.js
+++ b/search/functions_f.js
@@ -4,7 +4,8 @@ var searchData=
['then_1',['then',['../classdispenso_1_1_future.html#aac1d6623d69295fc0a2d72fac46aebaf',1,'dispenso::Future']]],
['threadpool_2',['ThreadPool',['../classdispenso_1_1_thread_pool.html#a2442016e8a4924ca665d3993c1879b4d',1,'dispenso::ThreadPool']]],
['timedtaskscheduler_3',['TimedTaskScheduler',['../classdispenso_1_1_timed_task_scheduler.html#afda120b230ff030f8f9af68c6f7899bc',1,'dispenso::TimedTaskScheduler']]],
- ['try_5fwait_4',['try_wait',['../classdispenso_1_1_latch.html#abe26b747c7ddb5620585faad089b2d3f',1,'dispenso::Latch']]],
- ['tryemplaceupdate_5',['tryEmplaceUpdate',['../classdispenso_1_1_async_request.html#a4fc2ef79cd8d2efd6cbab96b0ca8ef1d',1,'dispenso::AsyncRequest']]],
- ['trywait_6',['tryWait',['../classdispenso_1_1_task_set.html#a17cf46f5790f1a818ac404167a796bd5',1,'dispenso::TaskSet::tryWait()'],['../classdispenso_1_1_concurrent_task_set.html#a5338ddfb4e5d98f769386b7b35b3f7ad',1,'dispenso::ConcurrentTaskSet::tryWait()']]]
+ ['totalchunkcapacity_4',['totalChunkCapacity',['../classdispenso_1_1_pool_allocator_t.html#a811782e39e4b441b960bc35757af59c1',1,'dispenso::PoolAllocatorT']]],
+ ['try_5fwait_5',['try_wait',['../classdispenso_1_1_latch.html#abe26b747c7ddb5620585faad089b2d3f',1,'dispenso::Latch']]],
+ ['tryemplaceupdate_6',['tryEmplaceUpdate',['../classdispenso_1_1_async_request.html#a4fc2ef79cd8d2efd6cbab96b0ca8ef1d',1,'dispenso::AsyncRequest']]],
+ ['trywait_7',['tryWait',['../classdispenso_1_1_task_set.html#a17cf46f5790f1a818ac404167a796bd5',1,'dispenso::TaskSet::tryWait()'],['../classdispenso_1_1_concurrent_task_set.html#a5338ddfb4e5d98f769386b7b35b3f7ad',1,'dispenso::ConcurrentTaskSet::tryWait()']]]
];