0r@ngE
функция сравнения карл
https://github.com/id-Software/DOOM-3-BFG/blob/1caba1979589971b5e… Dict.cpp#L509
FordPerfect
> Конкретно type_index не гарантирует отсутствия коллизий.
кэп... ты ли?
FordPerfect
> но таки вычисление хеша на каждый raise.
таки что бы рассуждать о сложности алгоритма, для начала таки нужно выяснить нахрена этот алгоритм нужен?
правда нет других способов регистрации кроме как вычисление хеша?
помойму от счетчика зарегистрированных событий будет толку больше при регламентированном алгоритме их регистрации
чем от хеша, в случае распределенной системы событий
cNoNim
Ну, ты же говоришь
>type_index это то что придумали для того, что бы использовать в качестве ключа unordered_map
вот я и уточняю, чем он поможет, по сравнению с кодом ТС.
FordPerfect
в коде ТС хеш используется в качестве ключа, ты не видишь разницы между хешем и type_index?
cNoNim
>помойму от счетчика зарегистрированных событий будет толку больше при регламентированном алгоритме их регистрации
>чем от хеша, в случае распределенной системы событий
Так с этим я не спорю. Я спрашиваю, к чему ты type_index упомянул, всего лишь.
если мы говорим о реализации протокола распределенной системы событий, то вместо всего этого геммороя на который намекает автор статьи я выберу
enum Signals {
A,
B,
C,
D,
E,
...
};
FordPerfect
к тому что type_index придумали для того что бы использовать вкачестве ключа в unordered_map
как раз для случаев, для которых автор занимается макроподстановками имени типа в строку и вычислением ее хеша,
без относительно применения этой схемы в распределенной системе, потому как она все равно не годится для этого
Тю, торможу я к ночи. Cнимаю вопрос по type_index.
cNoNim
> !!!карл!!!
> для хеш таблиц нужна не только хеш функция, нужна функция равенства
> использовать хеш функцию в хеш таблица, это не тоже самое что использовать хеш в качестве ключа
Вы издеваетесь или превысили дозу?
inline std::size_t get_event_trait_hash()
Какую "функцию равенства" мне нужно для size_t ?
Added:
Вместо той истерики что вас бьет лучше бы немного остыли.
Я попробую вам розжевать если так туго.
Вот тим асслциативного контейнера в котором лежат все ивенты:
typedef std::unordered_map<std::size_t, std::unique_ptr<BasicEvent>> EventsMap;
Разжую:
типа ключа - size_t
тип значения - unique_ptr<BasicEvent>
Когда нам нужно добыть ивент отседова, мы берем хеш ивента (все тот же size_t, см. выше) и просим EventsMap по этому ключу отдать нам ивент.
Если надо передать ивент по сети - то мы сохраняем переданные параметры (обсуждение ReflectionSystem вынесем за рамки дискуссии) а так же хеш ивента.
Этой информации с головой хватит на получателе чтобы вытащить ивент и бросить его с нужными параметрами.
Вычислением хеша занята функция:
template <typename T> inline std::size_t get_event_trait_hash() { static std::size_t result = 0; if (!result) { const char* traitName = get_event_trait_name<T>(); std::hash<std::string> hasher; result = hasher(traitName); // TODO: replace this with something platform-independent } return result; }
Если, опять же, закрыть глаза на то что в примере я использовал стандартную функцию получения хеша от строки, то логика следующая:
* при первом обращении к функции будет взят хеш от имени ивента и отдан
* при повторных обращениях будет отдан уже посчитанный хеш
Выше я уже писал что колизии возможны, но на практике - я использую FNV-1a, и за те 7 лет что я ее использую - с колизией столкнулся лишь раз, и решилось простым переименовыванием одного элемента. Всего раз за 7 лет.
Если столкнусь снова - буду решать на месте, но это детали.
Теперь внимание вопрос:
Какую нахрен функцию сравнения вы от меня хотите, и куда вы бы хотели ее присобачить?
PS. На всякий случай - если уж так сильно хочется обращаться ко мне по имени - то меня зовут Сергей, но никак не Карл.
0r@ngE
> но на практике - я использую FNV-1a, и за те 7 лет что я ее использую - с
> колизией столкнулся лишь раз, и решилось простым переименовыванием одного
> элемента. Всего раз за 7 лет.
подскажиподскажите в какой отрасли ты работаешьвы работаете?
cNoNim
> подскажиподскажите в какой отрасли ты работаешьвы работаете?
Не хорошо вопросом на вопрос отвечать.
0r@ngE
> Теперь внимание вопрос:
> Какую нахрен функцию сравнения вы от меня хотите, и куда вы бы хотели ее
> присобачить?
Могу я получить ответ на этот вопрос? Он меня очень интересует.
Added:
Решил что нехорошо ваш вопрос оставлять без ответа. Я работаю в геймдеве. Или вас интересует что-то более конкретное?
0r@ngE
> Выше я уже писал что колизии возможны
Карл, зачем вы допускаете проблемы с коллизиями там, где их можно избежать?
> Какую "функцию равенства" мне нужно
> Могу я получить ответ на этот вопрос? Он меня очень интересует.
Разрешение коллизий
или
Идеальное хеширование
> с колизией столкнулся лишь раз
А кому-нибудь обязятельно повезёт больше и он столкнётся с коллизией два раза.
0r@ngE
Если честно, то я мало чего могу добавить, в основном меня возмущает, что этот бред присутствует в статье цель которой чему то кого то научить,
я кроме как спросить "Где вы еще встречали подобные решения?" больше ни чего не могу... рассказы про дум3 не прокатят, я уже показал его исходники, если вы не понимаете того что я вам показываю, то смысла что либо объяснять я не вижу.
даже если так можно писать в пет проектах, в темной комнате и ни кому не показывая, это не значит что так писать нужно и меня немного шокирует попадание подобного в продакшин, возможно это в gamedev и не так страшно,
но прошу не переносите этот опыт на другие отрасли ) если вдруг придется в них работать.
можем сменить тему с хеш функций, потому как желание ее мусолить мало,
можем поговорить о ценности этой статьи в принципе,
думаю что вы согласитесь, что систему событий описаную в статье сложно назвать чем то с чего можно брать пример, и кидаться переносить в свой код, вся система сводится к тому что я написал в #57...
все ваши оправдания вроде
> Использовать планируется для передачи ивентов по сети.
это не то о чем в статье речь, потому что этого в статье нет,
встает резонный вопрос а что же в статье есть?
в статье есть какие то рассуждения на счет
tuple
integer_sequence
и генерации за их счет правильного bind
Okay...
но они не нужны, все для чего они используется в статье
решается комбинацией variadict template и lambda
bind и placeholders это атавизмы которые пролезли в стандарт из буста, но реальной ценности в них при наличии лямбд нет ни какой,
таких фич в стандарт попадает много , по тому что они кажутся крутыми, но довольно сложно смотреть на них в контексте других фич которые лезут в стандарт
cNoNim
> можем сменить тему с хеш функций, потому как желание ее мусолить мало,
Ушли от ответа? Достойно, ничего не скажешь. А столько было истерики с картинками и видео, а в итоге пшик...
Тема в архиве.