public void TestArgumentPerformance()
 {
     for (int count = 0; count < 1000000; count++)
     {
         ConstructionTemplate template = new ConstructionTemplate(ElementType.AbstractNode_a, ElementType.CommonArc_a, new ScAddress(1, 1));
         template.GetBytes();
     }
 }
Example #2
0
        /// <summary>
        /// Получить коллекцию конструкций, соответствующих указанной конструкции-шаблону.
        /// </summary>
        /// <param name="template">Конструкция-шаблон.</param>
        /// <returns>Список конструкций (списков элементов).</returns>
        public List <List <ScAddress> > IterateElements(ConstructionTemplate template)
        {
            if (!knowledgeBase.IsAvaible)
            {
                return(new List <List <ScAddress> >());
            }
            var cmd = new IterateElementsCommand(template);
            var rsp = (IterateElementsResponse)knowledgeBase.ExecuteCommand(cmd);

            return(rsp.Constructions);
        }
Example #3
0
        public List <ScAddress> FindApples()
        {
            List <ScAddress> apples = new List <ScAddress>();
            //ищем адресс класса яблоко
            var classAppleAddress = this.FindElementAddress(class_apple);
            //ищем все экземпляры класса яблоко. Вот здесь обычно очень нужно находить подмаски масок элементов и сравнивать их
            var template         = new ConstructionTemplate(classAppleAddress, ElementType.PositiveConstantPermanentAccessArc, ElementType.ConstantNode);
            var cmdFindApples    = new IterateElementsCommand(template);
            var rspIterateAppels = (IterateElementsResponse)client.Send(cmdFindApples);

            //и при итерации добавляем в коллекцию адреса яблок (у нас в примере один, но суть можно уловить)
            foreach (var construction in rspIterateAppels.Constructions)
            {
                apples.Add(construction[2]);
            }

            return(apples);
        }
Example #4
0
        /// <summary>
        /// Получение произвольного идентификатора. узла
        /// </summary>
        /// <param name="scAddress">SC-адрес узла</param>
        /// <param name="identifierType">тип идентификатора</param>
        /// <returns>идентификатор</returns>
        public Identifier GetNodeIdentifier(ScAddress scAddress, Identifier identifierType)
        {
            Identifier identifier = Identifier.Invalid;

            if (knowledgeBase.IsAvaible)
            {
                var template = new ConstructionTemplate(scAddress, ElementType.ConstantCommonArc_c, ElementType.Link_a, ElementType.PositiveConstantPermanentAccessArc_c, GetNodeAddress(identifierType));
                var command  = new IterateElementsCommand(template);
                var response = (IterateElementsResponse)knowledgeBase.ExecuteCommand(command);
                if (response.Constructions.Count == 1)
                {
                    ScAddress link            = response.Constructions[0][2];
                    var       commandGetLink  = new GetLinkContentCommand(link);
                    var       responseGetLink = (GetLinkContentResponse)knowledgeBase.ExecuteCommand(commandGetLink);
                    if (responseGetLink.Header.ReturnCode == ReturnCode.Successfull)
                    {
                        identifier = LinkContent.ToString(responseGetLink.LinkContent);
                    }
                }
            }
            return(identifier);
        }
