use std::iter;
use relp_num::One;
use crate::algorithm::two_phase::matrix_provider::column::Column;
pub trait Identity: Column {
fn identity(i: usize, len: usize) -> Self;
}
const ONE: One = One;
#[derive(Debug, Copy, Clone)]
pub struct IdentityColumn {
index: usize,
}
impl IdentityColumn {
pub fn new(index: usize) -> Self {
Self {
index,
}
}
}
impl Column for IdentityColumn {
type F = One;
type Iter<'a> = std::iter::Once<(usize, &'a Self::F)>;
fn iter(&self) -> Self::Iter<'_> {
iter::once((self.index, &ONE))
}
fn index_to_string(&self, i: usize) -> String {
if i == self.index {
"1"
} else {
"0"
}.to_string()
}
}