red/src/buffer.rs

52 lines
1.2 KiB
Rust

use std::io;
pub struct Buffer {
has_changed: bool,
buffer: Vec<Result<String, io::Error>>,
current_line: usize,
}
impl Buffer {
pub fn new(buffer: Vec<Result<String, io::Error>>) -> Self {
let tmp = buffer.len().saturating_sub(1);
Self {
has_changed: false,
buffer,
current_line: tmp
}
}
// Return the actual line of the buffer
pub fn act(&self) -> usize {
self.current_line
}
// change la ligne actuelle
pub fn change_act(&mut self, new: usize) {
// TODO check si > len
self.current_line = new;
}
// affiche une ligne
pub fn print_line(&self, nb: usize, print_numbers: bool) {
if nb >= self.buffer.len() {
println!("?");
} else if let Ok(line) = &self.buffer[nb] {
if print_numbers {
println!("{}\t{}", nb + 1, line);
} else {
println!("{}", line);
}
} else {
println!("?");
}
}
// affiche plusieurs lignes
pub fn print_range(&self, first: usize, last: usize, print_numbers: bool) {
for i in first..last {
self.print_line(i, print_numbers);
}
}
}