| 97 | } |
| 98 | |
| 99 | void ContextBase::allocVoiceProps() |
| 100 | { |
| 101 | constexpr size_t clustersize{32}; |
| 102 | |
| 103 | TRACE("Increasing allocated voice properties to %zu\n", |
| 104 | (mVoicePropClusters.size()+1) * clustersize); |
| 105 | |
| 106 | VoicePropsCluster cluster{std::make_unique<VoicePropsItem[]>(clustersize)}; |
| 107 | for(size_t i{1};i < clustersize;++i) |
| 108 | cluster[i-1].next.store(std::addressof(cluster[i]), std::memory_order_relaxed); |
| 109 | mVoicePropClusters.emplace_back(std::move(cluster)); |
| 110 | |
| 111 | VoicePropsItem *oldhead{mFreeVoiceProps.load(std::memory_order_acquire)}; |
| 112 | do { |
| 113 | mVoicePropClusters.back()[clustersize-1].next.store(oldhead, std::memory_order_relaxed); |
| 114 | } while(mFreeVoiceProps.compare_exchange_weak(oldhead, mVoicePropClusters.back().get(), |
| 115 | std::memory_order_acq_rel, std::memory_order_acquire) == false); |
| 116 | } |
| 117 | |
| 118 | void ContextBase::allocVoices(size_t addcount) |
| 119 | { |
no test coverage detected