Здравствуйте, Aртёмка, Вы писали:
B>>3) можно ли создать свой класс стэка или обязательно использовать именно стэк трэда? Aё>Зачем создавать свой класс? Лучше озаботиться оптимальным алгоритмом подсчёта скобок. Кстати, здесь в топике кроме раздувания щёк никто так и не предложил вменяемый алгоритм. Михаил предложил решение с выгрузкой на диск- не самое оптимальное, но решающее задачу.
Не самое оптимальное, но гораздо более правдоподобное и жизнеспособное, нежели непонятная конструкция с компрессией.
Aё>UPD: Aё>1) Нарезать блоки фиксированного размера, например 8Mb. Aё>2) Скажем у нас 4 вида скобок. На каждую открывающую скобку записываем 2 бита в текущий блок- смещение в байтах и битах легко вычислить по счётчику. В случае 3 битов чуть сложней формула, но смысл понятен. Aё>3) При заполнении блока, он отдаётся в хранилище блоков. Хранилище блоков все кроме верхнего блока упаковывает deflate-м- так боремся с "паттернами" вроде "({([({([", не изобретаем велосипеды с RLE. Можно с отдельным потоком и блоком синхронизации Aё>4) Хранилище блоков при суммарном размере сжатых блоков больше установленного размера, скажем 128m, сливает сжатые блоки порциями в зависимоси от требований к латентности, или разом в временный файл. При необходимости подгружает поблочно и распаковывает.
Это все прекрасно, но твой подход не решает задачу, совсем не решает. Ты просто нагородил конструкцию, которая запаковывает входящие данные.