3 #ifndef GRAIL_SNAPSHOT_GENERATOR_H
4 #define GRAIL_SNAPSHOT_GENERATOR_H
6 #include "IDebugSnapshotReceiver.h"
7 #include "ISnapshotGenerator.h"
15 template <
typename SnapshotType>
29 if(receiver ==
nullptr)
33 snapshotReceivers.push_back(receiver);
39 snapshotReceivers.erase(std::remove(snapshotReceivers.begin(), snapshotReceivers.end(), receiver));
45 SnapshotType snapshot;
46 if(TryProduceSnapshot(snapshot))
48 snapshot.absoluteTime = timestampProvider !=
nullptr ? timestampProvider->GetTimestamp() : 0.0f;
49 for(
auto receiver : snapshotReceivers)
51 PassSnapshotToReceiver(*receiver, snapshot);
56 virtual void SetTimestampProvider(
const std::shared_ptr<ITimestampProvider>& provider)
override
58 timestampProvider = provider;
62 virtual bool TryProduceSnapshot(SnapshotType& outSnapshot) = 0;
63 virtual void PassSnapshotToReceiver(IDebugSnapshotReceiver& receiver, SnapshotType& snapshot) = 0;
66 std::vector<IDebugSnapshotReceiver*> snapshotReceivers{};
67 std::shared_ptr<ITimestampProvider> timestampProvider =
nullptr;