mirror of
https://github.com/bitcoinresearchkit/brk.git
synced 2026-04-29 00:59:58 -07:00
server: catalog v1
This commit is contained in:
@@ -11,7 +11,7 @@ use crate::{Indexes, grouped::LazyVecsBuilder, indexes};
|
||||
|
||||
use super::{ComputedType, EagerVecsBuilder, Source, VecBuilderOptions};
|
||||
|
||||
#[derive(Clone, Traversable, Allocative)]
|
||||
#[derive(Clone, Allocative)]
|
||||
pub struct ComputedVecsFromDateIndex<T>
|
||||
where
|
||||
T: ComputedType + PartialOrd,
|
||||
@@ -144,3 +144,42 @@ where
|
||||
Ok(())
|
||||
}
|
||||
}
|
||||
|
||||
impl<T> Traversable for ComputedVecsFromDateIndex<T>
|
||||
where
|
||||
T: ComputedType,
|
||||
{
|
||||
fn to_tree_node(&self) -> brk_traversable::TreeNode {
|
||||
brk_traversable::TreeNode::List(
|
||||
[
|
||||
self.dateindex.as_ref().map(|nested| nested.to_tree_node()),
|
||||
Some(self.dateindex_extra.to_tree_node()),
|
||||
Some(self.weekindex.to_tree_node()),
|
||||
Some(self.monthindex.to_tree_node()),
|
||||
Some(self.quarterindex.to_tree_node()),
|
||||
Some(self.semesterindex.to_tree_node()),
|
||||
Some(self.yearindex.to_tree_node()),
|
||||
Some(self.decadeindex.to_tree_node()),
|
||||
]
|
||||
.into_iter()
|
||||
.flatten()
|
||||
.collect(),
|
||||
)
|
||||
.collect_unique_leaves()
|
||||
}
|
||||
|
||||
fn iter_any_collectable(&self) -> impl Iterator<Item = &dyn vecdb::AnyCollectableVec> {
|
||||
let mut regular_iter: Box<dyn Iterator<Item = &dyn vecdb::AnyCollectableVec>> =
|
||||
Box::new(self.dateindex_extra.iter_any_collectable());
|
||||
regular_iter = Box::new(regular_iter.chain(self.weekindex.iter_any_collectable()));
|
||||
regular_iter = Box::new(regular_iter.chain(self.monthindex.iter_any_collectable()));
|
||||
regular_iter = Box::new(regular_iter.chain(self.quarterindex.iter_any_collectable()));
|
||||
regular_iter = Box::new(regular_iter.chain(self.semesterindex.iter_any_collectable()));
|
||||
regular_iter = Box::new(regular_iter.chain(self.yearindex.iter_any_collectable()));
|
||||
regular_iter = Box::new(regular_iter.chain(self.decadeindex.iter_any_collectable()));
|
||||
if let Some(ref x) = self.dateindex {
|
||||
regular_iter = Box::new(regular_iter.chain(x.iter_any_collectable()));
|
||||
}
|
||||
regular_iter
|
||||
}
|
||||
}
|
||||
|
||||
@@ -16,7 +16,7 @@ use crate::{
|
||||
|
||||
use super::{ComputedType, EagerVecsBuilder, VecBuilderOptions};
|
||||
|
||||
#[derive(Clone, Traversable, Allocative)]
|
||||
#[derive(Clone, Allocative)]
|
||||
pub struct ComputedVecsFromHeight<T>
|
||||
where
|
||||
T: ComputedType + PartialOrd,
|
||||
@@ -200,3 +200,46 @@ where
|
||||
Ok(())
|
||||
}
|
||||
}
|
||||
|
||||
impl<T> Traversable for ComputedVecsFromHeight<T>
|
||||
where
|
||||
T: ComputedType,
|
||||
{
|
||||
fn to_tree_node(&self) -> brk_traversable::TreeNode {
|
||||
brk_traversable::TreeNode::List(
|
||||
[
|
||||
self.height.as_ref().map(|nested| nested.to_tree_node()),
|
||||
Some(self.height_extra.to_tree_node()),
|
||||
Some(self.dateindex.to_tree_node()),
|
||||
Some(self.weekindex.to_tree_node()),
|
||||
Some(self.difficultyepoch.to_tree_node()),
|
||||
Some(self.monthindex.to_tree_node()),
|
||||
Some(self.quarterindex.to_tree_node()),
|
||||
Some(self.semesterindex.to_tree_node()),
|
||||
Some(self.yearindex.to_tree_node()),
|
||||
Some(self.decadeindex.to_tree_node()),
|
||||
]
|
||||
.into_iter()
|
||||
.flatten()
|
||||
.collect(),
|
||||
)
|
||||
.collect_unique_leaves()
|
||||
}
|
||||
|
||||
fn iter_any_collectable(&self) -> impl Iterator<Item = &dyn vecdb::AnyCollectableVec> {
|
||||
let mut regular_iter: Box<dyn Iterator<Item = &dyn vecdb::AnyCollectableVec>> =
|
||||
Box::new(self.height_extra.iter_any_collectable());
|
||||
regular_iter = Box::new(regular_iter.chain(self.dateindex.iter_any_collectable()));
|
||||
regular_iter = Box::new(regular_iter.chain(self.weekindex.iter_any_collectable()));
|
||||
regular_iter = Box::new(regular_iter.chain(self.difficultyepoch.iter_any_collectable()));
|
||||
regular_iter = Box::new(regular_iter.chain(self.monthindex.iter_any_collectable()));
|
||||
regular_iter = Box::new(regular_iter.chain(self.quarterindex.iter_any_collectable()));
|
||||
regular_iter = Box::new(regular_iter.chain(self.semesterindex.iter_any_collectable()));
|
||||
regular_iter = Box::new(regular_iter.chain(self.yearindex.iter_any_collectable()));
|
||||
regular_iter = Box::new(regular_iter.chain(self.decadeindex.iter_any_collectable()));
|
||||
if let Some(ref x) = self.height {
|
||||
regular_iter = Box::new(regular_iter.chain(x.iter_any_collectable()));
|
||||
}
|
||||
regular_iter
|
||||
}
|
||||
}
|
||||
|
||||
@@ -8,7 +8,7 @@ use crate::{Indexes, indexes};
|
||||
|
||||
use super::{ComputedType, EagerVecsBuilder, VecBuilderOptions};
|
||||
|
||||
#[derive(Clone, Traversable)]
|
||||
#[derive(Clone)]
|
||||
pub struct ComputedVecsFromHeightStrict<T>
|
||||
where
|
||||
T: ComputedType + PartialOrd,
|
||||
@@ -83,3 +83,29 @@ where
|
||||
Ok(())
|
||||
}
|
||||
}
|
||||
|
||||
impl<T> Traversable for ComputedVecsFromHeightStrict<T>
|
||||
where
|
||||
T: ComputedType,
|
||||
{
|
||||
fn to_tree_node(&self) -> brk_traversable::TreeNode {
|
||||
brk_traversable::TreeNode::List(
|
||||
[
|
||||
Some(self.height.to_tree_node()),
|
||||
Some(self.height_extra.to_tree_node()),
|
||||
Some(self.difficultyepoch.to_tree_node()),
|
||||
]
|
||||
.into_iter()
|
||||
.flatten()
|
||||
.collect(),
|
||||
)
|
||||
.collect_unique_leaves()
|
||||
}
|
||||
fn iter_any_collectable(&self) -> impl Iterator<Item = &dyn vecdb::AnyCollectableVec> {
|
||||
let mut regular_iter: Box<dyn Iterator<Item = &dyn vecdb::AnyCollectableVec>> =
|
||||
Box::new(self.height.iter_any_collectable());
|
||||
regular_iter = Box::new(regular_iter.chain(self.height_extra.iter_any_collectable()));
|
||||
regular_iter = Box::new(regular_iter.chain(self.difficultyepoch.iter_any_collectable()));
|
||||
regular_iter
|
||||
}
|
||||
}
|
||||
|
||||
@@ -19,7 +19,7 @@ use crate::{
|
||||
|
||||
use super::{ComputedType, EagerVecsBuilder, VecBuilderOptions};
|
||||
|
||||
#[derive(Clone, Traversable, Allocative)]
|
||||
#[derive(Clone, Allocative)]
|
||||
pub struct ComputedVecsFromTxindex<T>
|
||||
where
|
||||
T: ComputedType + PartialOrd,
|
||||
@@ -587,3 +587,46 @@ impl ComputedVecsFromTxindex<Dollars> {
|
||||
self.compute_after_height(indexes, starting_indexes, exit)
|
||||
}
|
||||
}
|
||||
|
||||
impl<T> Traversable for ComputedVecsFromTxindex<T>
|
||||
where
|
||||
T: ComputedType,
|
||||
{
|
||||
fn to_tree_node(&self) -> brk_traversable::TreeNode {
|
||||
brk_traversable::TreeNode::List(
|
||||
[
|
||||
self.txindex.as_ref().map(|nested| nested.to_tree_node()),
|
||||
Some(self.height.to_tree_node()),
|
||||
Some(self.dateindex.to_tree_node()),
|
||||
Some(self.weekindex.to_tree_node()),
|
||||
Some(self.difficultyepoch.to_tree_node()),
|
||||
Some(self.monthindex.to_tree_node()),
|
||||
Some(self.quarterindex.to_tree_node()),
|
||||
Some(self.semesterindex.to_tree_node()),
|
||||
Some(self.yearindex.to_tree_node()),
|
||||
Some(self.decadeindex.to_tree_node()),
|
||||
]
|
||||
.into_iter()
|
||||
.flatten()
|
||||
.collect(),
|
||||
)
|
||||
.collect_unique_leaves()
|
||||
}
|
||||
|
||||
fn iter_any_collectable(&self) -> impl Iterator<Item = &dyn vecdb::AnyCollectableVec> {
|
||||
let mut regular_iter: Box<dyn Iterator<Item = &dyn vecdb::AnyCollectableVec>> =
|
||||
Box::new(self.height.iter_any_collectable());
|
||||
regular_iter = Box::new(regular_iter.chain(self.dateindex.iter_any_collectable()));
|
||||
regular_iter = Box::new(regular_iter.chain(self.weekindex.iter_any_collectable()));
|
||||
regular_iter = Box::new(regular_iter.chain(self.difficultyepoch.iter_any_collectable()));
|
||||
regular_iter = Box::new(regular_iter.chain(self.monthindex.iter_any_collectable()));
|
||||
regular_iter = Box::new(regular_iter.chain(self.quarterindex.iter_any_collectable()));
|
||||
regular_iter = Box::new(regular_iter.chain(self.semesterindex.iter_any_collectable()));
|
||||
regular_iter = Box::new(regular_iter.chain(self.yearindex.iter_any_collectable()));
|
||||
regular_iter = Box::new(regular_iter.chain(self.decadeindex.iter_any_collectable()));
|
||||
if let Some(ref x) = self.txindex {
|
||||
regular_iter = Box::new(regular_iter.chain(x.iter_any_collectable()));
|
||||
}
|
||||
regular_iter
|
||||
}
|
||||
}
|
||||
|
||||
@@ -470,7 +470,7 @@ impl Vecs {
|
||||
vecs,
|
||||
by_size_range
|
||||
.iter()
|
||||
.filter(|other| other.includes(filter))
|
||||
.filter(|Filtered(other, _)| filter.includes(other))
|
||||
.map(Filtered::t)
|
||||
.collect::<Vec<_>>(),
|
||||
)
|
||||
@@ -484,7 +484,7 @@ impl Vecs {
|
||||
vecs,
|
||||
by_size_range
|
||||
.iter()
|
||||
.filter(|other| other.includes(filter))
|
||||
.filter(|Filtered(other, _)| filter.includes(other))
|
||||
.map(Filtered::t)
|
||||
.collect::<Vec<_>>(),
|
||||
)
|
||||
|
||||
@@ -1647,7 +1647,7 @@ impl Vecs {
|
||||
vecs,
|
||||
by_date_range
|
||||
.iter()
|
||||
.filter(|other| other.includes(filter))
|
||||
.filter(|Filtered(other, _)| filter.includes(other))
|
||||
.map(Filtered::t)
|
||||
.collect::<Vec<_>>(),
|
||||
)
|
||||
@@ -1657,7 +1657,7 @@ impl Vecs {
|
||||
vecs,
|
||||
by_date_range
|
||||
.iter()
|
||||
.filter(|other| other.includes(filter))
|
||||
.filter(|Filtered(other, _)| filter.includes(other))
|
||||
.map(Filtered::t)
|
||||
.collect::<Vec<_>>(),
|
||||
)
|
||||
@@ -1667,7 +1667,7 @@ impl Vecs {
|
||||
vecs,
|
||||
by_date_range
|
||||
.iter()
|
||||
.filter(|other| other.includes(filter))
|
||||
.filter(|Filtered(other, _)| filter.includes(other))
|
||||
.map(Filtered::t)
|
||||
.collect::<Vec<_>>(),
|
||||
)
|
||||
@@ -1677,7 +1677,7 @@ impl Vecs {
|
||||
vecs,
|
||||
by_size_range
|
||||
.iter()
|
||||
.filter(|other| other.includes(filter))
|
||||
.filter(|Filtered(other, _)| filter.includes(other))
|
||||
.map(Filtered::t)
|
||||
.collect::<Vec<_>>(),
|
||||
)
|
||||
@@ -1687,7 +1687,7 @@ impl Vecs {
|
||||
vecs,
|
||||
by_size_range
|
||||
.iter()
|
||||
.filter(|other| other.includes(filter))
|
||||
.filter(|Filtered(other, _)| filter.includes(other))
|
||||
.map(Filtered::t)
|
||||
.collect::<Vec<_>>(),
|
||||
)
|
||||
|
||||
Reference in New Issue
Block a user