diff options
author | natrixaeria <upezu@student.kit.edu> | 2020-01-05 21:47:19 +0100 |
---|---|---|
committer | natrixaeria <upezu@student.kit.edu> | 2020-01-05 21:47:19 +0100 |
commit | 85627bc39db56d1ca3dca747535afcf6fd9cdcdd (patch) | |
tree | 80dcd562180573d0a81456ca6cc49ec6faa09d88 /src/solvers | |
parent | 920a6729577d14ba9190abcb3a2c4087652228a4 (diff) |
Create GpuSolver
Diffstat (limited to 'src/solvers')
-rw-r--r-- | src/solvers/gpusolver.rs | 41 | ||||
-rwxr-xr-x | src/solvers/intuitive.rs | 2 | ||||
-rwxr-xr-x | src/solvers/mod.rs | 1 |
3 files changed, 43 insertions, 1 deletions
diff --git a/src/solvers/gpusolver.rs b/src/solvers/gpusolver.rs new file mode 100644 index 0000000..4c58251 --- /dev/null +++ b/src/solvers/gpusolver.rs @@ -0,0 +1,41 @@ +use crate::solver::{wall_stats, Solver, IteratorSolver}; +use crate::structs::StoneWall; + +pub struct GpuSolver { + n: u32, h: u32, w: u32, + permutations: Vec<Vec<u32>>, + masks: Vec<u64>, +} + +impl GpuSolver { + fn solve_to_vec(&mut self) -> Vec<StoneWall> { + vec![] + } +} + +impl Solver for GpuSolver { + fn new(n: u32) -> Self { + let (h, w) = wall_stats(n); + Self { + n, h, w, + permutations: vec![], + masks: vec![] + } + } + fn n(&self) -> u32 { + self.n + } + fn h(&self) -> u32 { + self.h + } + fn w(&self) -> u32 { + self.w + } +} + +impl IteratorSolver for GpuSolver { + type IntoIter = std::vec::IntoIter<StoneWall>; + fn solve(mut self) -> Self::IntoIter { + self.solve_to_vec().into_iter() + } +} diff --git a/src/solvers/intuitive.rs b/src/solvers/intuitive.rs index 3caac73..b8d375a 100755 --- a/src/solvers/intuitive.rs +++ b/src/solvers/intuitive.rs @@ -22,7 +22,7 @@ impl NormalSolver { pub fn new(n: u32) -> Self { let h = n / 2 + 1; let w = h * (n - 1); - let mut heap = (1..=n).collect::<Vec<u32>>(); + let mut heap: Vec<_> = (1..=n).collect(); let heap = permutohedron::Heap::new(&mut heap); let n_f = permutohedron::factorial(n as usize); let chunk = n_f as u32 / n; diff --git a/src/solvers/mod.rs b/src/solvers/mod.rs index 0615eab..6d26266 100755 --- a/src/solvers/mod.rs +++ b/src/solvers/mod.rs @@ -2,6 +2,7 @@ pub mod intuitive; #[cfg(feature = "gpu")] pub mod opencl; +pub mod gpusolver; lazy_static! { pub static ref PERMUTATIONS: (Vec<Vec<u32>>, Vec<u64>) = { |