| 1 | // Copyright 2009-2021 Intel Corporation | 
| 2 | // SPDX-License-Identifier: Apache-2.0 | 
| 3 |  | 
| 4 | #pragma once | 
| 5 |  | 
| 6 | #include "bvh_node_ref.h" | 
| 7 |  | 
| 8 | namespace embree | 
| 9 | { | 
| 10 |    | 
| 11 |   /*! BVHN Base Node */ | 
| 12 |   template<typename NodeRef, int N> | 
| 13 |     struct BaseNode_t | 
| 14 |   { | 
| 15 |     /*! Clears the node. */ | 
| 16 |     __forceinline void clear() | 
| 17 |     { | 
| 18 |       for (size_t i=0; i<N; i++) | 
| 19 |         children[i] = NodeRef::emptyNode; | 
| 20 |     } | 
| 21 |      | 
| 22 |     /*! Returns reference to specified child */ | 
| 23 |     __forceinline       NodeRef& child(size_t i)       { assert(i<N); return children[i]; } | 
| 24 |     __forceinline const NodeRef& child(size_t i) const { assert(i<N); return children[i]; } | 
| 25 |      | 
| 26 |     /*! verifies the node */ | 
| 27 |     __forceinline bool verify() const | 
| 28 |     { | 
| 29 |       for (size_t i=0; i<N; i++) { | 
| 30 |         if (child(i) == NodeRef::emptyNode) { | 
| 31 |           for (; i<N; i++) { | 
| 32 |             if (child(i) != NodeRef::emptyNode) | 
| 33 |               return false; | 
| 34 |           } | 
| 35 |           break; | 
| 36 |         } | 
| 37 |       } | 
| 38 |       return true; | 
| 39 |     } | 
| 40 |      | 
| 41 |     NodeRef children[N];    //!< Pointer to the N children (can be a node or leaf) | 
| 42 |   }; | 
| 43 | } | 
| 44 |  |