Main Page   Class List   Class Members  

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

sdk/common/NvBlastIndexFns.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) 2008-2020 NVIDIA Corporation. All rights reserved.
00027 
00028 
00029 #ifndef NVBLASTINDEXFNS_H
00030 #define NVBLASTINDEXFNS_H
00031 
00032 
00033 #include "NvBlastTypes.h"
00034 
00035 #include <cstring>
00036 
00037 
00038 namespace Nv
00039 {
00040 namespace Blast
00041 {
00042 
00046 template<typename T>
00047 NV_INLINE T invalidIndex()
00048 {
00049     return ~(T)0;
00050 }
00051 
00052 
00056 template<typename T>
00057 NV_INLINE bool isInvalidIndex(T index)
00058 {
00059     return index == invalidIndex<T>();
00060 }
00061 
00062 
00095 template<typename T>
00096 void createIndexStartLookup(T* lookup, T indexBase, T indexRange, T* indexSource, T indexCount, T indexByteStride)
00097 {
00098     ++indexBase;    // Ordering invalidIndex<T>() as lowest value
00099     T indexPos = 0;
00100     for (T i = 0; i <= indexRange; ++i)
00101     {
00102         for (; indexPos < indexCount; ++indexPos, indexSource = (T*)((uintptr_t)indexSource + indexByteStride))
00103         {
00104             if (*indexSource + 1 >= i + indexBase)  // +1 to order invalidIndex<T>() as lowest value
00105             {
00106                 lookup[i] = indexPos;
00107                 break;
00108             }
00109         }
00110         if (indexPos == indexCount)
00111         {
00112             lookup[i] = indexPos;
00113         }
00114     }
00115     lookup[indexRange + 1] = indexCount;
00116 }
00117 
00118 
00127 template<typename T>
00128 void invertMap(T* inverseMap, const T* map, const T size)
00129 {
00130     memset(inverseMap, invalidIndex<T>(), size*sizeof(T));
00131 
00132     for (T i = 0; i < size; i++)
00133     {
00134         if (!isInvalidIndex(map[i]))
00135         {
00136             inverseMap[map[i]] = i;
00137         }
00138     }
00139 }
00140 
00141 } // end namespace Blast
00142 } // end namespace Nv
00143 
00144 
00145 #endif // #ifndef NVBLASTINDEXFNS_H
Copyright © 2015-2017 NVIDIA Corporation, 2701 San Tomas Expressway, Santa Clara, CA 95050 U.S.A. All rights reserved. www.nvidia.com