Необходимо разработать приложение для iOS (минимальная версия iOS — 11.0):
- Пользователь вводит URL текстового файла, фильтр отбора строк и запускает загрузку (например нажатие кнопки).
- Приложение подгружает файл, отбирает строки удовлетворяющие фильтру и отображает их ввиде списка.
Принцип отбора строк:
Предполагается что текстовый файл является текстовым ANSI файлом (закладываться на UTF-8 не нужно).
Отбор строк осуществляется по условиям простейшего regexp: (как минимум операторы * и ?):
- cимвол '*' - последовательность любых символов неограниченной длины;
- cимвол "?" - один любой символ;
- должны корректно отрабатываться маски: *Some*, *Some, Some*, *****Some*** - нет никаких ограничений на положение * в маске.
Результатом поиска должны быть строки, удовлетворяющие маске.
Например:
- Маска *abc* отбирает все строки содержащие abc и начинающиеся и заканчивающиеся любой последовательностью символов.
- Маска abc* отбирает все строки начинающиеся с abc и заканчивающиеся любой последовательностью символов.
- Маска abc? отбирает все строки начинающиеся с abc и заканчивающиеся любым дополнительным символом.
- Маска abc отбирает все строки которые равны этой маске.
Требования к реализации:
- Отбор строк должен быть реализован на С++ в составе отдельного класса. Класс не будет расширяться и не будет базовым
классом. Единственная задача: сканирование и поиск текстовых строк. При реализации С++ части запрещено
использование сторонних библиотек и STL. В частности запрещено
использовать <regex> и <ifstream>. Весь парсинг должен быть реализован на С++.
Класс должен иметь следующий публичный интерфейс:
class CLogReader
bool SetFilter(const char *filter); // установка фильтра строк, false - ошибка
{
public:
CLogReader(...);
~CLogReader(...);bool AddSourceBlock(const char* block,const size_t block_size); // добавление очередного блока текстового файла
}; - Размер исходного текстового файла (и, возможно, результатов) может быть от сотен мегабайт.
- Для реализации загрузки и отображения данных должен использоваться Objective C. Использование Swift запрещено.
- Запрещено использование ARC (Automatic Reference Counting).
- Затраты памяти должны быть минимальны (в разумных пределах);
- Результаты парсинга должны писаться в файл results.log в каталоге приложения
- Код должен быть абсолютно «неубиваемый» и защищённым от ошибок.
Требования к оформлению:
- Код должен быть максимально простым;
- Код должен быть максимально чистым, красивым и понятным;
- Результатом должен быть готовый проект приложения в ZIP архиве.