Skip to content

Commit

Permalink
Merge pull request #17 from Nivanchenko/feature/speed-up
Browse files Browse the repository at this point in the history
Небольшое ускорение при параллельной обработке желудей.
  • Loading branch information
nixel2007 authored Sep 29, 2022
2 parents 1317cb9 + 64e6fb9 commit 4dacf5f
Show file tree
Hide file tree
Showing 2 changed files with 52 additions and 23 deletions.
27 changes: 21 additions & 6 deletions src/internal/Классы/ФабрикаЖелудей.os
Original file line number Diff line number Diff line change
Expand Up @@ -26,9 +26,7 @@
Возврат НайденныеОпределения[0];
КонецЕсли;

НайденноеОпределение = ПроцессорыКоллекций.ИзКоллекции(НайденныеОпределения)
.Фильтровать("Результат = Элемент.Верховный()")
.ПолучитьПервый();
НайденноеОпределение = НайтиОпределениеВерховного(НайденныеОпределения);

Если НайденноеОпределение = Неопределено Тогда
ВызватьИсключение "Найдено несколько желудей с именем/прозвищем """ + Имя + """";
Expand All @@ -37,6 +35,15 @@
Возврат НайденноеОпределение;
КонецФункции

Функция НайтиОпределениеВерховного(Коллекция)
Для Каждого Элемент из Коллекция Цикл
Если Элемент.Верховный() = Истина Тогда
Возврат Элемент;
КонецЕсли;
КонецЦикла;
Возврат Неопределено;
КонецФункции

Функция ПолучитьСписокОпределенийЖелудей(Имя) Экспорт

Результат = Новый Массив;
Expand Down Expand Up @@ -193,9 +200,7 @@
ПередаваемыеПрилепляемыеЧастицы = ПереданныеПрилепляемыеЧастицы;
Иначе

КоличествоБлестяшек = ПроцессорыКоллекций.ИзКоллекции(ОпределениеЖелудя.ПрилепляемыеЧастицы())
.Фильтровать("Результат = Элемент.ТипЧастицы() = ТипыПрилепляемыхЧастиц.Блестяшка()")
.Количество();
КоличествоБлестяшек = ПосчитатьКоличествоБлестяшек(ОпределениеЖелудя.ПрилепляемыеЧастицы());

Если КоличествоБлестяшек <> ПереданныеПрилепляемыеЧастицы.Количество() Тогда
ВызватьИсключение "При поиске желудя " + ИмяЖелудя + " количество переданных произвольных параметров отличается от количества параметров не-желудей/не-деталек.";
Expand Down Expand Up @@ -251,6 +256,16 @@

КонецФункции

Функция ПосчитатьКоличествоБлестяшек(ПрилепляемыеЧастицы)
Количество = 0;
Для Каждого Элемент из ПрилепляемыеЧастицы Цикл
Если Элемент.ТипЧастицы() = ТипыПрилепляемыхЧастиц.Блестяшка() Тогда
Количество = Количество + 1;
КонецЕсли;
КонецЦикла;
Возврат Количество;
КонецФункции

Функция ДобавитьЖителяЛеса(ТипЖителяТеля, ИмяЖителяЛеса, АннотацияНадКонструктором)

РефлекторОбъекта = Новый РефлекторОбъекта(ТипЖителяТеля);
Expand Down
48 changes: 31 additions & 17 deletions src/Модули/РаботаСАннотациями.os
Original file line number Diff line number Diff line change
@@ -1,25 +1,34 @@
#Использовать fluent

Функция ПолучитьАннотацию(Свойство, ИмяАннотации) Экспорт
Аннотация = ПроцессорыКоллекций.ИзКоллекции(Свойство.Аннотации)
.Фильтровать(
"Результат = ВРег(Элемент.Имя) = ВРег(ДополнительныеПараметры.ИмяАннотации)",
Новый Структура("ИмяАннотации", ИмяАннотации)
).ПолучитьПервый();

Аннотация = ОтфильтроватьПервуюАннотациюПоИмени(Свойство.Аннотации, ИмяАннотации);
Возврат Аннотация;
КонецФункции

Функция ПолучитьАннотации(Свойство, ИмяАннотации) Экспорт
Аннотации = ПроцессорыКоллекций.ИзКоллекции(Свойство.Аннотации)
.Фильтровать(
"Результат = ВРег(Элемент.Имя) = ВРег(ДополнительныеПараметры.ИмяАннотации)",
Новый Структура("ИмяАннотации", ИмяАннотации)
).ВМассив();

Аннотации = ОтфильтроватьАннотацииПоИмени(Свойство.Аннотации, ИмяАннотации);
Возврат Аннотации;
КонецФункции

Функция ОтфильтроватьАннотацииПоИмени(Аннотации, ИмяАннотации)
Массив = Новый Массив();
Для каждого Элемент Из Аннотации Цикл
Если ВРег(Элемент.Имя) = ВРег(ИмяАннотации) Тогда
Массив.Добавить(Элемент);
КонецЕсли;
КонецЦикла;
Возврат Массив;
КонецФункции

Функция ОтфильтроватьПервуюАннотациюПоИмени(Аннотации, ИмяАннотации)
Для каждого Элемент Из Аннотации Цикл
Если ВРег(Элемент.Имя) = ВРег(ИмяАннотации) Тогда
Возврат Элемент;
КонецЕсли;
КонецЦикла;
Возврат Неопределено;
КонецФункции

Функция ПолучитьЗначениеПараметраАннотации(
Аннотация,
ИмяПараметра = "Значение",
Expand All @@ -33,11 +42,7 @@
Возврат ЗначениеПоУмолчанию;
КонецЕсли;

ПараметрАннотации = ПроцессорыКоллекций.ИзКоллекции(Аннотация.Параметры)
.Фильтровать(
"Результат = ВРег(Элемент.Имя) = ВРег(ДополнительныеПараметры.ИмяПараметра)",
Новый Структура("ИмяПараметра", ИмяПараметра)
).ПолучитьПервый();
ПараметрАннотации = ПолучитьПараметрАннотации(Аннотация.Параметры, ИмяПараметра);

Если ПараметрАннотации <> Неопределено Тогда
Возврат ПараметрАннотации.Значение;
Expand All @@ -59,4 +64,13 @@
ВызватьИсключение Сообщение;
КонецЕсли;

КонецФункции

Функция ПолучитьПараметрАннотации(ПараметрыАннотации, ИмяПараметра)
Для каждого Элемент Из ПараметрыАннотации Цикл
Если ВРег(Элемент.Имя) = ВРег(ИмяПараметра) Тогда
Возврат Элемент;
КонецЕсли;
КонецЦикла;
Возврат Неопределено;
КонецФункции

0 comments on commit 4dacf5f

Please sign in to comment.