![]() |
Ответ: Хитрая хитрость
Цитата:
грузил весь файл, пропарсивая каждую конструкцию в класс class MyClass{ var acc=0; char *name; var value; } Функция запроса значения находила соотвествующей значение по имени внутри списка. Каждое обращение инкерментирует компонент acc. Таким образом, после процессинга перменых, можно прочекать экхемпляры с занулённым счётчиком доступа, чтобы избежать опчеаток в тексте (защита от дурака). Единственное что - у меня гарнтировано всегда грузились все переменные (не было невостребованных), в противном случае защита несколько усложняется -надо сверять имя перменной с разрешёнными. |
Ответ: Хитрая хитрость
хмм как находите переменную по имени?)
на этой странице не нашёл) в смысле имя из файла это ж стринг будет |
Ответ: Хитрая хитрость
Mr_F_
перебираешь все переменные и сравниваешь имя строка это набор символов, физически это масив символов, для удобства создают класс который оперирует с ним, в STL для этого используется std::string, но никто не запрещает тебе работать прямо с масивом |
Ответ: Хитрая хитрость
ну перебирать это зло)
медленно и говнокодово я не бы не создавал эту тему если б хотел обходиться перебором. я делал универсальней в том плане что вместо тысяч ифов мы просто делаем. массив[номер параметра] = значение и это действует на любой класс. биндить к элентам массива элементы класса не так паревно как ифить при загрузке. :) |
Ответ: Хитрая хитрость
Mr_F_
ну бери хеш от имени переменной и создавай бинарное дерево с ключами ввиде этого хеша, тогда поиск нужного значения по имени будет O(log N) имхо твои старания напрасны, если бы у тебя было бы 2 млрд этих переменных, тогда да, а так если их не больше 2-3 тысяч - тогда и все сравнить неплохо |
Ответ: Хитрая хитрость
да дело скорее не в скорости выполнения а в том что хотя бы просто неприятно смотреть на код с тысячей ифов)
ведь выходит что придётся сделать сравнения: - номер класса с классом (и так есть) - в КАЖДОМ варианте про каждый класс - номера параметра с элементом класса просто скроллить даже неудобно -- кстати, что такое хеш? :) |
Ответ: Хитрая хитрость
Mr_F_
какая еще тысяча if'ов ? вот смотри, код сохранения\загрузки параметров узла графа сцены в\из файл Код:
//! Serialize потом я просто пишу Scene->LoadScene("scene1.dat") и вся сцена загружается из этого файла если надо - могу написать Scene->SaveScene("somefile.dat") и вся сцена сохранится в этот файл |
Ответ: Хитрая хитрость
Цитата:
|
Ответ: Хитрая хитрость
Mr_F_
видишь эти строки ? Код:
... те - все переменные не скидываются в общую кучу, а скидываются в секцию, секция может содержать в себе другие секции и тд в итоге получается что мы достаём переменные только из текущей секции, в одной секции редко бывает больше 100 переменных (а зачем ?), потому тут в среднем где-то 10-20 сравнений для поиска нужной информации время затраченное на загрузку информации переменных совсем не заметно в сравнении с временем затраченным на загрузку текстур\моделей |
Часовой пояс GMT +4, время: 22:22. |
vBulletin® Version 3.6.5.
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Перевод: zCarot