/* * Copyright (C) 2018-2019 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<_Ty> make_releaseable(_Types &&... _Args) { return (ReleaseableObjectPtr<_Ty>(new _Ty(std::forward<_Types>(_Args)...))); } } // namespace NEO