FunctorInputCursor.h [plain text]
#ifndef FunctorInputCursor_h
#define FunctorInputCursor_h
#if ENABLE(WEB_REPLAY)
#include "SegmentedInputStorage.h"
#include <replay/InputCursor.h>
#include <replay/NondeterministicInput.h>
#include <wtf/Assertions.h>
#include <wtf/Noncopyable.h>
#include <wtf/Vector.h>
namespace WebCore {
class FunctorInputCursor final : public InputCursor {
WTF_MAKE_NONCOPYABLE(FunctorInputCursor);
public:
static PassRefPtr<FunctorInputCursor> create(SegmentedInputStorage& storage)
{
return adoptRef(new FunctorInputCursor(storage));
}
virtual bool isCapturing() const override { return false; }
virtual bool isReplaying() const override { return false; }
virtual void storeInput(std::unique_ptr<NondeterministicInputBase>) override;
virtual NondeterministicInputBase* uncheckedLoadInput(InputQueue) override;
template<typename Functor>
typename Functor::ReturnType forEachInputInQueue(InputQueue, Functor&);
protected:
virtual NondeterministicInputBase* loadInput(InputQueue, const AtomicString&) override;
private:
FunctorInputCursor(SegmentedInputStorage&);
SegmentedInputStorage& m_storage;
};
template<typename Functor> inline
typename Functor::ReturnType FunctorInputCursor::forEachInputInQueue(InputQueue queue, Functor& functor)
{
for (size_t i = 0; i < m_storage.queueSize(queue); i++)
functor(i, m_storage.queue(queue).at(i).get());
return functor.returnValue();
}
inline FunctorInputCursor::FunctorInputCursor(SegmentedInputStorage& storage)
: m_storage(storage)
{
}
inline void FunctorInputCursor::storeInput(std::unique_ptr<NondeterministicInputBase>)
{
ASSERT_NOT_REACHED();
}
inline NondeterministicInputBase* FunctorInputCursor::loadInput(InputQueue, const AtomicString&)
{
ASSERT_NOT_REACHED();
return nullptr;
}
inline NondeterministicInputBase* FunctorInputCursor::uncheckedLoadInput(InputQueue)
{
ASSERT_NOT_REACHED();
return nullptr;
}
}
#endif // ENABLE(WEB_REPLAY)
#endif // FunctorInputCursor_h