Files
compute-runtime/runtime/event/event_builder.h
Maciej Plewka 9e52684f5b Change namespace from OCLRT to NEO
Change-Id: If965c79d70392db26597aea4c2f3b7ae2820fe96
Signed-off-by: Maciej Plewka <maciej.plewka@intel.com>
2019-03-26 15:48:19 +01:00

67 lines
1.4 KiB
C++

/*
* Copyright (C) 2017-2019 Intel Corporation
*
* SPDX-License-Identifier: MIT
*
*/
#pragma once
#include "runtime/utilities/arrayref.h"
#include "runtime/utilities/stackvec.h"
#include "CL/cl.h"
#include <type_traits>
namespace NEO {
class Event;
class EventBuilder {
public:
template <typename EventType, typename... ArgsT>
void create(ArgsT &&... args) {
event = new EventType(std::forward<ArgsT>(args)...);
}
EventBuilder() = default;
EventBuilder(const EventBuilder &) = delete;
EventBuilder &operator=(const EventBuilder &) = delete;
EventBuilder(EventBuilder &&) = delete;
EventBuilder &operator=(EventBuilder &&) = delete;
~EventBuilder();
Event *getEvent() const {
return event;
}
void addParentEvent(Event &newParentEvent);
void addParentEvent(Event *newParentEvent) {
if (newParentEvent != nullptr) {
addParentEvent(*newParentEvent);
}
}
void addParentEvents(ArrayRef<const cl_event> newParentEvents);
void finalize();
Event *finalizeAndRelease() {
finalize();
Event *retEvent = this->event;
this->event = nullptr;
finalized = false;
return retEvent;
}
protected:
void clear();
Event *event = nullptr;
bool finalized = false;
StackVec<Event *, 16> parentEvents;
bool doNotRegister = false;
};
} // namespace NEO