00001 // This code contains NVIDIA Confidential Information and is disclosed to you 00002 // under a form of NVIDIA software license agreement provided separately to you. 00003 // 00004 // Notice 00005 // NVIDIA Corporation and its licensors retain all intellectual property and 00006 // proprietary rights in and to this software and related documentation and 00007 // any modifications thereto. Any use, reproduction, disclosure, or 00008 // distribution of this software and related documentation without an express 00009 // license agreement from NVIDIA Corporation is strictly prohibited. 00010 // 00011 // ALL NVIDIA DESIGN SPECIFICATIONS, CODE ARE PROVIDED "AS IS.". NVIDIA MAKES 00012 // NO WARRANTIES, EXPRESSED, IMPLIED, STATUTORY, OR OTHERWISE WITH RESPECT TO 00013 // THE MATERIALS, AND EXPRESSLY DISCLAIMS ALL IMPLIED WARRANTIES OF NONINFRINGEMENT, 00014 // MERCHANTABILITY, AND FITNESS FOR A PARTICULAR PURPOSE. 00015 // 00016 // Information and code furnished is believed to be accurate and reliable. 00017 // However, NVIDIA Corporation assumes no responsibility for the consequences of use of such 00018 // information or for any infringement of patents or other rights of third parties that may 00019 // result from its use. No license is granted by implication or otherwise under any patent 00020 // or patent rights of NVIDIA Corporation. Details are subject to change without notice. 00021 // This code supersedes and replaces all information previously supplied. 00022 // NVIDIA Corporation products are not authorized for use as critical 00023 // components in life support devices or systems without express written approval of 00024 // NVIDIA Corporation. 00025 // 00026 // Copyright (c) 2016-2020 NVIDIA Corporation. All rights reserved. 00027 00028 00029 #ifndef NVBLASTTKCOMMON_H 00030 #define NVBLASTTKCOMMON_H 00031 00032 00033 #include "NvBlastGlobals.h" 00034 #include "NvBlastTkGUID.h" 00035 00036 00037 // Macro to define standard object classes. An intermediate class is defined which holds common implementations. 00038 #define NVBLASTTK_IMPL_DECLARE(_name) \ 00039 class Tk##_name##Type : public Tk##_name \ 00040 { \ 00041 public: \ 00042 /* Blank constructor generates a new NvBlastID and informs framework */ \ 00043 Tk##_name##Type() \ 00044 { \ 00045 memset(&m_ID, 0, sizeof(NvBlastID)); \ 00046 setID(TkGenerateGUID(this)); \ 00047 TkFrameworkImpl::get()->onCreate(*this); \ 00048 } \ 00049 \ 00050 /* This constructor takes an existing NvBlastID and informs framework */ \ 00051 Tk##_name##Type(const NvBlastID& id) \ 00052 { \ 00053 memset(&m_ID, 0, sizeof(NvBlastID)); \ 00054 setID(id); \ 00055 TkFrameworkImpl::get()->onCreate(*this); \ 00056 } \ 00057 \ 00058 /* Destructor informs framework */ \ 00059 ~Tk##_name##Type() { TkFrameworkImpl::get()->onDestroy(*this); } \ 00060 \ 00061 /* Begin TkIdentifiable */ \ 00062 virtual void setID(const NvBlastID& id) override \ 00063 { \ 00064 /* Inform framework of ID change */ \ 00065 TkFrameworkImpl::get()->onIDChange(*this, m_ID, id); \ 00066 m_ID = id; \ 00067 } \ 00068 virtual const NvBlastID& getID() const override { return getIDInternal(); } \ 00069 virtual const TkType& getType() const override { return s_type; } \ 00070 /* End TkIdentifiable */ \ 00071 \ 00072 /* Begin public API */ \ 00073 \ 00074 /* Inline method for internal access to NvBlastID */ \ 00075 const NvBlastID& getIDInternal() const { return m_ID; } \ 00076 \ 00077 /* End public API */ \ 00078 \ 00079 /* Static type information */ \ 00080 static TkTypeImpl s_type; \ 00081 \ 00082 private: \ 00083 NvBlastID m_ID; /* NvBlastID for a TkIdentifiable object */ \ 00084 }; \ 00085 \ 00086 /* Derive object implementation from common implementation class above */ \ 00087 class Tk##_name##Impl final : public Tk##_name##Type 00088 00089 00090 // Macro to declare standard object interfaces, enums, etc. 00091 #define NVBLASTTK_IMPL_DEFINE_IDENTIFIABLE(_id0, _id1, _id2, _id3) \ 00092 /* Begin TkObject */ \ 00093 virtual void release() override; \ 00094 /* End TkObject */ \ 00095 \ 00096 /* Enums */ \ 00097 \ 00098 /* Generate a ClassID enum used to identify this TkIdentifiable. */ \ 00099 enum { ClassID = NVBLAST_FOURCC(_id0, _id1, _id2, _id3) } 00100 00101 00102 // Macro to define class type data 00103 #define NVBLASTTK_DEFINE_TYPE_IDENTIFIABLE(_name) \ 00104 TkTypeImpl Tk##_name##Type::s_type("Tk" #_name, Tk##_name##Impl::ClassID, 0) 00105 00106 00107 #endif // ifndef NVBLASTTKCOMMON_H