71 template <
class DataType>
76 : ProducerThreadBuffer(&Buffers[0])
77 , ConsumerThreadBuffer(&Buffers[1])
78 , Interchange(&Buffers[2])
116 ProducerThreadBuffer = Interchange.Exchange(ProducerThreadBuffer);
117 if (!ProducerThreadBuffer->Value)
121 ProducerThreadBuffer->Id = ++Counter;
122 return ProducerThreadBuffer->Value.Get();
154 ConsumerThreadBuffer = Interchange.Exchange(ConsumerThreadBuffer);
155 if (ConsumerThreadBuffer->Id <= LastId &&
160 LastId = ConsumerThreadBuffer->Id;
161 return ConsumerThreadBuffer->Value.Get();
171 struct DataTypeWrapper
177 DataTypeWrapper(
const DataTypeWrapper&) =
delete;
178 DataTypeWrapper(DataTypeWrapper&&
Other)
183 void operator=(
const DataTypeWrapper&
Other) =
delete;
193 DataTypeWrapper Buffers[3] = { DataTypeWrapper(), DataTypeWrapper(), DataTypeWrapper() };
194 DataTypeWrapper* ProducerThreadBuffer;
195 DataTypeWrapper* ConsumerThreadBuffer;
UE_INTRINSIC_CAST UE_REWRITE constexpr std::remove_reference_t< T > && MoveTemp(T &&Obj) noexcept
Definition UnrealTemplate.h:520
Definition TripleBufferedData.h:73
DataType * ExchangeConsumerBuffer()
Definition TripleBufferedData.h:152
DataType * ExchangeProducerBuffer()
Definition TripleBufferedData.h:114
TTripleBufferedData()
Definition TripleBufferedData.h:75
Definition UniquePtr.h:107
Definition SkeletalMeshComponent.h:307
@ Id
Definition Protocol0.h:17
Definition NumericLimits.h:41