graphrecords-query 0.5.0

High-performance graph-based data records
Documentation
macro_rules! operation_element_witness {
    (
        $operation:ty,
        $trait:ident $(<$($trait_argument:ty),+ $(,)?>)?,
        $method:ident,
        policy[$($policy:tt)*],
    ) => {};
    (
        $operation:ty,
        $trait:ident $(<$($trait_argument:ty),+ $(,)?>)?,
        $method:ident,
        policy[$($policy:tt)*],
        $kernel:tt
        $($remaining:tt)*
    ) => {
        $crate::registry::operation_element_witness!(
            @kernel
            $operation,
            $trait $(<$($trait_argument),+>)?,
            $method,
            policy[$($policy)*],
            $kernel
        );
        $crate::registry::operation_element_witness!(
            $operation,
            $trait $(<$($trait_argument),+>)?,
            $method,
            policy[$($policy)*],
            $($remaining)*
        );
    };
    (
        @kernel
        $operation:ty,
        $trait:ident $(<$($trait_argument:ty),+ $(,)?>)?,
        $method:ident,
        policy[$($policy:tt)*], {
            parameters: < $($name:ident : $bound:ident $(<$target:ident>)? $(+ $additional:ident)*),* $(,)? >;
            argument: $argument:ident : SetSource<$set_value:ty>;
            input: $shape:ty;
            output: $out_shape:ty;
            emission: $emission:ty;
        }
    ) => {{
        {
            $($crate::registry::manifest_witness_alias!($crate::Ordered, $name, $bound $(<$target>)? $(+ $additional)*);)*
            $crate::registry::manifest_witness_set_argument_alias!($argument, $set_value);

            const fn verify_scope()
            where
                $operation: $crate::operations::Operation<Scope = $crate::operations::Element>,
            {
            }

            const fn verify_kernel()
            where
                $operation: $crate::operations::ElementKernel<
                    $shape,
                    OutShape = $out_shape,
                    Emission = $emission,
                >,
            {
            }

            verify_scope();
            verify_kernel();
            $crate::registry::operation_element_method!(
                $trait $(<$($trait_argument),+>)?, $method, $shape, policy[$($policy)*],
            );
        }
        {
            $($crate::registry::manifest_witness_alias!($crate::Unordered, $name, $bound $(<$target>)? $(+ $additional)*);)*
            $crate::registry::manifest_witness_set_argument_alias!($argument, $set_value);

            const fn verify_kernel()
            where
                $operation: $crate::operations::ElementKernel<
                    $shape,
                    OutShape = $out_shape,
                    Emission = $emission,
                >,
            {
            }

            verify_kernel();
        }
    }};
    (
        @kernel
        $operation:ty,
        $trait:ident $(<$($trait_argument:ty),+ $(,)?>)?,
        $method:ident,
        policy[$($policy:tt)*], {
            parameters: < $($name:ident : $bound:ident $(<$target:ident>)? $(+ $additional:ident)*),* $(,)? >;
            $(selector: $selector:ty;)?
            $(field: $field:ident : $field_type:ty;)*
            $(
                argument: $argument:ident : ArgumentSource<$alignment:ty $(, $value:ty)?>
                $(where $argument_owner:ident::ValueDomain : $capability:ident)?;
            )*
            $(receiver: $receiver:ident;)?
            input: $shape:ty;
            output: $out_shape:ty;
            emission: $emission:ty;
            $(where $where_owner:ident::Owned : $where_first:ident $(+ $where_more:ident)*;)?
        }
    ) => {{
        {
            $($crate::registry::manifest_witness_alias!($crate::Ordered, $name, $bound $(<$target>)? $(+ $additional)*);)*
            $(
                $crate::registry::manifest_witness_argument_alias!(
                    $argument, $alignment $(, $value)? $(; $capability)?
                );
            )*

            const fn verify_scope()
            where
                $operation: $crate::operations::Operation<Scope = $crate::operations::Element>,
            {
            }

            const fn verify_kernel()
            where
                $operation: $crate::operations::ElementKernel<
                    $shape,
                    OutShape = $out_shape,
                    Emission = $emission,
                >,
                $(<$where_owner as $crate::ValueDomain>::Owned: $where_first $(+ $where_more)*,)?
            {
            }

            verify_scope();
            verify_kernel();
            $crate::registry::operation_element_method!(
                $trait $(<$($trait_argument),+>)?, $method, $shape, policy[$($policy)*],
                $($receiver)?
            );
        }
        {
            $($crate::registry::manifest_witness_alias!($crate::Unordered, $name, $bound $(<$target>)? $(+ $additional)*);)*
            $(
                $crate::registry::manifest_witness_argument_alias!(
                    $argument, $alignment $(, $value)? $(; $capability)?
                );
            )*

            const fn verify_kernel()
            where
                $operation: $crate::operations::ElementKernel<
                    $shape,
                    OutShape = $out_shape,
                    Emission = $emission,
                >,
                $(<$where_owner as $crate::ValueDomain>::Owned: $where_first $(+ $where_more)*,)?
            {
            }

            verify_kernel();
        }
    }};
}

