 struct bbox_transformation
 {
     __host__ __device__
-    bbox operator()(float2 point)
+    bbox operator()(point2d point)
     {
         return bbox(point, point);
     }

    const size_t N = 40;
    
    // allocate storage for points
    thrust::device_vector<float2> points(N);

    // generate some random points in the unit square
    for(size_t i = 0; i < N; i++)
        points[i] = make_float2( ((float) rand() / (RAND_MAX + 1.0)), ((float) rand() / (RAND_MAX + 1.0)) );

    // initial bounding box contains first point
    bbox init = bbox(points[0], points[0]);

    bbox operator()(bbox a, bbox b)
    {
        // lower left corner
        point2d ll(min(a.first.x, b.first.x), min(a.first.y, b.first.y));
        
        // upper right corner
        point2d ur(max(a.second.x, b.second.x), max(a.second.y, b.second.y));

        return bbox(ll, ur);
    }
