Skip to content

Latest commit

 

History

33 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

LR-4

В проекте представлены четыре модуля с интерактивной визуализацией на Dear ImGui:

  • Ленивые последовательности с трансфинитной арифметикой
  • Симулятор ленты памяти
  • Функциональный Stream API
  • Архиватор формата .Z.

Lazy Sequence

image

Ленивые последовательности LazySequence<T>. Поддерживают бесконечные потоки (натуральные числа, Фибоначчи, степени двойки) через генераторы — элементы вычисляются по нужде и отправляются в сдвигающийся кэщ.

Ключевая особенность — трансфинитная (ординальная) длина и индексация вида w * k + n. Например, append к бесконечной последовательности кладёт элемент на индекс w (за бесконечностью), и достать его можно ординальным геттером:

lazy_sequence->get(5);              // обычный финитный индекс
lazy_sequence->get(Ordinal(1, 5));  // индекс w + 5 (второй w-блок)

Кнопки: Get, Take, Append, Prepend, Concat, Map, Where, Zip, Materialize. Визуализатор показывает длину в ординальном формате (w, w * 2, w + 3), состояние кэша и последние материализованные значения.

Memory Tape

image

Симулятор ленты памяти фиксированной длины. Поддерживает четыре стратегии аллокации:

  • First-fit — первый подходящий свободный блок
  • Best-fit — минимальный подходящий блок
  • Worst-fit — максимальный подходящий блок
  • Next-fit — First-fit, но начинает не с начала, а с места выдачи

Поток событий (Alloc/Free) генерируется бесконечным AllocEventGenerator на основе LCG (линейный конгруэнтный генератор).

Имеются ручные команды Alloc/Free, операции фрагментации и уплотнения данных

Stream API

image

Пайплайн StreamAPI<T> в стиле Java.

StreamAPI<std::string>::of(&words)
    .filter(str_ops::starts_with("A"))
    .map<std::string>(str_ops::to_upper())
    .sorted()
    .take(3)
    .to_array();

Операции: filter, map<U>, sorted, take, skip + to_array, reduce, for_each, count. Также строковые операции str_ops: to_upper, trim, starts_with, replace_all и т.д. В панели пайплайн собирается из комбинации операций (filter / map / sort / take) и все этапы отображаются в меню.

LZW архиватор

image

Архиватор Unix-формата .Z (LZW / LZC). Сжатые файлы открываются сторонними утилитами — 7-Zip (22.00+), gzip -d, uncompress.

В панели два режима:

  • Ввод текста -> сжатие -> расжатие и показ данных
  • Работа с файлами (принимает только .z формат для расжатия и txt для сжатия)

Сборка и запуск

Зависимости: googletest (git clone https://github.com/google/googletest.git), Dear ImGui (лежит в vendor/) и GLFW.

mingw32-make gui      # GUI (Windows; на Linux — make gui)
./gui

Тесты:

mingw32-make lazy_tests ordinal_tests stream_tests memory_tape_tests lzw_tests
./lazy_tests && ./ordinal_tests && ./stream_tests && ./memory_tape_tests && ./lzw_tests

Графика: Dear ImGui (GUI) + GLFW (Создание окна, обработка событий) + OpenGL (Графический движок).

About

No description, website, or topics provided.

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages