Russian Qt Forum

Программирование => С/C++ => Тема начата: _Bers от Ноябрь 01, 2014, 21:07



Название: Анализ списка файловых путей.
Отправлено: _Bers от Ноябрь 01, 2014, 21:07
Добрый вечер.

Предупреждаю сразу: данная тема не содержит проблемы. И создана исключительно для интересного время провождения.

Итак, дабы немножко скоротать вечер за интересной (я надеюсь) задачкой, решил запостить ребус:

Рассмотрим следующую иерархию каталогов, которая содержит библиотеки:

Цитировать
external
 |
 |--common_lib
 |   |
 |   |--lib1
 |   |   |--include
 |   |   |   `--lib1.h
 |   |   |--lib32
 |   |   |   `--lib1.lib
 |   |   `--lib64
 |   |       `--lib1.lib
 |   `--lib2
 |       |--include
 |       |   `--lib2.h
 |       |--lib32
 |       |   `--lib2.lib
 |       `--lib64
 |           `--lib2.lib
 |
 `--add
     |--include
     |   `--add.h
     |--lib32
     |   `--add.lib
     `--lib64
         `--add.lib

Очевидно, что в данном случае получается 3 библиотеки: lib1, lib2, add.

Как именно человек, глядя на иерархию каталогов определяет имена и месторасположение библиотек?

Очень просто:
Он видит файлы из которых могут состоять библиотеки: *.lib и *.h
И находит каталог, общий для этих файлов.
Имя этого каталога и определяет и имя, и месторасположение библиотеки.

--------------------------------------


По задачке мы не видим наглядно никакой иерархии.
Нам на вход дали очень большой список файловых путей.

Например такой:

Цитировать
external/common_lib/lib1/include/lib1.h
external/common_lib/lib1/lib32/lib1.lib
external/common_lib/lib1/lib64/lib1.lib

external/common_lib/lib2/include/lib2.h
external/common_lib/lib2/lib32/lib2.lib
external/common_lib/lib2/lib64/lib2.lib

external/add/include/add.h
external/add/lib32/add.lib
external/add/lib64/add.lib

Список может быть не отсортированным.
В нем могут оказаться "левые" пути, например к файлам документации, или к ресурсам.

В нем могут оказаться "левые" пути, например к каталогу вообще без файлов.
(для простоты будем считать, что имя без расширения - это каталог)

Если в пути, в имени каталога или файла присутствует *ignore*, то такой путь должен быть сразу же проигнорирован.

Если в пути, в имени каталога, или файла сначала постречалось *32, а затем *64, то должно быть выдано предупреждение, а сам файл - проигнорирован.

Если в пути, в имени каталога, или файла сначала постречалось *64, а затем *32, то должно быть выдано предупреждение, а сам файл - проигнорирован.

В качестве расширений файлов из которых может состоять либка - h,hpp,lib,dll



1. Нужно просканировать список путей, и обнаружить месторасположение и имена всех библиотек.

2. Пользователь указывает имя библиотеки, и адресную модель (32/64), и на выходе получает пути к хэдэрам библиотеки, пути к либкам, и список имен либок.







Название: Re: Анализ списка файловых путей.
Отправлено: Igors от Ноябрь 03, 2014, 12:33
Задачу хорошо описали, но сама задача мне нисколько не интересна. Пришлось бы делать - ну сделал бы без всяких хитростей, напр так

Код
C++ (Qt)
QStringList LookupLib( const QStringList & path,  // спысок путей
                                const QString & libName,   // имя либы
                                const QStringList & extensions, // список расширений
                                const QStringList & arch,  // список архитектур    
                                int archNo ); // индекс нужной архитектуры                                
 
Для каждой строки: проверил подходит ли extensions, имя либы, и что архитектура встречается 1 раз и что др нет. Конечно можно это все написать, но не думаю что эта рутина кому-то интересна. Если надо пошустрее искать - сократил бы исходный контейнер напр переставив бракованные строки в хвост (напр по архитектуре и расширению).

Возможно и есть какой-то др способ, но если и так за полчаса можно сделать - чего тратить время на поиски?  :)


Название: Re: Анализ списка файловых путей.
Отправлено: _Bers от Ноябрь 03, 2014, 14:28
Задачу хорошо описали, но сама задача мне нисколько не интересна.

Очень жаль, что задача не вызвала интереса.

На самом деле, если попробовать решить - вылезут различные нюансы (не каждый сможет придумать решение за полчаса).
И окажется, что решений множество разной степени костыльности.

Интересно было бы глянуть на интересные решения: сочетание простоты и скорости работы.




Название: Re: Анализ списка файловых путей.
Отправлено: qate от Ноябрь 05, 2014, 10:21
а почемубы не изменить условия задачи ? )
положить все h в один каталог, 32 и 64 бита разделить по lib32 и lib64