//
            // Policy Alternative Enumeration code
            //

            public static IEnumerable <PolicyConversionContext> GetPolicyConversionContextEnumerator(ServiceEndpoint endpoint,
                                                                                                     PolicyAlternatives policyAlternatives, MetadataImporterQuotas quotas)
            {
                IEnumerable <Dictionary <MessageDescription, IEnumerable <XmlElement> > >   messageAssertionEnumerator;
                IEnumerable <Dictionary <FaultDescription, IEnumerable <XmlElement> > >     faultAssertionEnumerator;
                IEnumerable <Dictionary <OperationDescription, IEnumerable <XmlElement> > > operationAssertionEnumerator;

                faultAssertionEnumerator     = PolicyIterationHelper.GetCartesianProduct <FaultDescription, IEnumerable <XmlElement> >(policyAlternatives.FaultBindingAlternatives);
                messageAssertionEnumerator   = PolicyIterationHelper.GetCartesianProduct <MessageDescription, IEnumerable <XmlElement> >(policyAlternatives.MessageBindingAlternatives);
                operationAssertionEnumerator = PolicyIterationHelper.GetCartesianProduct <OperationDescription, IEnumerable <XmlElement> >(policyAlternatives.OperationBindingAlternatives);

                foreach (Dictionary <FaultDescription, IEnumerable <XmlElement> > faultAssertionsSelection in faultAssertionEnumerator)
                {
                    foreach (Dictionary <MessageDescription, IEnumerable <XmlElement> > messageAssertionsSelection in messageAssertionEnumerator)
                    {
                        foreach (Dictionary <OperationDescription, IEnumerable <XmlElement> > operationAssertionsSelection in operationAssertionEnumerator)
                        {
                            foreach (IEnumerable <XmlElement> endpointAssertionsSelection in policyAlternatives.EndpointAlternatives)
                            {
                                ImportedPolicyConversionContext conversionContext;
                                try
                                {
                                    conversionContext = new ImportedPolicyConversionContext(endpoint, endpointAssertionsSelection,
                                                                                            operationAssertionsSelection, messageAssertionsSelection, faultAssertionsSelection,
                                                                                            quotas);
                                }
                                catch (MaxItemsEnumeratorExceededMaxItemsException) { yield break; }

                                yield return(conversionContext);
                            }
                        }
                    }
                }
            }
 internal static IEnumerable <PolicyConversionContext> GetPolicyConversionContextEnumerator(ServiceEndpoint endpoint, PolicyAlternatives policyAlternatives,
                                                                                            MetadataImporterQuotas quotas)
 {
     return(ImportedPolicyConversionContext.GetPolicyConversionContextEnumerator(endpoint, policyAlternatives, quotas));
 }