diff --git a/packagedef b/packagedef index fe59dea..340d964 100644 --- a/packagedef +++ b/packagedef @@ -72,7 +72,7 @@ Описание.Имя("winow") - .Версия("0.8.3") + .Версия("0.8.4") .Автор("Никита Иванченко") .АдресАвтора("https://github.com/Nivanchenko") .Описание("Минималистичный веб-сервер на нативном OneScript") diff --git "a/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\237\320\260\321\200\321\201\320\265\321\200\321\213.os" "b/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\237\320\260\321\200\321\201\320\265\321\200\321\213.os" index 6b65b49..70eddb5 100644 --- "a/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\237\320\260\321\200\321\201\320\265\321\200\321\213.os" +++ "b/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\237\320\260\321\200\321\201\320\265\321\200\321\213.os" @@ -38,30 +38,29 @@ КонецФункции Функция РазделитьДвоичныеДанныеРазделителем(ДвоичныеДанные, Разделитель) Экспорт - БайтыРазделителя = ПолучитьМассивБайт(Разделитель); - ТекущийПорядокБайт = Новый Массив(БайтыРазделителя.Количество()); + БуферДвоичныхДанных = ПолучитьБуферДвоичныхДанныхИзДвоичныхДанных(ДвоичныеДанные); + Лево = Неопределено; Право = Неопределено; - Чтение = Новый ЧтениеДанных(ДвоичныеДанные); - Пока не Чтение.ЧтениеЗавершено Цикл - ТекБайт = Чтение.Прочитать(1).ПолучитьДвоичныеДанные(); - ДобавитьВМассивСоСмещением(ТекущийПорядокБайт, ТекБайт); + Массив = БуферДвоичныхДанных.Разделить(ПолучитьБуферДвоичныхДанныхИзДвоичныхДанных(Разделитель)); - Если МассивыРавны(БайтыРазделителя, ТекущийПорядокБайт) Тогда - Право = Чтение.Прочитать().ПолучитьДвоичныеДанные(); - Чтение.Закрыть(); - Прервать; - КонецЕсли; - КонецЦикла; + Если Массив.Количество() > 0 Тогда - Чтение = Новый ЧтениеДанных(ДвоичныеДанные); + Лево = ПолучитьДвоичныеДанныеИзБуфераДвоичныхДанных(Массив[0]); - Если Право = Неопределено или Право.Размер() = 0 Тогда - Лево = Чтение.Прочитать().ПолучитьДвоичныеДанные(); - Иначе - ЧитатьПо = ДвоичныеДанные.Размер() - Разделитель.Размер() - Право.Размер(); - Лево = Чтение.Прочитать(ЧитатьПо).ПолучитьДвоичныеДанные(); + Если Массив.Количество() > 1 Тогда + + МассивПраво = Новый Массив(); + + Для Счетчик = 1 По Массив.Количество() - 1 Цикл + МассивПраво.Добавить(ПолучитьДвоичныеДанныеИзБуфераДвоичныхДанных(Массив[Счетчик])); + КонецЦикла; + + Право = СоединитьДвоичныеДанные(МассивПраво); + + КонецЕсли; + КонецЕсли; Возврат Новый Структура("Лево, Право", Лево, Право); @@ -70,43 +69,14 @@ Функция РазделитьДвоичныеДанныеРазделителемВМассив(Знач ДвоичныеДанные, Разделитель, ВКлючатьПустые = Ложь) Экспорт - РазмерРазделителя = Разделитель.Размер(); - - Поток = ДвоичныеДанные.ОткрытьПотокДляЧтения(); - - РазмерТела = Поток.Размер(); + БуферДвоичныхДанных = ПолучитьБуферДвоичныхДанныхИзДвоичныхДанных(ДвоичныеДанные); + Массив = БуферДвоичныхДанных.Разделить(ПолучитьБуферДвоичныхДанныхИзДвоичныхДанных(Разделитель)); + Результат = Новый Массив(); - Счетчик = 0; - Прочитано = 0; - - Пока Счетчик <= РазмерТела Цикл - - Остаток = РазмерТела - Счетчик; - - Если РазмерРазделителя > Остаток Тогда - Результат.Добавить(ПолучитьИзПотокаДД(Поток, Прочитано, РазмерТела - Прочитано)); - Прервать; - КонецЕсли; - - ИскомыйРазделитель = ПолучитьИзПотокаДД(Поток, Счетчик, РазмерРазделителя); - - Если ИскомыйРазделитель = Разделитель - И не Счетчик = Прочитано Тогда - Результат.Добавить(ПолучитьИзПотокаДД(Поток, Прочитано, Счетчик - Прочитано)); - Счетчик = Счетчик + РазмерРазделителя; - Прочитано = Счетчик; - Продолжить; - - ИначеЕсли - ИскомыйРазделитель = Разделитель - И Счетчик = Прочитано Тогда - Прочитано = Прочитано + РазмерРазделителя; - КонецЕсли; - - Счетчик = Счетчик + 1; - + Для Каждого Элемент Из Массив Цикл + Результат.Добавить(ПолучитьДвоичныеДанныеИзБуфераДвоичныхДанных(Элемент)); КонецЦикла; Возврат Результат;