/* * Copyright (C) 2018-2023 Intel Corporation * * SPDX-License-Identifier: MIT * */ #pragma once #include namespace NEO { template struct ReleaseObject { void operator()(T *t) { if (t != nullptr) { t->release(); } } }; template using ReleaseableObjectPtr = std::unique_ptr>; template static ReleaseableObjectPtr clUniquePtr(T *object) { return ReleaseableObjectPtr{object}; } template inline ReleaseableObjectPtr makeReleaseable(Types &&...args) { return (ReleaseableObjectPtr(new Type(std::forward(args)...))); } } // namespace NEO