paleolimbot commented on code in PR #465:
URL: https://github.com/apache/sedona-db/pull/465#discussion_r2713036822
##########
c/sedona-libgpuspatial/libgpuspatial/include/gpuspatial/gpuspatial_c.h:
##########
@@ -20,19 +20,109 @@
extern "C" {
#endif
-struct GpuSpatialJoinerConfig {
- uint32_t concurrency;
+struct GpuSpatialRTEngineConfig {
+ /** Path to PTX files */
const char* ptx_root;
+ /** Device ID to use, 0 is the first GPU */
+ int device_id;
+};
+
+struct GpuSpatialRTEngine {
+ /** Initialize the ray-tracing engine (OptiX) with the given configuration
+ * @return 0 on success, non-zero on failure
+ */
+ int (*init)(struct GpuSpatialRTEngine* self, struct
GpuSpatialRTEngineConfig* config);
+ void (*release)(struct GpuSpatialRTEngine* self);
+ void* private_data;
+ const char* last_error;
+};
+
+/** Create an instance of GpuSpatialRTEngine */
+void GpuSpatialRTEngineCreate(struct GpuSpatialRTEngine* instance);
+
+struct GpuSpatialIndexConfig {
+ /** Pointer to an initialized GpuSpatialRTEngine struct */
+ struct GpuSpatialRTEngine* rt_engine;
+ /** How many threads will concurrently call Probe method */
+ uint32_t concurrency;
+ /** Device ID to use, 0 is the first GPU */
+ int device_id;
};
-struct GpuSpatialJoinerContext {
+struct GpuSpatialIndexContext {
const char* last_error; // Pointer to std::string to store last error
message
- void* private_data; // GPUSpatial context
void* build_indices; // Pointer to std::vector<uint32_t> to store results
- void* stream_indices;
+ void* probe_indices;
+};
+
+struct GpuSpatialIndexFloat2D {
+ /** Initialize the spatial index with the given configuration
+ *
+ * @return 0 on success, non-zero on failure
+ */
+ int (*init)(struct GpuSpatialIndexFloat2D* self, struct
GpuSpatialIndexConfig* config);
Review Comment:
If we move the `struct GpuSpatialIndexConfig` parameter to
`GpuSpatialIndexFloat2DCreate()` (which I think is possible), this structure
will no longer be GPU-specific (which will make it easier to test by
implementing on the CPU or implement with Apple Metal later)
##########
c/sedona-libgpuspatial/libgpuspatial/include/gpuspatial/gpuspatial_c.h:
##########
@@ -20,19 +20,109 @@
extern "C" {
#endif
-struct GpuSpatialJoinerConfig {
- uint32_t concurrency;
+struct GpuSpatialRTEngineConfig {
+ /** Path to PTX files */
const char* ptx_root;
+ /** Device ID to use, 0 is the first GPU */
+ int device_id;
+};
+
+struct GpuSpatialRTEngine {
+ /** Initialize the ray-tracing engine (OptiX) with the given configuration
+ * @return 0 on success, non-zero on failure
+ */
+ int (*init)(struct GpuSpatialRTEngine* self, struct
GpuSpatialRTEngineConfig* config);
+ void (*release)(struct GpuSpatialRTEngine* self);
+ void* private_data;
+ const char* last_error;
+};
+
+/** Create an instance of GpuSpatialRTEngine */
+void GpuSpatialRTEngineCreate(struct GpuSpatialRTEngine* instance);
+
+struct GpuSpatialIndexConfig {
+ /** Pointer to an initialized GpuSpatialRTEngine struct */
+ struct GpuSpatialRTEngine* rt_engine;
+ /** How many threads will concurrently call Probe method */
+ uint32_t concurrency;
+ /** Device ID to use, 0 is the first GPU */
+ int device_id;
};
-struct GpuSpatialJoinerContext {
+struct GpuSpatialIndexContext {
const char* last_error; // Pointer to std::string to store last error
message
- void* private_data; // GPUSpatial context
void* build_indices; // Pointer to std::vector<uint32_t> to store results
- void* stream_indices;
+ void* probe_indices;
+};
+
+struct GpuSpatialIndexFloat2D {
Review Comment:
Can we call this `SedonaFloatIndex2D`?
##########
c/sedona-libgpuspatial/libgpuspatial/include/gpuspatial/gpuspatial_c.h:
##########
@@ -20,19 +20,109 @@
extern "C" {
#endif
-struct GpuSpatialJoinerConfig {
- uint32_t concurrency;
+struct GpuSpatialRTEngineConfig {
+ /** Path to PTX files */
const char* ptx_root;
+ /** Device ID to use, 0 is the first GPU */
+ int device_id;
+};
+
+struct GpuSpatialRTEngine {
+ /** Initialize the ray-tracing engine (OptiX) with the given configuration
+ * @return 0 on success, non-zero on failure
+ */
+ int (*init)(struct GpuSpatialRTEngine* self, struct
GpuSpatialRTEngineConfig* config);
+ void (*release)(struct GpuSpatialRTEngine* self);
+ void* private_data;
+ const char* last_error;
+};
+
+/** Create an instance of GpuSpatialRTEngine */
+void GpuSpatialRTEngineCreate(struct GpuSpatialRTEngine* instance);
+
+struct GpuSpatialIndexConfig {
+ /** Pointer to an initialized GpuSpatialRTEngine struct */
+ struct GpuSpatialRTEngine* rt_engine;
+ /** How many threads will concurrently call Probe method */
+ uint32_t concurrency;
+ /** Device ID to use, 0 is the first GPU */
+ int device_id;
};
-struct GpuSpatialJoinerContext {
+struct GpuSpatialIndexContext {
Review Comment:
It would be more future-proof to keep this as `last_error` and
`private_data`. (Or maybe just `private_data`, with the last error accessible
via a callback on the GpuSpatialIndexFloat2D). It seems like the intention is
this object is opaque to the user of this API except to pass to methods that
support concurrent access.
##########
c/sedona-libgpuspatial/libgpuspatial/include/gpuspatial/gpuspatial_c.h:
##########
@@ -20,19 +20,109 @@
extern "C" {
#endif
-struct GpuSpatialJoinerConfig {
- uint32_t concurrency;
+struct GpuSpatialRTEngineConfig {
+ /** Path to PTX files */
const char* ptx_root;
+ /** Device ID to use, 0 is the first GPU */
+ int device_id;
+};
+
+struct GpuSpatialRTEngine {
+ /** Initialize the ray-tracing engine (OptiX) with the given configuration
+ * @return 0 on success, non-zero on failure
+ */
+ int (*init)(struct GpuSpatialRTEngine* self, struct
GpuSpatialRTEngineConfig* config);
+ void (*release)(struct GpuSpatialRTEngine* self);
+ void* private_data;
+ const char* last_error;
+};
+
+/** Create an instance of GpuSpatialRTEngine */
+void GpuSpatialRTEngineCreate(struct GpuSpatialRTEngine* instance);
+
+struct GpuSpatialIndexConfig {
+ /** Pointer to an initialized GpuSpatialRTEngine struct */
+ struct GpuSpatialRTEngine* rt_engine;
+ /** How many threads will concurrently call Probe method */
+ uint32_t concurrency;
+ /** Device ID to use, 0 is the first GPU */
+ int device_id;
};
-struct GpuSpatialJoinerContext {
+struct GpuSpatialIndexContext {
const char* last_error; // Pointer to std::string to store last error
message
- void* private_data; // GPUSpatial context
void* build_indices; // Pointer to std::vector<uint32_t> to store results
- void* stream_indices;
+ void* probe_indices;
+};
+
+struct GpuSpatialIndexFloat2D {
+ /** Initialize the spatial index with the given configuration
+ *
+ * @return 0 on success, non-zero on failure
+ */
+ int (*init)(struct GpuSpatialIndexFloat2D* self, struct
GpuSpatialIndexConfig* config);
+ /** Clear the spatial index, removing all built data */
+ void (*clear)(struct GpuSpatialIndexFloat2D* self);
+ /** Create a new context for concurrent probing */
+ void (*create_context)(struct GpuSpatialIndexFloat2D* self,
+ struct GpuSpatialIndexContext* context);
+ /** Destroy a previously created context */
+ void (*destroy_context)(struct GpuSpatialIndexContext* context);
+ /** Push rectangles for building the spatial index, each rectangle is
represented by 4
+ * floats: [min_x, min_y, max_x, max_y] Points can also be indexed by
providing [x, y,
+ * x, y] but points and rectangles cannot be mixed
+ *
+ * @return 0 on success, non-zero on failure
+ */
+ int (*push_build)(struct GpuSpatialIndexFloat2D* self, const float* buf,
+ uint32_t n_rects);
+ /**
+ * Finish building the spatial index after all rectangles have been pushed
+ *
+ * @return 0 on success, non-zero on failure
+ */
+ int (*finish_building)(struct GpuSpatialIndexFloat2D* self);
+ /**
+ * Probe the spatial index with the given rectangles, each rectangle is
represented by 4
+ * floats: [min_x, min_y, max_x, max_y] Points can also be probed by
providing [x, y, x,
+ * y] but points and rectangles cannot be mixed in one Probe call. The
results of the
+ * probe will be stored in the context.
+ *
+ * @return 0 on success, non-zero on failure
+ */
+ int (*probe)(struct GpuSpatialIndexFloat2D* self,
+ struct GpuSpatialIndexContext* context, const float* buf,
+ uint32_t n_rects);
+ /** Get the build indices buffer from the context
+ *
+ * @return A pointer to the buffer and its length
+ */
+ void (*get_build_indices_buffer)(struct GpuSpatialIndexContext* context,
+ void** build_indices, uint32_t*
build_indices_length);
+ /** Get the probe indices buffer from the context
+ *
+ * @return A pointer to the buffer and its length
+ */
+ void (*get_probe_indices_buffer)(struct GpuSpatialIndexContext* context,
+ void** probe_indices, uint32_t*
probe_indices_length);
+ /** Release the spatial index and free all resources */
+ void (*release)(struct GpuSpatialIndexFloat2D* self);
+ void* private_data;
+ const char* last_error;
Review Comment:
I know it is annoying but it is safer to have this be a callback. If you
leave it as a bare public member of a struct you need some very specific
documented rules about when it is safe to access.
##########
c/sedona-libgpuspatial/libgpuspatial/include/gpuspatial/gpuspatial_c.h:
##########
@@ -20,19 +20,109 @@
extern "C" {
#endif
-struct GpuSpatialJoinerConfig {
- uint32_t concurrency;
+struct GpuSpatialRTEngineConfig {
+ /** Path to PTX files */
const char* ptx_root;
+ /** Device ID to use, 0 is the first GPU */
+ int device_id;
+};
+
+struct GpuSpatialRTEngine {
+ /** Initialize the ray-tracing engine (OptiX) with the given configuration
+ * @return 0 on success, non-zero on failure
+ */
+ int (*init)(struct GpuSpatialRTEngine* self, struct
GpuSpatialRTEngineConfig* config);
+ void (*release)(struct GpuSpatialRTEngine* self);
+ void* private_data;
+ const char* last_error;
+};
+
+/** Create an instance of GpuSpatialRTEngine */
+void GpuSpatialRTEngineCreate(struct GpuSpatialRTEngine* instance);
+
+struct GpuSpatialIndexConfig {
+ /** Pointer to an initialized GpuSpatialRTEngine struct */
+ struct GpuSpatialRTEngine* rt_engine;
+ /** How many threads will concurrently call Probe method */
+ uint32_t concurrency;
+ /** Device ID to use, 0 is the first GPU */
+ int device_id;
};
-struct GpuSpatialJoinerContext {
+struct GpuSpatialIndexContext {
const char* last_error; // Pointer to std::string to store last error
message
- void* private_data; // GPUSpatial context
void* build_indices; // Pointer to std::vector<uint32_t> to store results
- void* stream_indices;
+ void* probe_indices;
+};
+
+struct GpuSpatialIndexFloat2D {
+ /** Initialize the spatial index with the given configuration
+ *
+ * @return 0 on success, non-zero on failure
+ */
+ int (*init)(struct GpuSpatialIndexFloat2D* self, struct
GpuSpatialIndexConfig* config);
+ /** Clear the spatial index, removing all built data */
+ void (*clear)(struct GpuSpatialIndexFloat2D* self);
+ /** Create a new context for concurrent probing */
+ void (*create_context)(struct GpuSpatialIndexFloat2D* self,
+ struct GpuSpatialIndexContext* context);
+ /** Destroy a previously created context */
+ void (*destroy_context)(struct GpuSpatialIndexContext* context);
+ /** Push rectangles for building the spatial index, each rectangle is
represented by 4
+ * floats: [min_x, min_y, max_x, max_y] Points can also be indexed by
providing [x, y,
+ * x, y] but points and rectangles cannot be mixed
+ *
+ * @return 0 on success, non-zero on failure
+ */
+ int (*push_build)(struct GpuSpatialIndexFloat2D* self, const float* buf,
+ uint32_t n_rects);
+ /**
+ * Finish building the spatial index after all rectangles have been pushed
+ *
+ * @return 0 on success, non-zero on failure
+ */
+ int (*finish_building)(struct GpuSpatialIndexFloat2D* self);
+ /**
+ * Probe the spatial index with the given rectangles, each rectangle is
represented by 4
+ * floats: [min_x, min_y, max_x, max_y] Points can also be probed by
providing [x, y, x,
+ * y] but points and rectangles cannot be mixed in one Probe call. The
results of the
+ * probe will be stored in the context.
+ *
+ * @return 0 on success, non-zero on failure
+ */
+ int (*probe)(struct GpuSpatialIndexFloat2D* self,
+ struct GpuSpatialIndexContext* context, const float* buf,
+ uint32_t n_rects);
+ /** Get the build indices buffer from the context
+ *
+ * @return A pointer to the buffer and its length
+ */
+ void (*get_build_indices_buffer)(struct GpuSpatialIndexContext* context,
+ void** build_indices, uint32_t*
build_indices_length);
Review Comment:
Can the `build_indices` be any more strongly typed here? (Or can the
docstring be more specific about what exactly it contains?)
##########
c/sedona-libgpuspatial/libgpuspatial/include/gpuspatial/gpuspatial_c.h:
##########
@@ -43,31 +133,35 @@ enum GpuSpatialPredicate {
GpuSpatialPredicateCoveredBy
};
-struct GpuSpatialJoiner {
- int (*init)(struct GpuSpatialJoiner* self, struct GpuSpatialJoinerConfig*
config);
- void (*clear)(struct GpuSpatialJoiner* self);
- void (*create_context)(struct GpuSpatialJoiner* self,
- struct GpuSpatialJoinerContext* context);
- void (*destroy_context)(struct GpuSpatialJoinerContext* context);
- int (*push_build)(struct GpuSpatialJoiner* self, const struct ArrowSchema*
schema,
- const struct ArrowArray* array, int64_t offset, int64_t
length);
- int (*finish_building)(struct GpuSpatialJoiner* self);
- int (*push_stream)(struct GpuSpatialJoiner* self,
- struct GpuSpatialJoinerContext* context,
- const struct ArrowSchema* schema, const struct
ArrowArray* array,
- int64_t offset, int64_t length, enum GpuSpatialPredicate
predicate,
- int32_t array_index_offset);
- void (*get_build_indices_buffer)(struct GpuSpatialJoinerContext* context,
- void** build_indices, uint32_t*
build_indices_length);
- void (*get_stream_indices_buffer)(struct GpuSpatialJoinerContext* context,
- void** stream_indices,
- uint32_t* stream_indices_length);
- void (*release)(struct GpuSpatialJoiner* self);
+struct GpuSpatialRefiner {
+ int (*init)(struct GpuSpatialRefiner* self, struct GpuSpatialRefinerConfig*
config);
Review Comment:
As above, can this be a `SedonaSpatialRefiner` with the
`GpuSpatialRefinerConfig` moved to `GpuSpatialRefinerCreate()`? We can (and
should!) reuse this struct for things that are not just NVIDIA GPUs.
##########
c/sedona-libgpuspatial/libgpuspatial/include/gpuspatial/gpuspatial_c.h:
##########
@@ -43,31 +133,35 @@ enum GpuSpatialPredicate {
GpuSpatialPredicateCoveredBy
};
-struct GpuSpatialJoiner {
- int (*init)(struct GpuSpatialJoiner* self, struct GpuSpatialJoinerConfig*
config);
- void (*clear)(struct GpuSpatialJoiner* self);
- void (*create_context)(struct GpuSpatialJoiner* self,
- struct GpuSpatialJoinerContext* context);
- void (*destroy_context)(struct GpuSpatialJoinerContext* context);
- int (*push_build)(struct GpuSpatialJoiner* self, const struct ArrowSchema*
schema,
- const struct ArrowArray* array, int64_t offset, int64_t
length);
- int (*finish_building)(struct GpuSpatialJoiner* self);
- int (*push_stream)(struct GpuSpatialJoiner* self,
- struct GpuSpatialJoinerContext* context,
- const struct ArrowSchema* schema, const struct
ArrowArray* array,
- int64_t offset, int64_t length, enum GpuSpatialPredicate
predicate,
- int32_t array_index_offset);
- void (*get_build_indices_buffer)(struct GpuSpatialJoinerContext* context,
- void** build_indices, uint32_t*
build_indices_length);
- void (*get_stream_indices_buffer)(struct GpuSpatialJoinerContext* context,
- void** stream_indices,
- uint32_t* stream_indices_length);
- void (*release)(struct GpuSpatialJoiner* self);
+struct GpuSpatialRefiner {
+ int (*init)(struct GpuSpatialRefiner* self, struct GpuSpatialRefinerConfig*
config);
+
+ int (*clear)(struct GpuSpatialRefiner* self);
+
+ int (*push_build)(struct GpuSpatialRefiner* self,
+ const struct ArrowSchema* build_schema,
+ const struct ArrowArray* build_array);
+
+ int (*finish_building)(struct GpuSpatialRefiner* self);
+
+ int (*refine_loaded)(struct GpuSpatialRefiner* self,
+ const struct ArrowSchema* probe_schema,
+ const struct ArrowArray* probe_array,
+ enum GpuSpatialRelationPredicate predicate,
+ uint32_t* build_indices, uint32_t* probe_indices,
+ uint32_t indices_size, uint32_t* new_indices_size);
+
+ int (*refine)(struct GpuSpatialRefiner* self, const struct ArrowSchema*
schema1,
+ const struct ArrowArray* array1, const struct ArrowSchema*
schema2,
+ const struct ArrowArray* array2,
+ enum GpuSpatialRelationPredicate predicate, uint32_t* indices1,
+ uint32_t* indices2, uint32_t indices_size, uint32_t*
new_indices_size);
+ void (*release)(struct GpuSpatialRefiner* self);
Review Comment:
This `last_error` should probably be a callback (as above)
##########
c/sedona-libgpuspatial/libgpuspatial/include/gpuspatial/gpuspatial_c.h:
##########
@@ -20,19 +20,109 @@
extern "C" {
#endif
-struct GpuSpatialJoinerConfig {
- uint32_t concurrency;
+struct GpuSpatialRTEngineConfig {
+ /** Path to PTX files */
const char* ptx_root;
+ /** Device ID to use, 0 is the first GPU */
+ int device_id;
+};
+
+struct GpuSpatialRTEngine {
+ /** Initialize the ray-tracing engine (OptiX) with the given configuration
+ * @return 0 on success, non-zero on failure
+ */
+ int (*init)(struct GpuSpatialRTEngine* self, struct
GpuSpatialRTEngineConfig* config);
+ void (*release)(struct GpuSpatialRTEngine* self);
+ void* private_data;
+ const char* last_error;
+};
+
+/** Create an instance of GpuSpatialRTEngine */
+void GpuSpatialRTEngineCreate(struct GpuSpatialRTEngine* instance);
+
+struct GpuSpatialIndexConfig {
+ /** Pointer to an initialized GpuSpatialRTEngine struct */
+ struct GpuSpatialRTEngine* rt_engine;
+ /** How many threads will concurrently call Probe method */
+ uint32_t concurrency;
+ /** Device ID to use, 0 is the first GPU */
+ int device_id;
};
-struct GpuSpatialJoinerContext {
+struct GpuSpatialIndexContext {
const char* last_error; // Pointer to std::string to store last error
message
- void* private_data; // GPUSpatial context
void* build_indices; // Pointer to std::vector<uint32_t> to store results
- void* stream_indices;
+ void* probe_indices;
+};
+
+struct GpuSpatialIndexFloat2D {
+ /** Initialize the spatial index with the given configuration
+ *
+ * @return 0 on success, non-zero on failure
+ */
+ int (*init)(struct GpuSpatialIndexFloat2D* self, struct
GpuSpatialIndexConfig* config);
+ /** Clear the spatial index, removing all built data */
+ void (*clear)(struct GpuSpatialIndexFloat2D* self);
+ /** Create a new context for concurrent probing */
+ void (*create_context)(struct GpuSpatialIndexFloat2D* self,
+ struct GpuSpatialIndexContext* context);
+ /** Destroy a previously created context */
+ void (*destroy_context)(struct GpuSpatialIndexContext* context);
+ /** Push rectangles for building the spatial index, each rectangle is
represented by 4
+ * floats: [min_x, min_y, max_x, max_y] Points can also be indexed by
providing [x, y,
+ * x, y] but points and rectangles cannot be mixed
+ *
+ * @return 0 on success, non-zero on failure
+ */
+ int (*push_build)(struct GpuSpatialIndexFloat2D* self, const float* buf,
+ uint32_t n_rects);
+ /**
+ * Finish building the spatial index after all rectangles have been pushed
+ *
+ * @return 0 on success, non-zero on failure
+ */
+ int (*finish_building)(struct GpuSpatialIndexFloat2D* self);
+ /**
+ * Probe the spatial index with the given rectangles, each rectangle is
represented by 4
+ * floats: [min_x, min_y, max_x, max_y] Points can also be probed by
providing [x, y, x,
+ * y] but points and rectangles cannot be mixed in one Probe call. The
results of the
+ * probe will be stored in the context.
+ *
+ * @return 0 on success, non-zero on failure
+ */
+ int (*probe)(struct GpuSpatialIndexFloat2D* self,
+ struct GpuSpatialIndexContext* context, const float* buf,
+ uint32_t n_rects);
+ /** Get the build indices buffer from the context
+ *
+ * @return A pointer to the buffer and its length
+ */
+ void (*get_build_indices_buffer)(struct GpuSpatialIndexContext* context,
+ void** build_indices, uint32_t*
build_indices_length);
+ /** Get the probe indices buffer from the context
+ *
+ * @return A pointer to the buffer and its length
+ */
+ void (*get_probe_indices_buffer)(struct GpuSpatialIndexContext* context,
+ void** probe_indices, uint32_t*
probe_indices_length);
Review Comment:
Can the `probe_indices` be any more strongly typed here? (Or can the
docstring be more specific about what is expected?)
##########
c/sedona-libgpuspatial/libgpuspatial/include/gpuspatial/gpuspatial_c.h:
##########
@@ -43,31 +133,35 @@ enum GpuSpatialPredicate {
GpuSpatialPredicateCoveredBy
};
-struct GpuSpatialJoiner {
- int (*init)(struct GpuSpatialJoiner* self, struct GpuSpatialJoinerConfig*
config);
- void (*clear)(struct GpuSpatialJoiner* self);
- void (*create_context)(struct GpuSpatialJoiner* self,
- struct GpuSpatialJoinerContext* context);
- void (*destroy_context)(struct GpuSpatialJoinerContext* context);
- int (*push_build)(struct GpuSpatialJoiner* self, const struct ArrowSchema*
schema,
- const struct ArrowArray* array, int64_t offset, int64_t
length);
- int (*finish_building)(struct GpuSpatialJoiner* self);
- int (*push_stream)(struct GpuSpatialJoiner* self,
- struct GpuSpatialJoinerContext* context,
- const struct ArrowSchema* schema, const struct
ArrowArray* array,
- int64_t offset, int64_t length, enum GpuSpatialPredicate
predicate,
- int32_t array_index_offset);
- void (*get_build_indices_buffer)(struct GpuSpatialJoinerContext* context,
- void** build_indices, uint32_t*
build_indices_length);
- void (*get_stream_indices_buffer)(struct GpuSpatialJoinerContext* context,
- void** stream_indices,
- uint32_t* stream_indices_length);
- void (*release)(struct GpuSpatialJoiner* self);
+struct GpuSpatialRefiner {
+ int (*init)(struct GpuSpatialRefiner* self, struct GpuSpatialRefinerConfig*
config);
+
+ int (*clear)(struct GpuSpatialRefiner* self);
+
+ int (*push_build)(struct GpuSpatialRefiner* self,
+ const struct ArrowSchema* build_schema,
Review Comment:
Is it possible to pass the `build_schema` and the `probe_schema` separately
(maybe as arguments to `init`?) and remove them from the other methods?
(Totally fine if this is not possible, just might help reduce the number of
arguments to the other callbacks)
##########
c/sedona-libgpuspatial/libgpuspatial/src/rt/rt_engine.cpp:
##########
@@ -14,7 +14,7 @@
// KIND, either express or implied. See the License for the
// specific language governing permissions and limitations
// under the License.
-#include "gpuspatial/index/detail/rt_engine.hpp"
+#include "gpuspatial/rt/rt_engine.hpp"
Review Comment:
Similarly, if `.h` and `.hpp` are both used it usually means that `.h` files
are intended for C usage. If it's easy to rename the `.h` files intended for
C++ usage it may look slightly cleaner.
##########
c/sedona-libgpuspatial/libgpuspatial/src/gpuspatial_c.cc:
##########
Review Comment:
I see some `.cc` files and some `.cpp` files...if it's easy to rename these
I usually see projects choose one and rename files to match (except for
vendored files).
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: [email protected]
For queries about this service, please contact Infrastructure at:
[email protected]