Roman
Т.к. требуется влезать в потроха того как строится дерево
Roman
Т.е. по сути с нуля его делать это свой std::map писать
Egor
А если вы это делаете для new, то ведь верно, что у вас все интервалы не пересекаются?
Roman
Нет, всё сложнее, прога парсит dwarf и сохраняет интервалы для каждого поля структуры
Roman
т.е. new не пересекаются, но скажем при выделении struct foo { int x; int y;} интервалы x и у будут вложенные
Egor
Окей, а верно ли, что интервалы либо не пересекаются, либо вложены?
Roman
причем foo и x будут иметь одинаковый адрес - начало интервала
Egor
То есть не может быть такого: [(])
Roman
все интервалы [ )
Alexander "SonnySlave"
он не это имеет в виду
Egor
Ммм, это было в смысле "два разных интервала, которые зацепляются", сорян
Egor
Типа: один начался, второй начался, первый закончился, второй закончился
Egor
А, не, это не очень сильно поможет, хотя будет приятным условием, конечно.
Дмитрий ⬡
Roman
ну правильно, пересекающихся элементарных интервалов быть конечно в C++ не может
Roman
хотя.. union?
Roman
я пока не думал про union
Alexander "SonnySlave"
я потерял мысль
Roman
в общем в случае с union получаем пересекающийся интервал
Alexander "SonnySlave"
как мы перешли от interval_tree к union?)
Roman
думаю с union можно получить не полностью вложенный интервал, если задать кастомный alignof
Roman
Хотя не могу этого утверждать
Roman
Надо разбираться
Roman
В общем у меня уже есть готовый прототип на Python в виде скрипта к gdb. Но он работает слишком медленно. Больше 100000 объектов не тянет
Roman
Нет, похоже нельзя даже с union сделать пересекающиеся интервалы памяти
Дмитрий ⬡
Нельзя, точно говорю)
Roman
Похоже компилятор выравнивает все по max (alighof ( union_element ))
Roman
ну т.е. все элементаные интервалы - примитивные типы C++ в памяти не пересекаются
Roman
Дмитрий ⬡
Vlad
Roman
Гегам
Гегам
Гегам
https://pastebin.com/tRxjDWyz
Дмитрий ⬡
Какая у тебя ОС, давай так начнём?
Дмитрий ⬡
Дмитрий ⬡
@geghamantonyan, я не знаю, как кратко ответить на твой вопрос, кроме как послать изучать всё про кодировки и локали. Потому что локали rus не существует, как я знаю.
Roman
Дмитрий ⬡
Гегам
Дмитрий ⬡
@geghamantonyan, если кратко:
1. Предположение, что один символ = один char верно только для ASCII или похожих вещей
2. Предположение, что один символ = постоянное число char верно только для подмножеств кодировок UTF-8 и UTF-16.
3. Предположение, что один и тот же текст записывается однозначно, неверно.
Кажется, что надо сделать ну примерно следующее:
1. Сконвертировать строчку во что-то, где хотя бы русские буквы будут одной "единицей". Стандартной виндовой недоUTF-16 хватит, но это НЕ std::string / char[].
2. Уже в ней аккуратно работать.
3. Сконвертировать обратно.
Винда, как я сказал, живёт сама по себе в кодировке, где одного символа размером в два байта хватает, чтобы записать русскую букву. Но толда и читать надо через wchar_t и их друзей, я там мало знаю. И всё равно это будет не общим решением на все языки.
Vlad
@geghamantonyan, если кратко:
1. Предположение, что один символ = один char верно только для ASCII или похожих вещей
2. Предположение, что один символ = постоянное число char верно только для подмножеств кодировок UTF-8 и UTF-16.
3. Предположение, что один и тот же текст записывается однозначно, неверно.
Кажется, что надо сделать ну примерно следующее:
1. Сконвертировать строчку во что-то, где хотя бы русские буквы будут одной "единицей". Стандартной виндовой недоUTF-16 хватит, но это НЕ std::string / char[].
2. Уже в ней аккуратно работать.
3. Сконвертировать обратно.
Винда, как я сказал, живёт сама по себе в кодировке, где одного символа размером в два байта хватает, чтобы записать русскую букву. Но толда и читать надо через wchar_t и их друзей, я там мало знаю. И всё равно это будет не общим решением на все языки.
для utf16 в каком случае неверно? что постоянное число char
Дмитрий ⬡
Иногда нужно два char16_t.
Vlad
Vlad
utf32 решение всех проблем
Дмитрий ⬡
utf32 решение всех проблем
Да, это хранит любой символ как символ... Только если его не разложили (дадада, привет ненормализованная ё).
Дмитрий ⬡
Unicode is fun.
Vlad
ничего лучше не придумано
Vlad
ненормализованная ё - обычно первый признак подготовки текста на маке ;)
Roman
А в чём проблема с ё ? И что есть нормализация в данном контексте
Дмитрий ⬡
Ну её можно записать как два символа:
1. киррилитическая е
2. две точки сверху предыдущему господину
Vlad
Vlad
U+0308
Roman
Vlad
по стандарту нужно нормализовывать
Vlad
но вот макось например забивает
Roman
U+0308
В описании сказано вызывает диарею
https://www.fileformat.info/info/unicode/char/0308/index.htm
Vlad
Vlad
и + u+0306
Дмитрий ⬡
Vlad
там ещё этих нормализаций 4 вида
Vlad
Правда для большинства символов приводящих к одному и тому же
Гегам
Спасибо за информацию но для меня это чуток рано. после экзаменов прям все почитаю чтоб понять)
Roman
Какая-же боль от того что оператор new не типизированный. Ну почему variadic шаблоны изообрели не сразу
Дмитрий ⬡
Ммм, а чего хотелось бы? Чтобы при переопределении в классе надо было писать шаблон на наследников, или что?
Roman
Хочу просто знать тип выделяемого объекта при перегрузке new
Roman
А он не типизированный, по сути как malloc
Дмитрий ⬡
Звучит-то разумно, а какой кейс, если не секрет?