summaryrefslogtreecommitdiff
path: root/src/solvers
diff options
context:
space:
mode:
authornatrixaeria <upezu@student.kit.edu>2020-01-05 21:47:19 +0100
committernatrixaeria <upezu@student.kit.edu>2020-01-05 21:47:19 +0100
commit85627bc39db56d1ca3dca747535afcf6fd9cdcdd (patch)
tree80dcd562180573d0a81456ca6cc49ec6faa09d88 /src/solvers
parent920a6729577d14ba9190abcb3a2c4087652228a4 (diff)
Create GpuSolver
Diffstat (limited to 'src/solvers')
-rw-r--r--src/solvers/gpusolver.rs41
-rwxr-xr-xsrc/solvers/intuitive.rs2
-rwxr-xr-xsrc/solvers/mod.rs1
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>) = {