pub fn write<T: Copy>(vec: &mut Vec<T>, pos: usize, buf: &[T], default_value: T){
let len = vec.len();
let end = pos + buf.len();
if end <= len {
return vec[pos..end].copy_from_slice(buf);
}
if pos < len {
vec.truncate(pos);
}else{
if end > vec.capacity() {
vec.reserve(end - len);
}
vec.resize(pos, default_value);
}
vec.extend_from_slice(buf);
}