struct IndexedFile<'a>
{
apd: &'a AccessPagedData,
root: u64,
recs_per_page: u16,
record_count: u64,
}
struct PageInfo
{
recsize : u16, used : u16, }
use page_store::AccessPagedData;
impl <'a> IndexedFile<'a> {
fn new(apd: &'a AccessPagedData, root: u64) -> Self {
Self {apd, root, recs_per_page: 256, record_count: 0}
}
fn foreach<F>(_f: F, _start: u64, _count: u64)
where
F: FnMut(u64, &DataRef) -> bool,
{
todo!()
}
fn insert( _id: u64, _data: &[u8] )
{
let _page_index = id % 256;
todo!()
}
fn get_page_num(&self, mut pnum: u64, level: u8, mut ix: u64) -> u64 {
if level > 1 {
let x = ix / self.base;
ix %= self.base;
pnum = self.get_page_num(blk, level - 1, x);
}
self.get_num(pnum, ix)
}
fn get_num(&self, pnum: u64) -> u64
{
todo!()
}
}
struct DataRef<'a> {
page: &'a [u8],
off: usize,
}
fn main() {
println!("Hello World");
use ph::fmph;
let keys = [1, 2, 3, 8, 9, 10, 20, 22, 24];
let f = fmph::Function::from(keys.as_ref());
for k in keys { println!("The key {} is assigned the value {}.", k, f.get(&k).unwrap()); }
println!("f bytes={}", f.write_bytes());
for i in 1..=30 { println!("f.get({})={:?}", i, f.get(&i)); }
}
struct PerVec
{
base: u64,
apd: &'a AccessPagedData,
root: u64,
levels : u8,
}
impl PerVec
{
fn get_page(&self, mut page: u64, level: u8, mut ix: u64) -> u64 {
if level > 1 {
let x = ix / self.base;
ix %= self.base;
page = self.get_page(page, level - 1, x);
}
self.get_num(page, ix)
}
. fn get_num(&self, page: u64, ix:u64) -> u64
{
if page == 0 { return 0; }
let data = apd.get_data(page);
let off = ( ix as usize ) * 8;
if off + 8 <= data.len()
{
let data = &data[off..off + 8];
Some( u64::from_le_bytes(data.try_into().unwrap()) )
}
else { 0 }
}
fn get_data_page(&self, ix: u64) -> u64
{
if self.levels == 0 { return self.root; }
self.get_page( self.root, self.levels, ix )
}
}