Example #5
0
        /// <summary>
        /// Функция для поиска значения ссылки по отношению, например в констукции bittersweet_apple => nrel_price:[5,5];
        /// </summary>
        /// <param name="node">это адрес узла, например,  bittersweet_apple у которого есть ссылка, например [5,5]</param>
        /// <param name="predicate">это отношение, например nrel_price, которое поясняет, что это за ссылка</param>
        /// <returns></returns>
        private double FindValueByPredicate(ScAddress node, ScAddress predicate)
        {
            double value = double.NaN;
            //итерируем конструкцию
            var template           = new ConstructionTemplate(node, ElementType.ConstantCommonArc, ElementType.Link, ElementType.PositiveConstantPermanentAccessArc, predicate);
            var cmdIterateElements = new IterateElementsCommand(template);
            var rspIterateElements = (IterateElementsResponse)client.Send(cmdIterateElements);

            //если число конструкций равно 1, то ищем значение ссылки

            if (rspIterateElements.Constructions.Count() == 1)
            {
                var cmdGetValue = new GetLinkContentCommand(rspIterateElements.Constructions[0][2]);
                var rspGetValue = (GetLinkContentResponse)client.Send(cmdGetValue);
                value = LinkContent.ToDouble(rspGetValue.LinkContent);
            }
            if (predicate.Offset == 2087)
            {
                int i = 0;
                i = 1;
            }
            return(value);
        }
        public void TestConstructionTemplate()
        {
            var elementNode      = ElementType.ConstantNode_c;
            var elementArcCommon = ElementType.ConstantCommonArc_c;
            var elementArcAccess = ElementType.PositiveConstantPermanentAccessArc_c;
            var scAddress1       = new ScAddress(1, 1);
            var scAddress2       = new ScAddress(1, 2);
            var scAddress3       = new ScAddress(1, 3);

            //a_a_f
            var constructiontemplate_a_a_f = new ConstructionTemplate(elementNode, elementArcAccess, scAddress1);
            var bytes = constructiontemplate_a_a_f.GetBytes();

            Assert.AreNotEqual(0, bytes.Length);

            //f_a_a
            var constructiontemplate_f_a_a = new ConstructionTemplate(scAddress1, elementArcAccess, elementArcCommon);

            bytes = constructiontemplate_f_a_a.GetBytes();
            Assert.AreNotEqual(0, bytes.Length);

            //f_a_f
            var constructiontemplate_f_a_f = new ConstructionTemplate(scAddress1, elementArcAccess, scAddress2);

            bytes = constructiontemplate_f_a_f.GetBytes();
            Assert.AreNotEqual(0, bytes.Length);

            //a_a_f_a_a
            var constructiontemplate_a_a_f_a_a = new ConstructionTemplate(elementNode, elementArcCommon, scAddress1, elementArcAccess, elementNode);

            bytes = constructiontemplate_a_a_f_a_a.GetBytes();
            Assert.AreNotEqual(0, bytes.Length);

            //a_a_f_a_f
            var constructiontemplate_a_a_f_a_f = new ConstructionTemplate(elementNode, elementArcCommon, scAddress1, elementArcAccess, scAddress2);

            bytes = constructiontemplate_a_a_f_a_f.GetBytes();
            Assert.AreNotEqual(0, bytes.Length);

            //f_a_a_a_a
            var constructiontemplate_f_a_a_a_a = new ConstructionTemplate(scAddress1, elementArcCommon, elementNode, elementArcAccess, elementNode);

            bytes = constructiontemplate_f_a_a_a_a.GetBytes();
            Assert.AreNotEqual(0, bytes.Length);

            //f_a_a_a_f
            var constructiontemplate_f_a_a_a_f = new ConstructionTemplate(scAddress1, elementArcCommon, elementNode, elementArcAccess, scAddress2);

            bytes = constructiontemplate_f_a_a_a_f.GetBytes();
            Assert.AreNotEqual(0, bytes.Length);

            //f_a_f_a_a
            var constructiontemplate_f_a_f_a_a = new ConstructionTemplate(scAddress1, elementArcCommon, scAddress2, elementArcAccess, elementNode);

            bytes = constructiontemplate_f_a_f_a_a.GetBytes();
            Assert.AreNotEqual(0, bytes.Length);


            //f_a_f_a_f
            var constructiontemplate_f_a_f_a_f = new ConstructionTemplate(scAddress1, elementArcCommon, scAddress2, elementArcAccess, scAddress3);

            bytes = constructiontemplate_f_a_f_a_f.GetBytes();
            Assert.AreNotEqual(0, bytes.Length);
        }
 /// <summary>
 /// Инициализирует новую команду.
 /// </summary>
 /// <param name="template">шаблон для поиска</param>
 public IterateElementsCommand(ConstructionTemplate template)
     : base(CommandCode.IterateElements)
 {
     Arguments.Add(this.template = template);
 }
Example #8
0
        public List<ScAddress> FindApples()
        {
            List<ScAddress> apples = new List<ScAddress>();
            //ищем адресс класса яблоко
            var classAppleAddress = this.FindElementAddress(class_apple);
            //ищем все экземпляры класса яблоко. Вот здесь обычно очень нужно находить подмаски масок элементов и сравнивать их
            var template = new ConstructionTemplate(classAppleAddress, ElementType.PositiveConstantPermanentAccessArc, ElementType.ConstantNode);
            var cmdFindApples = new IterateElementsCommand(template);
            var rspIterateAppels = (IterateElementsResponse)client.Send(cmdFindApples);

            //и при итерации добавляем в коллекцию адреса яблок (у нас в примере один, но суть можно уловить)
            foreach (var construction in rspIterateAppels.Constructions)
            {
                apples.Add(construction[2]);
            }

            return apples;
        }
Example #9
0
        /// <summary>
        /// Функция для поиска значения ссылки по отношению, например в констукции bittersweet_apple => nrel_price:[5,5];
        /// </summary>
        /// <param name="node">это адрес узла, например,  bittersweet_apple у которого есть ссылка, например [5,5]</param>
        /// <param name="predicate">это отношение, например nrel_price, которое поясняет, что это за ссылка</param>
        /// <returns></returns>
        private double FindValueByPredicate(ScAddress node, ScAddress predicate)
        {
            double value = double.NaN;
            //итерируем конструкцию
            var template = new ConstructionTemplate(node, ElementType.ConstantCommonArc, ElementType.Link, ElementType.PositiveConstantPermanentAccessArc, predicate);
            var cmdIterateElements = new IterateElementsCommand(template);
            var rspIterateElements = (IterateElementsResponse)client.Send(cmdIterateElements);

            //если число конструкций равно 1, то ищем значение ссылки

            if (rspIterateElements.Constructions.Count() == 1)
            {
                var cmdGetValue = new GetLinkContentCommand(rspIterateElements.Constructions[0][2]);
                var rspGetValue = (GetLinkContentResponse)client.Send(cmdGetValue);
                value = LinkContent.ToDouble(rspGetValue.LinkContent);

            }
            if (predicate.Offset == 2087)
            {
                int i = 0;
                i = 1;
            }
            return value;
        }