Remove unused
This commit is contained in:
@@ -1,5 +1,3 @@
|
||||
use netpod::range::evrange::SeriesRange;
|
||||
|
||||
// TODO rename, no more deque involved
|
||||
pub trait HasTimestampDeque {
|
||||
fn timestamp_min(&self) -> Option<u64>;
|
||||
@@ -7,144 +5,3 @@ pub trait HasTimestampDeque {
|
||||
fn pulse_min(&self) -> Option<u64>;
|
||||
fn pulse_max(&self) -> Option<u64>;
|
||||
}
|
||||
|
||||
pub trait RangeOverlapInfo {
|
||||
fn ends_before(&self, range: &SeriesRange) -> bool;
|
||||
fn ends_after(&self, range: &SeriesRange) -> bool;
|
||||
fn starts_after(&self, range: &SeriesRange) -> bool;
|
||||
}
|
||||
|
||||
#[macro_export]
|
||||
macro_rules! impl_range_overlap_info_events {
|
||||
($ty:ident) => {
|
||||
impl<STY> RangeOverlapInfo for $ty<STY>
|
||||
where
|
||||
STY: ScalarOps,
|
||||
{
|
||||
fn ends_before(&self, range: &SeriesRange) -> bool {
|
||||
if range.is_time() {
|
||||
if let Some(max) = HasTimestampDeque::timestamp_max(self) {
|
||||
max < range.beg_u64()
|
||||
} else {
|
||||
true
|
||||
}
|
||||
} else if range.is_pulse() {
|
||||
if let Some(max) = HasTimestampDeque::pulse_max(self) {
|
||||
max < range.beg_u64()
|
||||
} else {
|
||||
true
|
||||
}
|
||||
} else {
|
||||
error!("unexpected");
|
||||
true
|
||||
}
|
||||
}
|
||||
|
||||
fn ends_after(&self, range: &SeriesRange) -> bool {
|
||||
if range.is_time() {
|
||||
if let Some(max) = HasTimestampDeque::timestamp_max(self) {
|
||||
max >= range.end_u64()
|
||||
} else {
|
||||
true
|
||||
}
|
||||
} else if range.is_pulse() {
|
||||
if let Some(max) = HasTimestampDeque::pulse_max(self) {
|
||||
max >= range.end_u64()
|
||||
} else {
|
||||
true
|
||||
}
|
||||
} else {
|
||||
error!("unexpected");
|
||||
false
|
||||
}
|
||||
}
|
||||
|
||||
fn starts_after(&self, range: &SeriesRange) -> bool {
|
||||
if range.is_time() {
|
||||
if let Some(min) = HasTimestampDeque::timestamp_min(self) {
|
||||
min >= range.end_u64()
|
||||
} else {
|
||||
true
|
||||
}
|
||||
} else if range.is_pulse() {
|
||||
if let Some(min) = HasTimestampDeque::pulse_min(self) {
|
||||
min >= range.end_u64()
|
||||
} else {
|
||||
true
|
||||
}
|
||||
} else {
|
||||
error!("unexpected");
|
||||
true
|
||||
}
|
||||
}
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
#[macro_export]
|
||||
macro_rules! impl_range_overlap_info_bins {
|
||||
($ty:ident) => {
|
||||
impl<STY> RangeOverlapInfo for $ty<STY>
|
||||
where
|
||||
STY: ScalarOps,
|
||||
{
|
||||
fn ends_before(&self, range: &SeriesRange) -> bool {
|
||||
if range.is_time() {
|
||||
if let Some(max) = HasTimestampDeque::timestamp_max(self) {
|
||||
max <= range.beg_u64()
|
||||
} else {
|
||||
true
|
||||
}
|
||||
} else if range.is_pulse() {
|
||||
// TODO for the time being, the ts represent either ts or pulse
|
||||
if let Some(max) = HasTimestampDeque::timestamp_max(self) {
|
||||
max <= range.beg_u64()
|
||||
} else {
|
||||
true
|
||||
}
|
||||
} else {
|
||||
error!("unexpected");
|
||||
true
|
||||
}
|
||||
}
|
||||
|
||||
fn ends_after(&self, range: &SeriesRange) -> bool {
|
||||
if range.is_time() {
|
||||
if let Some(max) = HasTimestampDeque::timestamp_max(self) {
|
||||
max > range.end_u64()
|
||||
} else {
|
||||
true
|
||||
}
|
||||
} else if range.is_pulse() {
|
||||
if let Some(max) = HasTimestampDeque::timestamp_max(self) {
|
||||
max > range.end_u64()
|
||||
} else {
|
||||
true
|
||||
}
|
||||
} else {
|
||||
error!("unexpected");
|
||||
false
|
||||
}
|
||||
}
|
||||
|
||||
fn starts_after(&self, range: &SeriesRange) -> bool {
|
||||
if range.is_time() {
|
||||
if let Some(min) = HasTimestampDeque::timestamp_min(self) {
|
||||
min >= range.end_u64()
|
||||
} else {
|
||||
true
|
||||
}
|
||||
} else if range.is_pulse() {
|
||||
if let Some(min) = HasTimestampDeque::timestamp_min(self) {
|
||||
min >= range.end_u64()
|
||||
} else {
|
||||
true
|
||||
}
|
||||
} else {
|
||||
error!("unexpected");
|
||||
true
|
||||
}
|
||||
}
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
@@ -1,28 +1,17 @@
|
||||
pub mod timebinimpl;
|
||||
|
||||
use crate::collect_s::CollectableDyn;
|
||||
use crate::collect_s::CollectorDyn;
|
||||
use crate::collect_s::ToJsonResult;
|
||||
use crate::container::ByteEstimate;
|
||||
use crate::overlap::RangeOverlapInfo;
|
||||
use crate::vecpreview::PreviewRange;
|
||||
use crate::AsAnyMut;
|
||||
use crate::AsAnyRef;
|
||||
use crate::Empty;
|
||||
use crate::Events;
|
||||
use crate::Resettable;
|
||||
use crate::TypeName;
|
||||
use crate::WithLen;
|
||||
use err::thiserror;
|
||||
use err::Error;
|
||||
use err::ThisError;
|
||||
use netpod::log::*;
|
||||
use netpod::range::evrange::SeriesRange;
|
||||
use netpod::BinnedRange;
|
||||
use netpod::BinnedRangeEnum;
|
||||
use netpod::TsNano;
|
||||
use serde::Deserialize;
|
||||
use serde::Serialize;
|
||||
use std::any::Any;
|
||||
use std::fmt;
|
||||
use std::ops::Range;
|
||||
@@ -170,20 +159,6 @@ impl Clone for Box<dyn TimeBinned> {
|
||||
}
|
||||
}
|
||||
|
||||
impl RangeOverlapInfo for Box<dyn TimeBinned> {
|
||||
fn ends_before(&self, range: &SeriesRange) -> bool {
|
||||
todo!()
|
||||
}
|
||||
|
||||
fn ends_after(&self, range: &SeriesRange) -> bool {
|
||||
todo!()
|
||||
}
|
||||
|
||||
fn starts_after(&self, range: &SeriesRange) -> bool {
|
||||
todo!()
|
||||
}
|
||||
}
|
||||
|
||||
impl TimeBinnable for Box<dyn TimeBinned> {
|
||||
fn time_binner_new(
|
||||
&self,
|
||||
@@ -230,9 +205,7 @@ pub trait TimeBinner: fmt::Debug + Send {
|
||||
|
||||
/// Provides a time-binned representation of the implementing type.
|
||||
/// In contrast to `TimeBinnableType` this is meant for trait objects.
|
||||
pub trait TimeBinnable:
|
||||
fmt::Debug + WithLen + RangeOverlapInfo + CollectableDyn + Any + AsAnyRef + AsAnyMut + Send
|
||||
{
|
||||
pub trait TimeBinnable: fmt::Debug + WithLen + CollectableDyn + Any + AsAnyRef + AsAnyMut + Send {
|
||||
// TODO implementors may fail if edges contain not at least 2 entries.
|
||||
fn time_binner_new(
|
||||
&self,
|
||||
@@ -252,21 +225,6 @@ impl WithLen for Box<dyn TimeBinnable> {
|
||||
}
|
||||
}
|
||||
|
||||
#[allow(unused)]
|
||||
impl RangeOverlapInfo for Box<dyn TimeBinnable> {
|
||||
fn ends_before(&self, range: &SeriesRange) -> bool {
|
||||
todo!()
|
||||
}
|
||||
|
||||
fn ends_after(&self, range: &SeriesRange) -> bool {
|
||||
todo!()
|
||||
}
|
||||
|
||||
fn starts_after(&self, range: &SeriesRange) -> bool {
|
||||
todo!()
|
||||
}
|
||||
}
|
||||
|
||||
impl TimeBinnable for Box<dyn TimeBinnable> {
|
||||
fn time_binner_new(
|
||||
&self,
|
||||
@@ -286,20 +244,6 @@ impl TimeBinnable for Box<dyn TimeBinnable> {
|
||||
}
|
||||
}
|
||||
|
||||
impl RangeOverlapInfo for Box<dyn Events> {
|
||||
fn ends_before(&self, range: &SeriesRange) -> bool {
|
||||
RangeOverlapInfo::ends_before(self.as_ref(), range)
|
||||
}
|
||||
|
||||
fn ends_after(&self, range: &SeriesRange) -> bool {
|
||||
RangeOverlapInfo::ends_after(self.as_ref(), range)
|
||||
}
|
||||
|
||||
fn starts_after(&self, range: &SeriesRange) -> bool {
|
||||
RangeOverlapInfo::starts_after(self.as_ref(), range)
|
||||
}
|
||||
}
|
||||
|
||||
impl TimeBinnable for Box<dyn Events> {
|
||||
fn time_binner_new(
|
||||
&self,
|
||||
@@ -425,7 +369,7 @@ impl TimeBinnerTy for TimeBinnerDynStruct {
|
||||
}
|
||||
|
||||
impl TimeBinner for TimeBinnerDynStruct {
|
||||
fn ingest(&mut self, item: &mut dyn TimeBinnable) {
|
||||
fn ingest(&mut self, _item: &mut dyn TimeBinnable) {
|
||||
todo!()
|
||||
}
|
||||
|
||||
@@ -437,7 +381,7 @@ impl TimeBinner for TimeBinnerDynStruct {
|
||||
todo!()
|
||||
}
|
||||
|
||||
fn push_in_progress(&mut self, push_empty: bool) {
|
||||
fn push_in_progress(&mut self, _push_empty: bool) {
|
||||
todo!()
|
||||
}
|
||||
|
||||
|
||||
@@ -1,199 +0,0 @@
|
||||
#![allow(unused)]
|
||||
use crate::timebin::TimeBinnable;
|
||||
use crate::timebin::TimeBinned;
|
||||
use crate::timebin::TimeBinner;
|
||||
use crate::timebin::TimeBinnerIngest;
|
||||
use crate::TypeName;
|
||||
use netpod::log::*;
|
||||
use netpod::range::evrange::NanoRange;
|
||||
|
||||
#[allow(unused)]
|
||||
macro_rules! trace2 {
|
||||
($($arg:tt)*) => { trace!($($arg)*) };
|
||||
}
|
||||
|
||||
#[allow(unused)]
|
||||
macro_rules! trace_ingest {
|
||||
($($arg:tt)*) => { trace!($($arg)*) };
|
||||
}
|
||||
|
||||
#[cfg(target_abi = "x32")]
|
||||
impl<T> TimeBinner for T
|
||||
where
|
||||
T: TimeBinnerIngest,
|
||||
{
|
||||
fn bins_ready_count(&self) -> usize {
|
||||
match &self.ready {
|
||||
Some(k) => k.len(),
|
||||
None => 0,
|
||||
}
|
||||
}
|
||||
|
||||
fn bins_ready(&mut self) -> Option<Box<dyn TimeBinned>> {
|
||||
match self.ready.take() {
|
||||
Some(k) => Some(Box::new(k)),
|
||||
None => None,
|
||||
}
|
||||
}
|
||||
|
||||
fn ingest(&mut self, item: &mut dyn TimeBinnable) {
|
||||
trace2!(
|
||||
"TimeBinner for {} ingest agg.range {:?} item {:?}",
|
||||
self.type_name(),
|
||||
self.agg.range(),
|
||||
item
|
||||
);
|
||||
if item.len() == 0 {
|
||||
// Return already here, RangeOverlapInfo would not give much sense.
|
||||
return;
|
||||
}
|
||||
// TODO optimize by remembering at which event array index we have arrived.
|
||||
// That needs modified interfaces which can take and yield the start and latest index.
|
||||
loop {
|
||||
while item.starts_after(self.agg.range()) {
|
||||
trace!(
|
||||
"{} IGNORE ITEM AND CYCLE BECAUSE item.starts_after",
|
||||
self.type_name()
|
||||
);
|
||||
self.cycle();
|
||||
if self.rng.is_none() {
|
||||
warn!("{} no more bin in edges B", self.type_name());
|
||||
return;
|
||||
}
|
||||
}
|
||||
if item.ends_before(self.agg.range()) {
|
||||
trace!("{} IGNORE ITEM BECAUSE ends_before", self.type_name());
|
||||
return;
|
||||
} else {
|
||||
if self.rng.is_none() {
|
||||
trace!("{} no more bin in edges D", self.type_name());
|
||||
return;
|
||||
} else {
|
||||
match TimeBinnerIngest::ingest_inrange(self, item) {
|
||||
Ok(()) => {
|
||||
if item.ends_after(self.agg.range()) {
|
||||
trace_ingest!("{} FED ITEM, ENDS AFTER.", self.type_name());
|
||||
self.cycle();
|
||||
if self.rng.is_none() {
|
||||
warn!("{} no more bin in edges C", self.type_name());
|
||||
return;
|
||||
} else {
|
||||
trace_ingest!("{} FED ITEM, CYCLED, CONTINUE.", self.type_name());
|
||||
}
|
||||
} else {
|
||||
trace_ingest!("{} FED ITEM.", self.type_name());
|
||||
break;
|
||||
}
|
||||
}
|
||||
Err(e) => {
|
||||
error!("{}::ingest {}", self.type_name(), e);
|
||||
}
|
||||
}
|
||||
/*
|
||||
// Move to TimeBinnerIngest
|
||||
if let Some(item) = item
|
||||
.as_any_ref()
|
||||
// TODO make statically sure that we attempt to cast to the correct type here:
|
||||
.downcast_ref::<<EventsDim0Aggregator<STY> as TimeBinnableTypeAggregator>::Input>()
|
||||
{
|
||||
// TODO collect statistics associated with this request:
|
||||
trace_ingest!("{self_name} FEED THE ITEM...");
|
||||
self.agg.ingest(item);
|
||||
} else {
|
||||
error!("{self_name}::ingest unexpected item type");
|
||||
};
|
||||
*/
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
fn push_in_progress(&mut self, push_empty: bool) {
|
||||
trace!("{}::push_in_progress push_empty {push_empty}", self.type_name());
|
||||
// TODO expand should be derived from AggKind. Is it still required after all?
|
||||
// TODO here, the expand means that agg will assume that the current value is kept constant during
|
||||
// the rest of the time range.
|
||||
if self.rng.is_none() {
|
||||
} else {
|
||||
let expand = true;
|
||||
let range_next = self.next_bin_range();
|
||||
self.rng = range_next.clone();
|
||||
let mut bins = if let Some(range_next) = range_next {
|
||||
self.agg.result_reset(range_next, expand)
|
||||
} else {
|
||||
// Acts as placeholder
|
||||
let range_next = NanoRange {
|
||||
beg: u64::MAX - 1,
|
||||
end: u64::MAX,
|
||||
};
|
||||
self.agg.result_reset(range_next.into(), expand)
|
||||
};
|
||||
if bins.len() != 1 {
|
||||
error!("{}::push_in_progress bins.len() {}", self.type_name(), bins.len());
|
||||
return;
|
||||
} else {
|
||||
if push_empty || bins.counts[0] != 0 {
|
||||
match self.ready.as_mut() {
|
||||
Some(ready) => {
|
||||
ready.append_all_from(&mut bins);
|
||||
}
|
||||
None => {
|
||||
self.ready = Some(bins);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
fn cycle(&mut self) {
|
||||
trace!("{}::cycle", self.type_name());
|
||||
// TODO refactor this logic.
|
||||
let n = self.bins_ready_count();
|
||||
self.push_in_progress(true);
|
||||
if self.bins_ready_count() == n {
|
||||
let range_next = self.next_bin_range();
|
||||
self.rng = range_next.clone();
|
||||
if let Some(range) = range_next {
|
||||
/*
|
||||
TODO Move out to trait.
|
||||
let mut bins = BinsDim0::empty();
|
||||
if range.is_time() {
|
||||
bins.append_zero(range.beg_u64(), range.end_u64());
|
||||
} else {
|
||||
error!("TODO {self_name}::cycle is_pulse");
|
||||
}
|
||||
match self.ready.as_mut() {
|
||||
Some(ready) => {
|
||||
ready.append_all_from(&mut bins);
|
||||
}
|
||||
None => {
|
||||
self.ready = Some(bins);
|
||||
}
|
||||
}
|
||||
*/
|
||||
if self.bins_ready_count() <= n {
|
||||
error!("{}::cycle failed to push a zero bin", self.type_name());
|
||||
}
|
||||
} else {
|
||||
warn!(
|
||||
"{}::cycle no in-progress bin pushed, but also no more bin to add as zero-bin",
|
||||
self.type_name()
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
fn set_range_complete(&mut self) {
|
||||
self.range_final = true;
|
||||
}
|
||||
|
||||
fn empty(&self) -> Box<dyn TimeBinned> {
|
||||
/*
|
||||
TODO factor out to trait.
|
||||
let ret = <EventsDim0Aggregator<STY> as TimeBinnableTypeAggregator>::Output::empty();
|
||||
*/
|
||||
let ret = todo!();
|
||||
Box::new(ret)
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user