pub struct ColIndexMapping {
target_size: usize,
map: Vec<Option<usize>>,
}Expand description
ColIndexMapping is a partial mapping from usize to usize.
It is used in optimizer for transformation of column index.
Fields§
§target_size: usizeThe size of the target space, i.e. target index is in the range (0..target_size).
map: Vec<Option<usize>>Each subscript is mapped to the corresponding element.
Implementations§
Source§impl ColIndexMapping
impl ColIndexMapping
Sourcepub fn new(map: Vec<Option<usize>>, target_size: usize) -> Self
pub fn new(map: Vec<Option<usize>>, target_size: usize) -> Self
Create a partial mapping which maps from the subscripts range (0..map.len()) to
(0..target_size). Each subscript is mapped to the corresponding element.
pub fn into_parts(self) -> (Vec<Option<usize>>, usize)
pub fn to_parts(&self) -> (&[Option<usize>], usize)
pub fn put(&mut self, src: usize, tar: Option<usize>)
pub fn identity(size: usize) -> Self
pub fn is_identity(&self) -> bool
pub fn identity_or_none(source_size: usize, target_size: usize) -> Self
pub fn empty(source_size: usize, target_size: usize) -> Self
Sourcepub fn with_shift_offset(source_num: usize, offset: isize) -> Self
pub fn with_shift_offset(source_num: usize, offset: isize) -> Self
Create a partial mapping which maps range (0..source_num) to range
(offset..offset+source_num).
§Examples
Positive offset:
let mapping = ColIndexMapping::with_shift_offset(3, 3);
assert_eq!(mapping.map(0), 3);
assert_eq!(mapping.map(1), 4);
assert_eq!(mapping.map(2), 5);Negative offset:
let mapping = ColIndexMapping::with_shift_offset(6, -3);
assert_eq!(mapping.try_map(0), None);
assert_eq!(mapping.try_map(1), None);
assert_eq!(mapping.try_map(2), None);
assert_eq!(mapping.map(3), 0);
assert_eq!(mapping.map(4), 1);
assert_eq!(mapping.map(5), 2);
assert_eq!(mapping.try_map(6), None);Sourcepub fn with_remaining_columns(cols: &[usize], src_size: usize) -> Self
pub fn with_remaining_columns(cols: &[usize], src_size: usize) -> Self
Maps the smallest index to 0, the next smallest to 1, and so on.
It is useful for column pruning.
§Examples
let mut remaining_cols = vec![1, 3];
let mapping = ColIndexMapping::with_remaining_columns(&remaining_cols, 4);
assert_eq!(mapping.map(1), 0);
assert_eq!(mapping.map(3), 1);
assert_eq!(mapping.try_map(0), None);
assert_eq!(mapping.try_map(2), None);
assert_eq!(mapping.try_map(4), None);pub fn with_included_columns(cols: &[usize], src_size: usize) -> Self
Sourcepub fn with_removed_columns(cols: &[usize], src_size: usize) -> Self
pub fn with_removed_columns(cols: &[usize], src_size: usize) -> Self
Remove the given columns, and maps the remaining columns to a consecutive range starting from 0.
§Examples
let mut removed_cols = vec![0, 2, 4];
let mapping = ColIndexMapping::with_removed_columns(&removed_cols, 5);
assert_eq!(mapping.map(1), 0);
assert_eq!(mapping.map(3), 1);
assert_eq!(mapping.try_map(0), None);
assert_eq!(mapping.try_map(2), None);
assert_eq!(mapping.try_map(4), None);Sourcepub fn composite(&self, following: &Self) -> Self
pub fn composite(&self, following: &Self) -> Self
Compose column index mappings.
For example if this maps 0->5,
and following maps 5->1,
Then the composite has 0->5->1 => 0->1.
pub fn clone_with_offset(&self, offset: usize) -> Self
Sourcepub fn union(&self, other: &Self) -> Self
pub fn union(&self, other: &Self) -> Self
Union two mapping, the result mapping target_size and source size will be the max size
of the two mappings.
§Panics
Will panic if a source appears in both to mapping
Sourcepub fn inverse(&self) -> Option<Self>
pub fn inverse(&self) -> Option<Self>
Inverse the mapping. If a target corresponds to more than one source, return None.
Sourcepub fn mapping_pairs(&self) -> impl Iterator<Item = (usize, usize)> + '_
pub fn mapping_pairs(&self) -> impl Iterator<Item = (usize, usize)> + '_
return iter of (src, dst) order by src
Sourcepub fn try_map(&self, index: usize) -> Option<usize>
pub fn try_map(&self, index: usize) -> Option<usize>
Try mapping the source index to the target index.
Sourcepub fn try_map_all(
&self,
indices: impl IntoIterator<Item = usize>,
) -> Option<Vec<usize>>
pub fn try_map_all( &self, indices: impl IntoIterator<Item = usize>, ) -> Option<Vec<usize>>
Try mapping all the source indices to the target indices. Returns None if any of the
indices is not mapped.
Sourcepub fn map(&self, index: usize) -> usize
pub fn map(&self, index: usize) -> usize
§Panics
Will panic if index >= self.source_size() or index is not mapped.
Sourcepub fn target_size(&self) -> usize
pub fn target_size(&self) -> usize
Returns the size of the target range. Target index is in the range (0..target_size).
Sourcepub fn source_size(&self) -> usize
pub fn source_size(&self) -> usize
Returns the size of the source range. Source index is in the range (0..source_size).
pub fn is_empty(&self) -> bool
pub fn is_injective(&self) -> bool
Source§impl ColIndexMapping
impl ColIndexMapping
pub fn to_protobuf(&self) -> PbColIndexMapping
pub fn from_protobuf(prost: &PbColIndexMapping) -> ColIndexMapping
Trait Implementations§
Source§impl Clone for ColIndexMapping
impl Clone for ColIndexMapping
Source§fn clone(&self) -> ColIndexMapping
fn clone(&self) -> ColIndexMapping
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreSource§impl Debug for ColIndexMapping
impl Debug for ColIndexMapping
Source§impl Hash for ColIndexMapping
impl Hash for ColIndexMapping
Source§impl PartialEq for ColIndexMapping
impl PartialEq for ColIndexMapping
impl Eq for ColIndexMapping
impl StructuralPartialEq for ColIndexMapping
Auto Trait Implementations§
impl Freeze for ColIndexMapping
impl RefUnwindSafe for ColIndexMapping
impl Send for ColIndexMapping
impl Sync for ColIndexMapping
impl Unpin for ColIndexMapping
impl UnwindSafe for ColIndexMapping
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
§impl<T> Downcast for Twhere
T: AsAny + ?Sized,
impl<T> Downcast for Twhere
T: AsAny + ?Sized,
§fn downcast_ref<T>(&self) -> Option<&T>where
T: AsAny,
fn downcast_ref<T>(&self) -> Option<&T>where
T: AsAny,
Any.§fn downcast_mut<T>(&mut self) -> Option<&mut T>where
T: AsAny,
fn downcast_mut<T>(&mut self) -> Option<&mut T>where
T: AsAny,
Any.§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
§fn equivalent(&self, key: &K) -> bool
fn equivalent(&self, key: &K) -> bool
key and return true if they are equal.Source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
Source§fn equivalent(&self, key: &K) -> bool
fn equivalent(&self, key: &K) -> bool
key and return true if they are equal.§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
§fn equivalent(&self, key: &K) -> bool
fn equivalent(&self, key: &K) -> bool
§impl<T> FutureExt for T
impl<T> FutureExt for T
§fn with_context(self, otel_cx: Context) -> WithContext<Self>
fn with_context(self, otel_cx: Context) -> WithContext<Self>
§fn with_current_context(self) -> WithContext<Self>
fn with_current_context(self) -> WithContext<Self>
§impl<T> Instrument for T
impl<T> Instrument for T
§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
Source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§impl<T> IntoRequest<T> for T
impl<T> IntoRequest<T> for T
Source§fn into_request(self) -> Request<T>
fn into_request(self) -> Request<T>
T in a tonic::Request§impl<T> IntoResult<T> for T
impl<T> IntoResult<T> for T
type Err = Infallible
fn into_result(self) -> Result<T, <T as IntoResult<T>>::Err>
Source§impl<M> MetricVecRelabelExt for M
impl<M> MetricVecRelabelExt for M
Source§fn relabel(
self,
metric_level: MetricLevel,
relabel_threshold: MetricLevel,
) -> RelabeledMetricVec<M>
fn relabel( self, metric_level: MetricLevel, relabel_threshold: MetricLevel, ) -> RelabeledMetricVec<M>
RelabeledMetricVec::with_metric_level.Source§fn relabel_n(
self,
metric_level: MetricLevel,
relabel_threshold: MetricLevel,
relabel_num: usize,
) -> RelabeledMetricVec<M>
fn relabel_n( self, metric_level: MetricLevel, relabel_threshold: MetricLevel, relabel_num: usize, ) -> RelabeledMetricVec<M>
RelabeledMetricVec::with_metric_level_relabel_n.Source§fn relabel_debug_1(
self,
relabel_threshold: MetricLevel,
) -> RelabeledMetricVec<M>
fn relabel_debug_1( self, relabel_threshold: MetricLevel, ) -> RelabeledMetricVec<M>
RelabeledMetricVec::with_metric_level_relabel_n with metric_level set to
MetricLevel::Debug and relabel_num set to 1.§impl<T> Pointable for T
impl<T> Pointable for T
§impl<T> PolicyExt for Twhere
T: ?Sized,
impl<T> PolicyExt for Twhere
T: ?Sized,
Source§impl<T> SameOrElseExt for Twhere
T: Eq,
impl<T> SameOrElseExt for Twhere
T: Eq,
Source§fn same_or_else(self, other: T, f: impl FnOnce() -> T) -> T
fn same_or_else(self, other: T, f: impl FnOnce() -> T) -> T
self and other are equal, if so, return self, otherwise return the result of f().