diff --git a/.rustfmt.toml b/.rustfmt.toml new file mode 100644 index 0000000..8feb93e --- /dev/null +++ b/.rustfmt.toml @@ -0,0 +1,4 @@ +imports_granularity = "Crate" +group_imports = "StdExternalCrate" +wrap_comments = true +edition = "2024" diff --git a/Cargo.lock b/Cargo.lock index 7efc37b..28d6af2 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -351,7 +351,7 @@ dependencies = [ ] [[package]] -name = "autobats" +name = "autobarts" version = "0.1.0" dependencies = [ "bevy", @@ -365,6 +365,7 @@ dependencies = [ "rusqlite", "rusqlite_migration", "steel-core", + "steel-derive", ] [[package]] diff --git a/Cargo.toml b/Cargo.toml index dbcd962..a4b587a 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,11 +1,10 @@ [package] -name = "autobats" +name = "autobarts" version = "0.1.0" edition = "2024" [dependencies] bevy = { version = "0.18", default-features = false, features = ["2d"] } -criterion = { version = "0.8.1", default-features = false, features = ["cargo_bench_support", "rayon"] } dirs = "6.0.0" include_dir = "0.7.4" ordered-float = "5.1.0" @@ -13,6 +12,7 @@ rstar = "0.12.2" rusqlite = { version = "0.37", default-features = false, features = ["bundled", "blob", "functions", "jiff"] } rusqlite_migration = { version = "2.3.0", features = ["from-directory"] } steel-core = { git="https://github.com/mattwparas/steel.git", branch = "master" } +steel-derive = { git="https://github.com/mattwparas/steel.git", branch = "master" } # Enable a small amount of optimization in the dev profile. [profile.dev] @@ -25,6 +25,7 @@ opt-level = 3 [dev-dependencies] rand = "0.9.2" rand_hc = "0.4.0" +criterion = { version = "0.8.1", default-features = false, features = ["cargo_bench_support", "rayon"] } [[bench]] name = "benchmarks" diff --git a/assets/scripts/tank.scm b/assets/scripts/tank.scm new file mode 100644 index 0000000..c67feb0 --- /dev/null +++ b/assets/scripts/tank.scm @@ -0,0 +1,4 @@ +(struct point (x)) + +(define (dist p1 p2) + ) diff --git a/benches/benchmarks.rs b/benches/benchmarks.rs index 5071884..6de3b82 100644 --- a/benches/benchmarks.rs +++ b/benches/benchmarks.rs @@ -86,7 +86,7 @@ fn range_query(c: &mut Criterion) { criterion_group!( benches, - //bulk_load_baseline, + bulk_load_baseline, // bulk_load_comparison, // tree_creation_quality, range_query @@ -95,7 +95,7 @@ criterion_main!(benches); fn create_random_points(num_points: usize, seed: &[u8; 32]) -> Vec { let mut rng = Hc128Rng::from_seed(*seed); - let r = (-10_000.0)..=10_000.0; + let r = (-1_000.0)..=1_000.0; (0..num_points) .map(|_| Point::new(rng.random_range(r.clone()), rng.random_range(r.clone()))) .collect() diff --git a/src/ffi.rs b/src/ffi.rs new file mode 100644 index 0000000..667467a --- /dev/null +++ b/src/ffi.rs @@ -0,0 +1,21 @@ +use steel::steel_vm::{engine::Engine, register_fn::RegisterFn}; + +use crate::geom::*; + +//pub struct + +pub fn get_vm() -> Engine { + let mut vm = Engine::new(); + vm.register_type::("point?"); + vm.register_fn("dist2", dist2); + vm.register_fn("dist", dist); + vm +} + +fn dist2(p1: &Point, p2: &Point) -> f32 { + p1.point.distance_squared(p2.point) +} + +fn dist(p1: &Point, p2: &Point) -> f32 { + p1.point.distance(p2.point) +} diff --git a/src/geom.rs b/src/geom.rs index deafe05..b3616b7 100644 --- a/src/geom.rs +++ b/src/geom.rs @@ -3,8 +3,9 @@ use std::cmp::Ordering; use bevy::prelude::*; use ordered_float::OrderedFloat; use rstar::Point as PointTrait; +use steel_derive::Steel; -#[derive(Debug, Clone, Copy)] +#[derive(Debug, Clone, Copy, Steel)] pub struct Point { pub point: Vec2, pub entity: Entity, diff --git a/src/lib.rs b/src/lib.rs index 60d1429..287b189 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -1,2 +1,3 @@ pub mod db; +pub mod ffi; pub mod geom; diff --git a/src/main.rs b/src/main.rs index ca7406b..dace6db 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,4 +1,4 @@ -use autobats::db::init_db; +use autobarts::db::init_db; use bevy::prelude::*; fn main() {