Main Page   Class List   Class Members  

  • Main Page
  • User's Guide
  • Modules
  • Namespaces
  • Classes
  • Files
  • File List
  • File Members

sdk/toolkit/source/NvBlastTkCommon.h

Go to the documentation of this file.
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
Copyright © 2015-2017 NVIDIA Corporation, 2701 San Tomas Expressway, Santa Clara, CA 95050 U.S.A. All rights reserved. www.nvidia.com