Ejemplo n.º 1
0
        public override IDerivation VisitInternal(AlternativeSet aAlternativeSet, DerivationContext aContext)
        {
            AlternativeSet lMinAlt = aAlternativeSet.getMinUsageAlternatives();
            int            i       = mRnd.Next(lMinAlt.Count);

            return(lMinAlt.GetAlternative(aContext, i));
        }
Ejemplo n.º 2
0
        public virtual IDerivation Visit(AlternativeSet aAlternativeSet, DerivationContext aContext)
        {
            //считать конфигурацию узла и передать управление соотв. визитору
            //читаем из xml
            if (Generator.ConfigXml != null)
            {
                List <string> lXmlPathList = aContext.DerivPath;
                string[]      lXmlPath     = lXmlPathList.ToArray();
                string        path         = string.Join("/", lXmlPath);

                //RR ряд распределения
                int    i   = 0;
                string lRR = null;
                if (aContext.Generator.Options.RREnable)
                {
                    lRR = Generator.ConfigXml.SearchAtRootOnly(lXmlPath[lXmlPath.Length - 1], "rr");
                }
                if (!string.IsNullOrEmpty(lRR))
                {
                    i = RndByRR(aAlternativeSet, lRR);
                    return(aAlternativeSet.GetAlternative(aContext, i));
                }

                string lAlg = "";
                lAlg = ""; // Generator.ConfigXml.Search(lXmlPath, "alg");
                if (path == "Root/bodyStats/bodyStat")
                {
                    lAlg = "enum";
                }
                if (!string.IsNullOrEmpty(lAlg))
                {
                    //DerivationContext lNewCont = new DerivationContext(aContext);
                    IVisitor lVisitor = aContext.Visitor;
                    switch (lAlg)
                    {
                    case "rnd":
                        lVisitor = Generator.VisitorExpandRnd;
                        break;

                    case "enum":
                        lVisitor = Generator.VisitorExpandForceEnum;
                        break;

                    case "norm":
                        lVisitor = Generator.VisitorExpandNormRnd;
                        break;

                    default:
                        throw new ConfigurationException(
                                  "Неправильное значение аттрибута alg в конфигурационном файле. Допустимо одно из трех: rnd, enum, norm");
                    }
                    return((lVisitor as VisitorExpandBase).VisitInternal(aAlternativeSet, aContext));
                }
            }
            return(VisitInternal(aAlternativeSet, aContext));
        }