Каков наиболее эффективный способ анализа файла волнового фронта с отображением в памяти .obj? - PullRequest
0 голосов
/ 19 сентября 2019

Я пытаюсь написать синтаксический анализатор для больших (650 МБ +) файлов волнового фронта .obj, используя отображение памяти (cpp-mmf), но поскольку к самому отображенному файлу обращаются через const char *, я не могу использовать std :: string и егометоды (если только я не хотел скопировать все это в надлежащую память, что отрицательно сказывается на назначении памяти).

Указанные файлы .obj содержат триангулированные и развернутые модели, поэтому их структура всегда следует одной и той же схеме:

...
v -0.723607 0.447220 -0.525725
v 0.276388 0.447220 -0.850649
v 0.894426 0.447216 0.000000
v 0.000000 1.000000 0.000000
...
vt 0.519353 0.318304
vt 0.518998 0.318304
vt 0.518643 0.318304
vt 0.518288 0.318304
...
vn -0.3764 0.8831 0.2800
vn -0.3757 0.8831 0.2810
vn -0.3744 0.8837 0.2809
vn -0.3737 0.8837 0.2819
...
f 17358/3085/4563 14895/3086/4563 14894/3023/4563
f 13746/176/4564 17359/179/4564 17296/177/4564
f 17359/179/4565 17360/3087/4565 17296/177/4565
f 17296/177/4566 17360/3087/4566 17297/3024/4566

Таким образом, константы здесь представляют собой числа в одной строке, и тот факт, что только числа с префиксом «vt» будут одинаковой длины.

Мои вопросы:

  1. Должен ли я просмотреть файл, рассчитать необходимую память на основе количества префиксов и использовать malloc () / calloc () или просто не беспокоиться ииспользовать векторы?
  2. Является ли strtof / strtol лучшим выбором для преобразования чисел в float / int или есть что-то более эффективное?
  3. Эти три индекса разделены / внизучасто дубликаты.Как мне копировать только уникальные?
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...