Size: a a a

2020 July 23

🎄T

🎄🎊 R 🎅 Tb| ✡️ 🎊🎄... in supapro.cxx
Дмитрий
TLV encoding пишу, хотел таким образом обратно данные в нормальный вид переводить. Но, скорее всего, буду писать как в nlohmann json, где есть методы  типа is_bool и т.д. А там уже будет понятно, во что данные превращать
А можно краткую справку по TLV?
источник

🎄T

🎄🎊 R 🎅 Tb| ✡️ 🎊🎄... in supapro.cxx
Ну вообще наверное если формат принимаемого / отправляемого TLV известен в компайл-тайме, то можно заюзать шаблонной магии
источник

Д

Дмитрий in supapro.cxx
🎄🎊 R 🎅 Tb| ✡️ 🎊🎄
А можно краткую справку по TLV?
Берется "тег"(число) типа, берется длинна данных(число), потом идут сами данные в виде массива байт, всё это конвертится в байты и отсылается куда-то
источник

🎄T

🎄🎊 R 🎅 Tb| ✡️ 🎊🎄... in supapro.cxx
Дмитрий
Берется "тег"(число) типа, берется длинна данных(число), потом идут сами данные в виде массива байт, всё это конвертится в байты и отсылается куда-то
Ну когда принимаются данные в этом формате известно же какой тег какому типу соответствует?
источник

CD

Constantine Drozdov in supapro.cxx
Anatoly Shirokov
визитер для полиморфных иерархий описывают отдельным интерфейсом, чтобы при добавлении нового типа получить по рукам везде, где он используется.
Не сравнивай случаи двойного диспетчера, ты когда вьюхи множишь на события, ты обязан одно перечислить, ты не можешь уже уйти от визиторов. Тут второго диспетчера нет, никакого полиморфизма визитора нет, просто обычный полиморфный тип, описываемый контрактом
источник

🎄T

🎄🎊 R 🎅 Tb| ✡️ 🎊🎄... in supapro.cxx
Дмитрий
Берется "тег"(число) типа, берется длинна данных(число), потом идут сами данные в виде массива байт, всё это конвертится в байты и отсылается куда-то
Еще вопрос. Длина данных у одного типа может быть разной?
источник

Д

Дмитрий in supapro.cxx
🎄🎊 R 🎅 Tb| ✡️ 🎊🎄
Ну когда принимаются данные в этом формате известно же какой тег какому типу соответствует?
ну в этом и проблема, я хотел же сначала сделать мапу тег - тип, но так нельзя) Связь условная, у меня есть enum с типами и в принципе я знаю что INT = 1 это int, но комплиятор об этом не знает
источник

🎄T

🎄🎊 R 🎅 Tb| ✡️ 🎊🎄... in supapro.cxx
Дмитрий
ну в этом и проблема, я хотел же сначала сделать мапу тег - тип, но так нельзя) Связь условная, у меня есть enum с типами и в принципе я знаю что INT = 1 это int, но комплиятор об этом не знает
Можно
источник

🎄T

🎄🎊 R 🎅 Tb| ✡️ 🎊🎄... in supapro.cxx
Дмитрий
ну в этом и проблема, я хотел же сначала сделать мапу тег - тип, но так нельзя) Связь условная, у меня есть enum с типами и в принципе я знаю что INT = 1 это int, но комплиятор об этом не знает
Можно сделать через тайплист
источник

Д

Дмитрий in supapro.cxx
🎄🎊 R 🎅 Tb| ✡️ 🎊🎄
Еще вопрос. Длина данных у одного типа может быть разной?
Нет
Единственный прикол это строки, где длинна может меняться от случая к случаю
источник

🎄T

🎄🎊 R 🎅 Tb| ✡️ 🎊🎄... in supapro.cxx
Дмитрий
ну в этом и проблема, я хотел же сначала сделать мапу тег - тип, но так нельзя) Связь условная, у меня есть enum с типами и в принципе я знаю что INT = 1 это int, но комплиятор об этом не знает
TypeList<Pair<Int2Type<1>, Type>, …>
и что-то такое
источник

🎄T

🎄🎊 R 🎅 Tb| ✡️ 🎊🎄... in supapro.cxx
Дмитрий
Нет
Единственный прикол это строки, где длинна может меняться от случая к случаю
А как конструируются объекты из байтов?
источник

Д

Дмитрий in supapro.cxx
У меня есть десериализация, где из массива байт я достаю данные,  тег и длинну. Последнее, что мне остается, это скастить эти данные к нужному типу
источник

🎄T

🎄🎊 R 🎅 Tb| ✡️ 🎊🎄... in supapro.cxx
Дмитрий
У меня есть десериализация, где из массива байт я достаю данные,  тег и длинну. Последнее, что мне остается, это скастить эти данные к нужному типу
Т.е. для каждого типа нужно еще писать десериализацию из массива байт?
источник

Д

Дмитрий in supapro.cxx
Т.к. типы все тривиальные, то сложностей с кастом нет
источник

🎄T

🎄🎊 R 🎅 Tb| ✡️ 🎊🎄... in supapro.cxx
Дмитрий
Т.к. типы все тривиальные, то сложностей с кастом нет
У вас это работает только с PODами?
источник

Д

Дмитрий in supapro.cxx
template<typename T>
 T get_value()
 {
  return hton(*reinterpret_cast<T*>(this->data_.data()));
 }

Что-то типа такого, типы POD, но есть ещё строки, там немного другая логика
источник

🎄T

🎄🎊 R 🎅 Tb| ✡️ 🎊🎄... in supapro.cxx
Дмитрий
template<typename T>
 T get_value()
 {
  return hton(*reinterpret_cast<T*>(this->data_.data()));
 }

Что-то типа такого, типы POD, но есть ещё строки, там немного другая логика
У вас получается только числовые типы с строки?
источник

Д

Дмитрий in supapro.cxx
Да, числа и строки
источник

Д

Дмитрий in supapro.cxx
Есть ещё особые теги, в которых нет значения. Признак окончания пакета, но их вроде кастить не надо
источник