crate fn split_projection<'p>(
        &self,
        projection: &'p ProjectionTy,
    ) -> (&AssociatedTyDatum, &'p [Parameter], &'p [Parameter]) {
        let ProjectionTy {
            associated_ty_id,
            ref parameters,
        } = *projection;
        let associated_ty_data = &self.associated_ty_data[&associated_ty_id];
        let trait_datum = &self.trait_data[&associated_ty_data.trait_id];
        let trait_num_params = trait_datum.binders.len();
        let split_point = parameters.len() - trait_num_params;
        let (other_params, trait_params) = parameters.split_at(split_point);
        (associated_ty_data, trait_params, other_params)
    }
/// Given a projection of an associated type, split the type parameters
/// into those that come from the *trait* and those that come from the
/// *associated type itself*. So e.g. if you have `(Iterator::Item)<F>`,
/// this would return `([F], [])`, since `Iterator::Item` is not generic
/// and hence doesn't have any type parameters itself.
///
/// Used primarily for debugging output.
Given a projection of an associated type, split the type parameters
into those that come from the *trait* and those that come from the
associated type itself*.

Used primarily for debugging output.
Given a projection of an associated type split the type parameters into those that come from the * trait * and those that come from the associated type itself * . Used primarily for debugging output .
crate fn split_projection<'p>(
        &self,
        projection: &'p ProjectionTy,
    ) -> (&AssociatedTyDatum, &'p [Parameter], &'p [Parameter]) {
        let ProjectionTy {
            associated_ty_id,
            ref parameters,
        } = *projection;
        let associated_ty_data = &self.associated_ty_data[&associated_ty_id];
        let trait_datum = &self.trait_data[&associated_ty_data.trait_id];
        let trait_num_params = trait_datum.binders.len();
        let split_point = parameters.len() - trait_num_params;
        let (other_params, trait_params) = parameters.split_at(split_point);
        (associated_ty_data, trait_params, other_params)
    }
crate fn split_projection < ' p > ( & self , projection : & ' p ProjectionTy , ) -> ( & AssociatedTyDatum , & ' p [ Parameter ] , & ' p [ Parameter ] ) { let ProjectionTy { associated_ty_id , ref parameters , } = * projection ; let associated_ty_data = & self . associated_ty_data [ & associated_ty_id ] ; let trait_datum = & self . trait_data [ & associated_ty_data . trait_id ] ; let trait_num_params = trait_datum . binders . len ( ) ; let split_point = parameters . len ( ) - trait_num_params ; let ( other_params , trait_params ) = parameters . split_at ( split_point ) ; ( associated_ty_data , trait_params , other_params ) }
Given a projection of an associated type, split the type parameters
into those that come from the *trait* and those that come from the
associated type itself*.
Given a projection of an associated type split the type parameters into those that come from the * trait * and those that come from the associated type itself * .
&self
projection
&'p ProjectionTy
&self
projection
&'p ProjectionTy