         : rayMortonCoder(rMC) {}
 
     __host__ __device__
-    thrust::tuple<SignedAxis, float2, float2, float2, float2, float2> operator()(const MortonBound bound) const {
+    inline thrust::tuple<SignedAxis, float2, float2, float2, float2, float2> operator()(const MortonBound bound) const {
         HyperCube cube = rayMortonCoder.HyperCubeFromBound(bound);
         
         return thrust::tuple<SignedAxis, float2, float2, float2, float2, float2>


struct PartitionSideToUint2 {
    __host__ __device__
    uint2 operator()(const PartitionSide side) const {
        return make_uint2(side & LEFT ? 1 : 0, 
                          side & RIGHT ? 1 : 0);
    }

    sphereIndexPartition.resize(sphereIndices.size());
    
    thrust::device_vector<Cone> cones(cubes.Size()); // TODO can't this be passed in from outside to save allocation and dealloc?
    thrust::transform(cubes.Begin(), cubes.End(), cones.begin(), CreateConesFromHypercubes());

    unsigned int spherePartitionPivots[cubes.Size() + 1];
    spherePartitionPivots[0] = 0;