macro_rules! operation_element_method {
    (
        $trait:ident $(<$($trait_argument:ty),+ $(,)?>)?,
        $method:ident,
        $shape:ty,
        policy[$($policy:tt)*],
    ) => {
        $crate::registry::operation_policy_method!(
            $trait $(<$($trait_argument),+>)?,
            $method,
            policy[$($policy)*],
            $crate::operands::OperandHandle<$shape, $crate::Multiple<$crate::Ordered>>
        );
    };
    ($trait:ident, $method:ident, $shape:ty, policy[], $receiver:ident) => {
        const fn verify_method<
            O: $trait<
                $crate::operands::OperandHandle<$shape, $crate::Multiple<$crate::Ordered>>,
            >,
        >() {
            let _ = O::$method;
        }

        verify_method::<$receiver>();
    };
}

macro_rules! operation_element_entry {
    (
        $operation:ty,
        $method:ident,
        policy[$($policy:tt)*],
        $dynamic_kernel:tt,
        {
            parameters: < $($name:ident : $bound:ident $(<$target:ident>)? $(+ $additional:ident)*),* $(,)? >;
            argument: $argument:ident : SetSource<$set_value:ty>;
            input: $shape:ty;
            output: $out_shape:ty;
            emission: $emission:ty;
        }
    ) => {{
        $crate::registry::manifest_entry_aliases!(
            (0)
            $($name : $bound $(<$target>)? $(+ $additional)*,)*
        );

        $crate::registry::OperationManifestEntry::element::<$shape, $out_shape>(
            vec![$crate::registry::manifest_entry_set_argument_pattern!($set_value)],
            <$emission as $crate::registry::describe::DescribeEmission>::emission_spec(),
            #[cfg(feature = "dynamic")]
            $crate::dynamic::operation_element_applier!(
                $operation,
                $method,
                policy[$($policy)*],
                $dynamic_kernel
            ),
        )
    }};
    (
        $operation:ty,
        $method:ident,
        policy[$($policy:tt)*],
        $dynamic_kernel:tt,
        {
            parameters: < $($name:ident : $bound:ident $(<$target:ident>)? $(+ $additional:ident)*),* $(,)? >;
            $(selector: $selector:ident;)?
            $(field: $field:ident : $field_type:ident;)*
            $(
                argument: $argument:ident : ArgumentSource<$alignment:ty $(, $value:ty)?>
                $(where $argument_owner:ident::ValueDomain : $capability:ident)?;
            )*
            $(receiver: $receiver:ident;)?
            input: $shape:ty;
            output: $out_shape:ty;
            emission: $emission:ty;
            $(where $where_owner:ident::Owned : $where_first:ident $(+ $where_more:ident)*;)?
        }
    ) => {{
        $crate::registry::manifest_entry_aliases!(
            (0)
            $($name : $bound $(<$target>)? $(+ $additional)*,)*
        );

        $crate::registry::OperationManifestEntry::element::<$shape, $out_shape>(
            vec![
                $($crate::registry::ArgumentPattern::selector::<$selector>(),)?
                $($crate::registry::ArgumentPattern::field::<$field_type>(),)*
                $(
                    $crate::registry::manifest_entry_argument_pattern!(
                        $alignment $(, $value)? $(; $capability)?
                    ),
                )*
            ],
            <$emission as $crate::registry::describe::DescribeEmission>::emission_spec(),
            #[cfg(feature = "dynamic")]
            $crate::dynamic::operation_element_applier!(
                $operation,
                $method,
                policy[$($policy)*],
                $dynamic_kernel
            ),
        )
    }};
}

pub(crate) use operation_element_entry;
pub(crate) use operation_element_method;
pub(crate) use operation_element_witness;