apple-quant-algorithmic 0.4.0

Apple Quant's algorithmic library.
Documentation
use std::ops::Range;

use smallvec::SmallVec;

#[derive(Default)]
pub struct FlexHotData<
	T: Clone,
	const INLINE_COUNT: usize,
>(SmallVec<[T; INLINE_COUNT]>);

impl<
	T: Clone,
	const INLINE_COUNT: usize,
> FlexHotData<T, INLINE_COUNT> {
	pub fn remove_last(
		&mut self,
	) -> Option<T> {
		self.0.pop()
	}

	pub fn append(
		&mut self,
		data: &[T],
	) {
		self.0.extend(data.iter().cloned());
	}

	pub fn drain_range(
		&mut self,
		range: Range<usize>,
	) {
		debug_assert!(range.start <= self.0.len());
		debug_assert!(range.end <= self.0.len());
		debug_assert!(range.start <= range.end);

		self.0.drain(range);
	}

	pub fn retain_newest(
		&mut self,
		count: usize,
	) {
		debug_assert!(count <= self.0.len());
		let drain_count = self.0.len() - count;
		self.drain_range(0..drain_count);
	}

	pub fn get(
		&self,
		idx: usize,
	) -> Option<&T> {
		self.0.get(idx)
	}

	pub fn iter(
		&self,
	) -> impl IntoIterator<Item = &T> {
		self.0.iter()
	}
}