WIP refactor frame type id, it type checks
This commit is contained in:
@@ -1,9 +1,9 @@
|
||||
use crate::numops::NumOps;
|
||||
use crate::streams::{Collectable, Collector, ToJsonBytes, ToJsonResult};
|
||||
use crate::{
|
||||
ts_offs_from_abs, Appendable, FilterFittingInside, Fits, FitsInside, IsoDateTime, RangeOverlapInfo, ReadPbv,
|
||||
ReadableFromFile, Sitemty, SitemtyFrameType, SubFrId, TimeBinnableType, TimeBinnableTypeAggregator, TimeBins,
|
||||
WithLen,
|
||||
ts_offs_from_abs, Appendable, FilterFittingInside, Fits, FitsInside, FrameTypeStatic, IsoDateTime,
|
||||
RangeOverlapInfo, ReadPbv, ReadableFromFile, Sitemty, SitemtyFrameType, SubFrId, TimeBinnableDyn,
|
||||
TimeBinnableDynAggregator, TimeBinnableType, TimeBinnableTypeAggregator, TimeBinned, TimeBins, WithLen,
|
||||
};
|
||||
use chrono::{TimeZone, Utc};
|
||||
use err::Error;
|
||||
@@ -27,11 +27,25 @@ pub struct MinMaxAvgDim0Bins<NTY> {
|
||||
pub avgs: Vec<Option<f32>>,
|
||||
}
|
||||
|
||||
impl<NTY> FrameTypeStatic for MinMaxAvgDim0Bins<NTY>
|
||||
where
|
||||
NTY: SubFrId,
|
||||
{
|
||||
const FRAME_TYPE_ID: u32 = crate::MIN_MAX_AVG_DIM_0_BINS_FRAME_TYPE_ID + NTY::SUB;
|
||||
|
||||
fn from_error(_: err::Error) -> Self {
|
||||
// TODO remove usage of this
|
||||
panic!()
|
||||
}
|
||||
}
|
||||
|
||||
impl<NTY> SitemtyFrameType for MinMaxAvgDim0Bins<NTY>
|
||||
where
|
||||
NTY: SubFrId,
|
||||
{
|
||||
const FRAME_TYPE_ID: u32 = crate::MIN_MAX_AVG_BINS + NTY::SUB;
|
||||
fn frame_type_id(&self) -> u32 {
|
||||
<Self as FrameTypeStatic>::FRAME_TYPE_ID
|
||||
}
|
||||
}
|
||||
|
||||
impl<NTY> fmt::Debug for MinMaxAvgDim0Bins<NTY>
|
||||
@@ -41,7 +55,7 @@ where
|
||||
fn fmt(&self, fmt: &mut fmt::Formatter) -> fmt::Result {
|
||||
write!(
|
||||
fmt,
|
||||
"MinMaxAvgBins count {} ts1s {:?} ts2s {:?} counts {:?} mins {:?} maxs {:?} avgs {:?}",
|
||||
"MinMaxAvgDim0Bins count {} ts1s {:?} ts2s {:?} counts {:?} mins {:?} maxs {:?} avgs {:?}",
|
||||
self.ts1s.len(),
|
||||
self.ts1s.iter().map(|k| k / SEC).collect::<Vec<_>>(),
|
||||
self.ts2s.iter().map(|k| k / SEC).collect::<Vec<_>>(),
|
||||
@@ -428,3 +442,25 @@ where
|
||||
ret
|
||||
}
|
||||
}
|
||||
|
||||
impl<NTY: NumOps> TimeBinnableDyn for MinMaxAvgDim0Bins<NTY> {
|
||||
fn aggregator_new(&self) -> Box<dyn TimeBinnableDynAggregator> {
|
||||
todo!()
|
||||
}
|
||||
}
|
||||
|
||||
impl<NTY: NumOps> TimeBinned for MinMaxAvgDim0Bins<NTY> {
|
||||
fn as_time_binnable_dyn(&self) -> &dyn TimeBinnableDyn {
|
||||
self as &dyn TimeBinnableDyn
|
||||
}
|
||||
|
||||
fn workaround_clone(&self) -> Box<dyn TimeBinned> {
|
||||
// TODO remove
|
||||
panic!()
|
||||
}
|
||||
|
||||
fn dummy_test_i32(&self) -> i32 {
|
||||
// TODO remove
|
||||
panic!()
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2,9 +2,9 @@ use crate::numops::NumOps;
|
||||
use crate::streams::{Collectable, Collector, ToJsonBytes, ToJsonResult};
|
||||
use crate::waveevents::WaveEvents;
|
||||
use crate::{
|
||||
pulse_offs_from_abs, ts_offs_from_abs, Appendable, FilterFittingInside, Fits, FitsInside, IsoDateTime,
|
||||
RangeOverlapInfo, ReadPbv, ReadableFromFile, Sitemty, SitemtyFrameType, SubFrId, TimeBinnableType,
|
||||
TimeBinnableTypeAggregator, TimeBins, WithLen,
|
||||
pulse_offs_from_abs, ts_offs_from_abs, Appendable, FilterFittingInside, Fits, FitsInside, FrameTypeStatic,
|
||||
IsoDateTime, RangeOverlapInfo, ReadPbv, ReadableFromFile, Sitemty, SitemtyFrameType, SubFrId, TimeBinnableDyn,
|
||||
TimeBinnableDynAggregator, TimeBinnableType, TimeBinnableTypeAggregator, TimeBinned, TimeBins, WithLen,
|
||||
};
|
||||
use chrono::{TimeZone, Utc};
|
||||
use err::Error;
|
||||
@@ -27,11 +27,25 @@ pub struct MinMaxAvgDim1Bins<NTY> {
|
||||
pub avgs: Vec<Option<Vec<f32>>>,
|
||||
}
|
||||
|
||||
impl<NTY> SitemtyFrameType for MinMaxAvgDim1Bins<NTY>
|
||||
impl<NTY> FrameTypeStatic for MinMaxAvgDim1Bins<NTY>
|
||||
where
|
||||
NTY: SubFrId,
|
||||
{
|
||||
const FRAME_TYPE_ID: u32 = crate::MIN_MAX_AVG_DIM_1_BINS_FRAME_TYPE_ID + NTY::SUB;
|
||||
|
||||
fn from_error(_: err::Error) -> Self {
|
||||
// TODO remove usage of this
|
||||
panic!()
|
||||
}
|
||||
}
|
||||
|
||||
impl<NTY> SitemtyFrameType for MinMaxAvgDim1Bins<NTY>
|
||||
where
|
||||
NTY: SubFrId,
|
||||
{
|
||||
fn frame_type_id(&self) -> u32 {
|
||||
<Self as FrameTypeStatic>::FRAME_TYPE_ID
|
||||
}
|
||||
}
|
||||
|
||||
impl<NTY> fmt::Debug for MinMaxAvgDim1Bins<NTY>
|
||||
@@ -531,3 +545,25 @@ where
|
||||
Self::Collector::new(bin_count_exp)
|
||||
}
|
||||
}
|
||||
|
||||
impl<NTY: NumOps> TimeBinnableDyn for MinMaxAvgDim1Bins<NTY> {
|
||||
fn aggregator_new(&self) -> Box<dyn TimeBinnableDynAggregator> {
|
||||
todo!()
|
||||
}
|
||||
}
|
||||
|
||||
impl<NTY: NumOps> TimeBinned for MinMaxAvgDim1Bins<NTY> {
|
||||
fn as_time_binnable_dyn(&self) -> &dyn TimeBinnableDyn {
|
||||
self as &dyn TimeBinnableDyn
|
||||
}
|
||||
|
||||
fn workaround_clone(&self) -> Box<dyn TimeBinned> {
|
||||
// TODO remove
|
||||
panic!()
|
||||
}
|
||||
|
||||
fn dummy_test_i32(&self) -> i32 {
|
||||
// TODO remove
|
||||
panic!()
|
||||
}
|
||||
}
|
||||
|
||||
@@ -11,7 +11,11 @@ pub enum EventsItem {
|
||||
}
|
||||
|
||||
impl SitemtyFrameType for EventsItem {
|
||||
const FRAME_TYPE_ID: u32 = crate::EVENTS_ITEM_FRAME_TYPE_ID;
|
||||
//const FRAME_TYPE_ID: u32 = crate::EVENTS_ITEM_FRAME_TYPE_ID;
|
||||
|
||||
fn frame_type_id(&self) -> u32 {
|
||||
crate::EVENTS_ITEM_FRAME_TYPE_ID
|
||||
}
|
||||
}
|
||||
|
||||
impl EventsItem {
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
use crate::inmem::InMemoryFrame;
|
||||
use crate::{
|
||||
FrameType, ERROR_FRAME_TYPE_ID, INMEM_FRAME_ENCID, INMEM_FRAME_HEAD, INMEM_FRAME_MAGIC, TERM_FRAME_TYPE_ID,
|
||||
FrameType, FrameTypeStatic, ERROR_FRAME_TYPE_ID, INMEM_FRAME_ENCID, INMEM_FRAME_HEAD, INMEM_FRAME_MAGIC,
|
||||
TERM_FRAME_TYPE_ID,
|
||||
};
|
||||
use bytes::{BufMut, BytesMut};
|
||||
use err::Error;
|
||||
@@ -16,17 +17,31 @@ where
|
||||
if item.is_err() {
|
||||
make_error_frame(item.err().unwrap())
|
||||
} else {
|
||||
make_frame_2(item, FT::FRAME_TYPE_ID)
|
||||
make_frame_2(
|
||||
item,
|
||||
//FT::FRAME_TYPE_ID
|
||||
item.frame_type_id(),
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
pub fn make_frame_2<FT>(item: &FT, fty: u32) -> Result<BytesMut, Error>
|
||||
where
|
||||
FT: Serialize,
|
||||
FT: erased_serde::Serialize,
|
||||
{
|
||||
//trace!("make_frame_2");
|
||||
match bincode::serialize(item) {
|
||||
Ok(enc) => {
|
||||
let mut out = vec![];
|
||||
let opts = bincode::DefaultOptions::new()
|
||||
//.with_fixint_encoding()
|
||||
//.allow_trailing_bytes()
|
||||
;
|
||||
let mut ser = bincode::Serializer::new(&mut out, opts);
|
||||
//let mut ser = serde_json::Serializer::new(std::io::stdout());
|
||||
let mut ser2 = <dyn erased_serde::Serializer>::erase(&mut ser);
|
||||
//match bincode::serialize(item) {
|
||||
match item.erased_serialize(&mut ser2) {
|
||||
Ok(_) => {
|
||||
let enc = out;
|
||||
if enc.len() > u32::MAX as usize {
|
||||
return Err(Error::with_msg(format!("too long payload {}", enc.len())));
|
||||
}
|
||||
@@ -105,7 +120,7 @@ pub fn make_term_frame() -> BytesMut {
|
||||
|
||||
pub fn decode_frame<T>(frame: &InMemoryFrame) -> Result<T, Error>
|
||||
where
|
||||
T: FrameType + DeserializeOwned,
|
||||
T: FrameTypeStatic + DeserializeOwned,
|
||||
{
|
||||
if frame.encid() != INMEM_FRAME_ENCID {
|
||||
return Err(Error::with_msg(format!("unknown encoder id {:?}", frame)));
|
||||
@@ -125,7 +140,7 @@ where
|
||||
};
|
||||
Ok(T::from_error(k))
|
||||
} else {
|
||||
let tyid = <T as FrameType>::FRAME_TYPE_ID;
|
||||
let tyid = T::FRAME_TYPE_ID;
|
||||
if frame.tyid() != tyid {
|
||||
return Err(Error::with_msg(format!(
|
||||
"type id mismatch expect {:x} found {:?}",
|
||||
|
||||
@@ -39,11 +39,11 @@ pub const TERM_FRAME_TYPE_ID: u32 = 0x01;
|
||||
pub const ERROR_FRAME_TYPE_ID: u32 = 0x02;
|
||||
pub const EVENT_QUERY_JSON_STRING_FRAME: u32 = 0x100;
|
||||
pub const EVENT_VALUES_FRAME_TYPE_ID: u32 = 0x500;
|
||||
pub const MIN_MAX_AVG_BINS: u32 = 0x700;
|
||||
pub const WAVE_EVENTS_FRAME_TYPE_ID: u32 = 0x800;
|
||||
pub const X_BINNED_SCALAR_EVENTS_FRAME_TYPE_ID: u32 = 0x8800;
|
||||
pub const X_BINNED_WAVE_EVENTS_FRAME_TYPE_ID: u32 = 0x900;
|
||||
pub const MIN_MAX_AVG_WAVE_BINS: u32 = 0xa00;
|
||||
pub const MIN_MAX_AVG_DIM_0_BINS_FRAME_TYPE_ID: u32 = 0x700;
|
||||
pub const MIN_MAX_AVG_DIM_1_BINS_FRAME_TYPE_ID: u32 = 0xb00;
|
||||
pub const EVENT_FULL_FRAME_TYPE_ID: u32 = 0x2200;
|
||||
pub const EVENTS_ITEM_FRAME_TYPE_ID: u32 = 0x2300;
|
||||
@@ -212,38 +212,68 @@ impl SubFrId for BoolNum {
|
||||
const SUB: u32 = 14;
|
||||
}
|
||||
|
||||
// To be implemented by the data containers, i.e. the T's in Sitemty<T>, e.g. ScalarEvents.
|
||||
// TODO rename this, since it is misleading because it is not meanto to be implemented by Sitemty.
|
||||
pub trait SitemtyFrameType {
|
||||
const FRAME_TYPE_ID: u32;
|
||||
//const FRAME_TYPE_ID: u32;
|
||||
fn frame_type_id(&self) -> u32;
|
||||
}
|
||||
|
||||
pub trait FrameType {
|
||||
pub trait FrameTypeStatic {
|
||||
const FRAME_TYPE_ID: u32;
|
||||
fn is_err(&self) -> bool;
|
||||
fn err(&self) -> Option<&::err::Error>;
|
||||
fn from_error(x: ::err::Error) -> Self;
|
||||
}
|
||||
|
||||
impl FrameType for EventQueryJsonStringFrame {
|
||||
// Meant to be implemented by Sitemty.
|
||||
pub trait FrameType {
|
||||
fn frame_type_id(&self) -> u32;
|
||||
fn is_err(&self) -> bool;
|
||||
fn err(&self) -> Option<&::err::Error>;
|
||||
}
|
||||
|
||||
impl FrameTypeStatic for EventQueryJsonStringFrame {
|
||||
const FRAME_TYPE_ID: u32 = EVENT_QUERY_JSON_STRING_FRAME;
|
||||
|
||||
fn from_error(_x: err::Error) -> Self {
|
||||
error!("FrameTypeStatic::from_error todo");
|
||||
todo!()
|
||||
}
|
||||
}
|
||||
|
||||
impl<T: FrameTypeStatic> FrameTypeStatic for Sitemty<T> {
|
||||
const FRAME_TYPE_ID: u32 = <T as FrameTypeStatic>::FRAME_TYPE_ID;
|
||||
|
||||
fn from_error(_: err::Error) -> Self {
|
||||
// TODO remove this method.
|
||||
panic!()
|
||||
}
|
||||
}
|
||||
|
||||
impl<T> FrameType for Box<T>
|
||||
where
|
||||
T: FrameType,
|
||||
{
|
||||
fn frame_type_id(&self) -> u32 {
|
||||
self.as_ref().frame_type_id()
|
||||
}
|
||||
|
||||
fn is_err(&self) -> bool {
|
||||
false
|
||||
self.as_ref().is_err()
|
||||
}
|
||||
|
||||
fn err(&self) -> Option<&::err::Error> {
|
||||
None
|
||||
}
|
||||
|
||||
fn from_error(_x: ::err::Error) -> Self {
|
||||
panic!()
|
||||
self.as_ref().err()
|
||||
}
|
||||
}
|
||||
|
||||
impl<T> FrameType for Sitemty<T>
|
||||
where
|
||||
T: SitemtyFrameType,
|
||||
// SitemtyFrameType
|
||||
T: FrameTypeStatic,
|
||||
{
|
||||
const FRAME_TYPE_ID: u32 = T::FRAME_TYPE_ID;
|
||||
fn frame_type_id(&self) -> u32 {
|
||||
<T as FrameTypeStatic>::FRAME_TYPE_ID
|
||||
}
|
||||
|
||||
fn is_err(&self) -> bool {
|
||||
match self {
|
||||
@@ -258,47 +288,74 @@ where
|
||||
Err(e) => Some(e),
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
fn from_error(x: ::err::Error) -> Self {
|
||||
Err(x)
|
||||
impl FrameType for EventQueryJsonStringFrame {
|
||||
fn frame_type_id(&self) -> u32 {
|
||||
<Self as FrameTypeStatic>::FRAME_TYPE_ID
|
||||
}
|
||||
|
||||
fn is_err(&self) -> bool {
|
||||
false
|
||||
}
|
||||
|
||||
fn err(&self) -> Option<&::err::Error> {
|
||||
None
|
||||
}
|
||||
}
|
||||
|
||||
pub trait ProvidesFrameType {
|
||||
fn frame_type_id(&self) -> u32;
|
||||
impl SitemtyFrameType for Box<dyn TimeBinned> {
|
||||
fn frame_type_id(&self) -> u32 {
|
||||
self.as_time_binnable_dyn().frame_type_id()
|
||||
}
|
||||
}
|
||||
|
||||
pub trait Framable: Send {
|
||||
fn typeid(&self) -> u32;
|
||||
// TODO do we need Send here?
|
||||
pub trait Framable {
|
||||
fn make_frame(&self) -> Result<BytesMut, Error>;
|
||||
}
|
||||
|
||||
// erased_serde::Serialize
|
||||
pub trait FramableInner: SitemtyFrameType + Send {
|
||||
fn _dummy(&self);
|
||||
}
|
||||
|
||||
// erased_serde::Serialize`
|
||||
impl<T: SitemtyFrameType + Send> FramableInner for T {
|
||||
fn _dummy(&self) {}
|
||||
}
|
||||
|
||||
//impl<T: SitemtyFrameType + Serialize + Send> FramableInner for Box<T> {}
|
||||
|
||||
// TODO need also Framable for those types defined in other crates.
|
||||
// TODO not all T have FrameTypeStatic, e.g. Box<dyn TimeBinned>
|
||||
impl<T> Framable for Sitemty<T>
|
||||
where
|
||||
T: SitemtyFrameType + Serialize + Send,
|
||||
//where
|
||||
//Self: erased_serde::Serialize,
|
||||
//T: FramableInner + FrameTypeStatic,
|
||||
//T: Sized,
|
||||
{
|
||||
fn typeid(&self) -> u32 {
|
||||
T::FRAME_TYPE_ID
|
||||
fn make_frame(&self) -> Result<BytesMut, Error> {
|
||||
todo!()
|
||||
}
|
||||
|
||||
fn make_frame(&self) -> Result<BytesMut, Error> {
|
||||
/*fn make_frame(&self) -> Result<BytesMut, Error> {
|
||||
//trace!("make_frame");
|
||||
match self {
|
||||
Ok(_) => make_frame_2(self, T::FRAME_TYPE_ID),
|
||||
Ok(_) => make_frame_2(
|
||||
self,
|
||||
//T::FRAME_TYPE_ID
|
||||
self.frame_type_id(),
|
||||
),
|
||||
Err(e) => make_error_frame(e),
|
||||
}
|
||||
}
|
||||
}*/
|
||||
}
|
||||
|
||||
impl<T> Framable for Box<T>
|
||||
where
|
||||
T: Framable + ?Sized,
|
||||
{
|
||||
fn typeid(&self) -> u32 {
|
||||
self.as_ref().typeid()
|
||||
}
|
||||
|
||||
fn make_frame(&self) -> Result<BytesMut, Error> {
|
||||
self.as_ref().make_frame()
|
||||
}
|
||||
@@ -405,7 +462,7 @@ pub trait TimeBins: Send + Unpin + WithLen + Appendable + FilterFittingInside {
|
||||
}
|
||||
|
||||
pub trait TimeBinnableType:
|
||||
Send + Unpin + RangeOverlapInfo + FilterFittingInside + Appendable + Serialize + ReadableFromFile
|
||||
Send + Unpin + RangeOverlapInfo + FilterFittingInside + Appendable + Serialize + ReadableFromFile + FrameTypeStatic
|
||||
{
|
||||
type Output: TimeBinnableType;
|
||||
type Aggregator: TimeBinnableTypeAggregator<Input = Self, Output = Self::Output> + Send + Unpin;
|
||||
@@ -414,20 +471,39 @@ pub trait TimeBinnableType:
|
||||
|
||||
/// Provides a time-binned representation of the implementing type.
|
||||
/// In contrast to `TimeBinnableType` this is meant for trait objects.
|
||||
pub trait TimeBinnableDyn {}
|
||||
|
||||
// TODO should not require Sync!
|
||||
// TODO SitemtyFrameType is already supertrait of FramableInner.
|
||||
pub trait TimeBinnableDyn: FramableInner + SitemtyFrameType + Sync + Send {
|
||||
fn aggregator_new(&self) -> Box<dyn TimeBinnableDynAggregator>;
|
||||
}
|
||||
|
||||
pub trait TimeBinnableDynAggregator: Send {
|
||||
fn ingest(&mut self, item: &dyn TimeBinnableDyn);
|
||||
fn result(&mut self) -> Box<dyn TimeBinned>;
|
||||
}
|
||||
|
||||
pub trait TimeBinned: Framable + Sync + Send + TimeBinnableDyn {
|
||||
fn aggregator_new(&self) -> Box<dyn TimeBinnableDynAggregator>;
|
||||
/// Container of some form of events, for use as trait object.
|
||||
pub trait EventsDyn: TimeBinnableDyn {}
|
||||
|
||||
/// Data in time-binned form.
|
||||
pub trait TimeBinned: TimeBinnableDyn {
|
||||
fn as_time_binnable_dyn(&self) -> &dyn TimeBinnableDyn;
|
||||
fn workaround_clone(&self) -> Box<dyn TimeBinned>;
|
||||
fn dummy_test_i32(&self) -> i32;
|
||||
}
|
||||
|
||||
// TODO this impl is already covered by the generic one:
|
||||
/*impl FramableInner for Box<dyn TimeBinned> {
|
||||
fn _dummy(&self) {}
|
||||
}*/
|
||||
|
||||
impl TimeBinnableDyn for Box<dyn TimeBinned> {
|
||||
fn aggregator_new(&self) -> Box<dyn TimeBinnableDynAggregator> {
|
||||
self.as_time_binnable_dyn().aggregator_new()
|
||||
}
|
||||
}
|
||||
|
||||
// TODO should get I/O and tokio dependence out of this crate
|
||||
pub trait ReadableFromFile: Sized {
|
||||
fn read_from_file(file: File) -> Result<ReadPbv<Self>, Error>;
|
||||
|
||||
@@ -114,6 +114,7 @@ pub trait NumOps:
|
||||
+ Clone
|
||||
+ AsPrimF32
|
||||
+ Send
|
||||
+ Sync
|
||||
+ Unpin
|
||||
+ Debug
|
||||
+ Zero
|
||||
|
||||
@@ -2,9 +2,9 @@ use crate::binsdim0::MinMaxAvgDim0Bins;
|
||||
use crate::numops::NumOps;
|
||||
use crate::streams::{Collectable, Collector};
|
||||
use crate::{
|
||||
pulse_offs_from_abs, ts_offs_from_abs, Appendable, ByteEstimate, Clearable, EventAppendable, FilterFittingInside,
|
||||
Fits, FitsInside, PushableIndex, RangeOverlapInfo, ReadPbv, ReadableFromFile, SitemtyFrameType, TimeBinnableType,
|
||||
TimeBinnableTypeAggregator, WithLen, WithTimestamps,
|
||||
pulse_offs_from_abs, ts_offs_from_abs, Appendable, ByteEstimate, Clearable, EventAppendable, EventsDyn,
|
||||
FilterFittingInside, Fits, FitsInside, FrameTypeStatic, PushableIndex, RangeOverlapInfo, ReadPbv, ReadableFromFile,
|
||||
SitemtyFrameType, TimeBinnableDyn, TimeBinnableType, TimeBinnableTypeAggregator, WithLen, WithTimestamps,
|
||||
};
|
||||
use err::Error;
|
||||
use netpod::log::*;
|
||||
@@ -49,11 +49,26 @@ impl<NTY> ScalarEvents<NTY> {
|
||||
}
|
||||
}
|
||||
|
||||
impl<NTY> SitemtyFrameType for ScalarEvents<NTY>
|
||||
impl<NTY> FrameTypeStatic for ScalarEvents<NTY>
|
||||
where
|
||||
NTY: NumOps,
|
||||
{
|
||||
const FRAME_TYPE_ID: u32 = crate::EVENT_VALUES_FRAME_TYPE_ID + NTY::SUB;
|
||||
|
||||
fn from_error(_: err::Error) -> Self {
|
||||
// TODO this method should not be used, remove.
|
||||
error!("impl<NTY> FrameTypeStatic for ScalarEvents<NTY>");
|
||||
panic!()
|
||||
}
|
||||
}
|
||||
|
||||
impl<NTY> SitemtyFrameType for ScalarEvents<NTY>
|
||||
where
|
||||
NTY: NumOps,
|
||||
{
|
||||
fn frame_type_id(&self) -> u32 {
|
||||
<Self as FrameTypeStatic>::FRAME_TYPE_ID
|
||||
}
|
||||
}
|
||||
|
||||
impl<NTY> ScalarEvents<NTY> {
|
||||
@@ -539,3 +554,11 @@ where
|
||||
ret
|
||||
}
|
||||
}
|
||||
|
||||
impl<NTY: NumOps> TimeBinnableDyn for ScalarEvents<NTY> {
|
||||
fn aggregator_new(&self) -> Box<dyn crate::TimeBinnableDynAggregator> {
|
||||
todo!()
|
||||
}
|
||||
}
|
||||
|
||||
impl<NTY: NumOps> EventsDyn for ScalarEvents<NTY> {}
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
use crate::streams::{Collectable, Collector};
|
||||
use crate::{
|
||||
ts_offs_from_abs, Appendable, ByteEstimate, Clearable, EventAppendable, FilterFittingInside, Fits, FitsInside,
|
||||
PushableIndex, RangeOverlapInfo, ReadPbv, ReadableFromFile, SitemtyFrameType, TimeBinnableType,
|
||||
FrameTypeStatic, PushableIndex, RangeOverlapInfo, ReadPbv, ReadableFromFile, SitemtyFrameType, TimeBinnableType,
|
||||
TimeBinnableTypeAggregator, WithLen, WithTimestamps,
|
||||
};
|
||||
use err::Error;
|
||||
@@ -17,8 +17,19 @@ pub struct StatsEvents {
|
||||
pub pulses: Vec<u64>,
|
||||
}
|
||||
|
||||
impl SitemtyFrameType for StatsEvents {
|
||||
impl FrameTypeStatic for StatsEvents {
|
||||
const FRAME_TYPE_ID: u32 = crate::STATS_EVENTS_FRAME_TYPE_ID;
|
||||
|
||||
fn from_error(_: err::Error) -> Self {
|
||||
// TODO remove usage of this
|
||||
panic!()
|
||||
}
|
||||
}
|
||||
|
||||
impl SitemtyFrameType for StatsEvents {
|
||||
fn frame_type_id(&self) -> u32 {
|
||||
<Self as FrameTypeStatic>::FRAME_TYPE_ID
|
||||
}
|
||||
}
|
||||
|
||||
impl StatsEvents {
|
||||
|
||||
@@ -3,9 +3,9 @@ use crate::numops::NumOps;
|
||||
use crate::xbinnedscalarevents::XBinnedScalarEvents;
|
||||
use crate::xbinnedwaveevents::XBinnedWaveEvents;
|
||||
use crate::{
|
||||
Appendable, ByteEstimate, Clearable, EventAppendable, EventsNodeProcessor, FilterFittingInside, Fits, FitsInside,
|
||||
PushableIndex, RangeOverlapInfo, ReadPbv, ReadableFromFile, SitemtyFrameType, SubFrId, TimeBinnableType,
|
||||
TimeBinnableTypeAggregator, WithLen, WithTimestamps,
|
||||
Appendable, ByteEstimate, Clearable, EventAppendable, EventsDyn, EventsNodeProcessor, FilterFittingInside, Fits,
|
||||
FitsInside, FrameTypeStatic, PushableIndex, RangeOverlapInfo, ReadPbv, ReadableFromFile, SitemtyFrameType, SubFrId,
|
||||
TimeBinnableDyn, TimeBinnableType, TimeBinnableTypeAggregator, WithLen, WithTimestamps,
|
||||
};
|
||||
use err::Error;
|
||||
use netpod::log::*;
|
||||
@@ -40,11 +40,25 @@ impl<NTY> WaveEvents<NTY> {
|
||||
}
|
||||
}
|
||||
|
||||
impl<NTY> SitemtyFrameType for WaveEvents<NTY>
|
||||
impl<NTY> FrameTypeStatic for WaveEvents<NTY>
|
||||
where
|
||||
NTY: SubFrId,
|
||||
{
|
||||
const FRAME_TYPE_ID: u32 = crate::WAVE_EVENTS_FRAME_TYPE_ID + NTY::SUB;
|
||||
|
||||
fn from_error(_: err::Error) -> Self {
|
||||
// TODO remove this method.
|
||||
panic!()
|
||||
}
|
||||
}
|
||||
|
||||
impl<NTY> SitemtyFrameType for WaveEvents<NTY>
|
||||
where
|
||||
NTY: SubFrId,
|
||||
{
|
||||
fn frame_type_id(&self) -> u32 {
|
||||
<Self as FrameTypeStatic>::FRAME_TYPE_ID
|
||||
}
|
||||
}
|
||||
|
||||
impl<NTY> WaveEvents<NTY> {
|
||||
@@ -494,3 +508,11 @@ where
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
impl<NTY: NumOps> TimeBinnableDyn for WaveEvents<NTY> {
|
||||
fn aggregator_new(&self) -> Box<dyn crate::TimeBinnableDynAggregator> {
|
||||
todo!()
|
||||
}
|
||||
}
|
||||
|
||||
impl<NTY: NumOps> EventsDyn for WaveEvents<NTY> {}
|
||||
|
||||
@@ -4,7 +4,7 @@ use crate::streams::{Collectable, Collector};
|
||||
use crate::{
|
||||
ts_offs_from_abs, Appendable, ByteEstimate, Clearable, FilterFittingInside, Fits, FitsInside, PushableIndex,
|
||||
RangeOverlapInfo, ReadPbv, ReadableFromFile, SitemtyFrameType, SubFrId, TimeBinnableType,
|
||||
TimeBinnableTypeAggregator, WithLen, WithTimestamps,
|
||||
TimeBinnableTypeAggregator, WithLen, WithTimestamps, FrameTypeStatic,
|
||||
};
|
||||
use err::Error;
|
||||
use netpod::log::*;
|
||||
@@ -23,11 +23,24 @@ pub struct XBinnedScalarEvents<NTY> {
|
||||
pub avgs: Vec<f32>,
|
||||
}
|
||||
|
||||
impl<NTY> SitemtyFrameType for XBinnedScalarEvents<NTY>
|
||||
impl<NTY> FrameTypeStatic for XBinnedScalarEvents<NTY>
|
||||
where
|
||||
NTY: SubFrId,
|
||||
{
|
||||
const FRAME_TYPE_ID: u32 = crate::X_BINNED_SCALAR_EVENTS_FRAME_TYPE_ID + NTY::SUB;
|
||||
|
||||
fn from_error(_: err::Error) -> Self {
|
||||
panic!()
|
||||
}
|
||||
}
|
||||
|
||||
impl<NTY> SitemtyFrameType for XBinnedScalarEvents<NTY>
|
||||
where
|
||||
NTY: SubFrId,
|
||||
{
|
||||
fn frame_type_id(&self) -> u32 {
|
||||
<Self as FrameTypeStatic>::FRAME_TYPE_ID
|
||||
}
|
||||
}
|
||||
|
||||
impl<NTY> XBinnedScalarEvents<NTY> {
|
||||
|
||||
@@ -2,9 +2,9 @@ use crate::binsdim1::MinMaxAvgDim1Bins;
|
||||
use crate::numops::NumOps;
|
||||
use crate::streams::{Collectable, Collector};
|
||||
use crate::{
|
||||
Appendable, ByteEstimate, Clearable, FilterFittingInside, Fits, FitsInside, PushableIndex, RangeOverlapInfo,
|
||||
ReadPbv, ReadableFromFile, SitemtyFrameType, SubFrId, TimeBinnableType, TimeBinnableTypeAggregator, WithLen,
|
||||
WithTimestamps,
|
||||
Appendable, ByteEstimate, Clearable, FilterFittingInside, Fits, FitsInside, FrameTypeStatic, PushableIndex,
|
||||
RangeOverlapInfo, ReadPbv, ReadableFromFile, SitemtyFrameType, SubFrId, TimeBinnableType,
|
||||
TimeBinnableTypeAggregator, WithLen, WithTimestamps,
|
||||
};
|
||||
use err::Error;
|
||||
use netpod::log::*;
|
||||
@@ -23,11 +23,25 @@ pub struct XBinnedWaveEvents<NTY> {
|
||||
pub avgs: Vec<Vec<f32>>,
|
||||
}
|
||||
|
||||
impl<NTY> SitemtyFrameType for XBinnedWaveEvents<NTY>
|
||||
impl<NTY> FrameTypeStatic for XBinnedWaveEvents<NTY>
|
||||
where
|
||||
NTY: SubFrId,
|
||||
{
|
||||
const FRAME_TYPE_ID: u32 = crate::X_BINNED_WAVE_EVENTS_FRAME_TYPE_ID + NTY::SUB;
|
||||
|
||||
fn from_error(_: err::Error) -> Self {
|
||||
panic!()
|
||||
}
|
||||
}
|
||||
|
||||
// TODO use a generic impl for this:
|
||||
impl<NTY> SitemtyFrameType for XBinnedWaveEvents<NTY>
|
||||
where
|
||||
NTY: SubFrId,
|
||||
{
|
||||
fn frame_type_id(&self) -> u32 {
|
||||
<Self as FrameTypeStatic>::FRAME_TYPE_ID
|
||||
}
|
||||
}
|
||||
|
||||
impl<NTY> XBinnedWaveEvents<NTY> {
|
||||
|
||||
Reference in New Issue
Block a user