# Source tree structure {#NanoVDB_SourceTree}

#### Overview of the directory tree of NanoVDB.

* [NanoVDB.h](https://github.com/AcademySoftwareFoundation/openvdb/blob/master/nanovdb/nanovdb/NanoVDB.h) C++11 implementation of the core data structure and its access methods.
* [CNanoVDB.h](https://github.com/AcademySoftwareFoundation/openvdb/blob/master/nanovdb/nanovdb/CNanoVDB.h) Incomplete but useable C99 implementation of the core data structure and its access methods.  Designed in particular for use in OpenCL kernels.  Note that this relies on zero-sized arrays for the _reserved padding, so will not work on all compilers (with MSVC being a particular example)
* [PNanoVDB.h](https://github.com/AcademySoftwareFoundation/openvdb/blob/master/nanovdb/nanovdb/PNanoVDB.h) C99 implementation of the core data structure and its access methods. More complete coverage than CNanoVDB.  This version is pointer-less and supports virtually all graphics APIs.
* [GridHandle.h](https://github.com/AcademySoftwareFoundation/openvdb/blob/master/nanovdb/nanovdb/GridHandle.h) defines a handler for the memory allocated to a NanoVDB grid.
* [io/IO.h](https://github.com/AcademySoftwareFoundation/openvdb/blob/master/nanovdb/nanovdb/io/IO.h) implements I/O support.
* [tools/CreateNanoGrid.h](https://github.com/AcademySoftwareFoundation/openvdb/blob/master/nanovdb/nanovdb/tools/CreateNanoGrid.h) defines the converter from OpenVDB to NanoVDB and obviously depends on the OpenVDB library (as the only header file).
* [math/Ray.h](https://github.com/AcademySoftwareFoundation/openvdb/blob/master/nanovdb/nanovdb/math/Ray.h) Ray class.
* [math/HDDA.h](https://github.com/AcademySoftwareFoundation/openvdb/blob/master/nanovdb/nanovdb/math/HDDA.h) HDDA related.
* [math/SampleFromVoxels.h](https://github.com/AcademySoftwareFoundation/openvdb/blob/master/nanovdb/nanovdb/math/SampleFromVoxels.h) interpolation.

```bash
foo@bar:~$ tree
.
├── CMakeLists.txt
├── cmd
│   ├── CMakeLists.txt
│   ├── convert
│   │   └── nanovdb_convert.cc
│   ├── print
│   │   └── nanovdb_print.cc
│   ├── updateFiles.sh
│   └── validate
│       └── nanovdb_validate.cc
├── CNanoVDB.h
├── cuda
│   ├── DeviceBuffer.h
│   ├── GridHandle.cuh
│   └── NodeManager.cuh
├── docs
│   ├── CMakeLists.txt
│   ├── codingstyle.txt
│   └── doxygen-config
├── examples
│   ├── CMakeLists.txt
│   ├── ex_bump_pool_buffer
│   │   └── bump_pool_buffer.cc
│   ├── ex_collide_level_set
│   │   ├── common.h
│   │   ├── main.cc
│   │   ├── nanovdb.cu
│   │   └── openvdb.cc
│   ├── ex_index_grid_cuda
│   │   ├── index_grid_cuda.cc
│   │   └── index_grid_cuda_kernel.cu
│   ├── ex_make_custom_nanovdb
│   │   └── make_custom_nanovdb.cc
│   ├── ex_make_custom_nanovdb_cuda
│   │   ├── make_custom_nanovdb_cuda.cc
│   │   └── make_custom_nanovdb_cuda_kernel.cu
│   ├── ex_make_funny_nanovdb
│   │   └── make_funny_nanovdb.cc
│   ├── ex_make_nanovdb_sphere
│   │   └── make_nanovdb_sphere.cc
│   ├── ex_make_typed_grids
│   │   └── make_typed_grids.cc
│   ├── ex_map_pool_buffer
│   │   └── map_pool_buffer.cc
│   ├── ex_modify_nanovdb_thrust
│   │   ├── modify_nanovdb_thrust.cc
│   │   └── modify_nanovdb_thrust.cu
│   ├── ex_nodemanager_cuda
│   │   ├── nodemanager_cuda.cc
│   │   └── nodemanager_cuda_kernel.cu
│   ├── ex_openvdb_to_nanovdb
│   │   └── openvdb_to_nanovdb.cc
│   ├── ex_openvdb_to_nanovdb_accessor
│   │   └── openvdb_to_nanovdb_accessor.cc
│   ├── ex_openvdb_to_nanovdb_cuda
│   │   ├── openvdb_to_nanovdb_cuda.cc
│   │   └── openvdb_to_nanovdb_cuda_kernel.cu
│   ├── ex_raytrace_fog_volume
│   │   ├── common.h
│   │   ├── main.cc
│   │   ├── nanovdb.cu
│   │   └── openvdb.cc
│   ├── ex_raytrace_level_set
│   │   ├── common.h
│   │   ├── main.cc
│   │   ├── nanovdb.cu
│   │   └── openvdb.cc
│   ├── ex_read_nanovdb_sphere
│   │   └── read_nanovdb_sphere.cc
│   ├── ex_read_nanovdb_sphere_accessor
│   │   └── read_nanovdb_sphere_accessor.cc
│   ├── ex_read_nanovdb_sphere_accessor_cuda
│   │   ├── read_nanovdb_sphere_accessor_cuda.cu
│   │   └── read_nanovdb_sphere_accessor_cuda_kernel.cu
│   ├── ex_util
│   │   └── ComputePrimitives.h
│   ├── ex_voxels_to_grid_cuda
│   │   └── ex_voxels_to_grid_cuda.cu
│   ├── ex_vox_to_nanovdb
│   │   ├── vox_to_nanovdb.cc
│   │   └── VoxToNanoVDB.h
│   └── ex_write_nanovdb_grids
│       └── write_nanovdb_grids.cc
├── GridHandle.h
├── HostBuffer.h
├── io
│   └── IO.h
├── math
│   ├── CSampleFromVoxels.h
│   ├── DitherLUT.h
│   ├── HDDA.h
│   ├── Math.h
│   ├── Ray.h
│   ├── SampleFromVoxels.h
│   └── Stencils.h
├── NanoVDB.h
├── NodeManager.h
├── PNanoVDB.h
├── Readme.md
├── tools
│   ├── CreateNanoGrid.h
│   ├── CreatePrimitives.h
│   ├── cuda
│   │   ├── AddBlindData.cuh
│   │   ├── GridChecksum.cuh
│   │   ├── GridStats.cuh
│   │   ├── GridValidator.cuh
│   │   ├── IndexToGrid.cuh
│   │   ├── PointsToGrid.cuh
│   │   └── SignedFloodFill.cuh
│   ├── GridBuilder.h
│   ├── GridChecksum.h
│   ├── GridStats.h
│   ├── GridValidator.h
│   └── NanoToOpenVDB.h
├── unittest
│   ├── CMakeLists.txt
│   ├── pnanovdb_validate_strides.h
│   ├── TestNanoVDB.cc
│   ├── TestNanoVDB.cu
│   └── TestOpenVDB.cc
└── util
    ├── CpuTimer.h
    ├── CreateNanoGrid.h
    ├── cuda
    │   ├── CudaAddBlindData.cuh
    │   ├── CudaDeviceBuffer.h
    │   ├── CudaGridChecksum.cuh
    │   ├── CudaGridHandle.cuh
    │   ├── CudaGridStats.cuh
    │   ├── CudaGridValidator.cuh
    │   ├── CudaIndexToGrid.cuh
    │   ├── CudaNodeManager.cuh
    │   ├── CudaPointsToGrid.cuh
    │   ├── CudaSignedFloodFill.cuh
    │   ├── CudaUtils.h
    │   ├── GpuTimer.h
    │   ├── Timer.h
    │   └── Util.h
    ├── DitherLUT.h
    ├── ForEach.h
    ├── GridBuilder.h
    ├── GridChecksum.h
    ├── GridStats.h
    ├── GridValidator.h
    ├── HDDA.h
    ├── HostBuffer.h
    ├── Invoke.h
    ├── IO.h
    ├── NanoToOpenVDB.h
    ├── NodeManager.h
    ├── OpenToNanoVDB.h
    ├── PrefixSum.h
    ├── Primitives.h
    ├── Range.h
    ├── Ray.h
    ├── Reduce.h
    ├── SampleFromVoxels.h
    ├── Stencils.h
    ├── Timer.h
    └── Util.h