vortex_array/expr/
view.rs1use std::ops::Deref;
5
6use vortex_error::VortexExpect;
7
8use crate::expr::{Expression, VTable};
9
10pub struct ExpressionView<'a, V: VTable> {
13 expression: &'a Expression,
14 vtable: &'a V,
15 data: &'a V::Instance,
16}
17
18impl<'a, V: VTable> ExpressionView<'a, V> {
19 #[inline]
25 pub fn new(expression: &'a Expression) -> Self {
26 Self::maybe_new(expression).vortex_expect("Failed to downcast expression")
27 }
28
29 #[inline]
31 pub fn maybe_new(expression: &'a Expression) -> Option<Self> {
32 let vtable = expression.vtable().as_opt::<V>()?;
33 let data = expression.data().downcast_ref::<V::Instance>()?;
34 Some(Self {
35 expression,
36 vtable,
37 data,
38 })
39 }
40}
41
42impl<'a, V: VTable> ExpressionView<'a, V> {
43 #[inline(always)]
45 pub fn vtable(&self) -> &'a V {
46 self.vtable
47 }
48
49 #[inline(always)]
51 pub fn data(&self) -> &'a V::Instance {
52 self.data
53 }
54}
55
56impl<'a, V: VTable> Deref for ExpressionView<'a, V> {
57 type Target = Expression;
58
59 fn deref(&self) -> &Self::Target {
60 self.expression
61 }
62}