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
Ммм, это было в смысле "два разных интервала, которые зацепляются", сорян
Гегам
нет, я вопроса не понял: void foobar(std::fstream & fs) ; ....
а как сделать чтобы он русские буквы тоже понимал и сохронил в тексте вместо кряк?
Egor
Типа: один начался, второй начался, первый закончился, второй закончился
Egor
А, не, это не очень сильно поможет, хотя будет приятным условием, конечно.
Дмитрий ⬡
Roman
ну правильно, пересекающихся элементарных интервалов быть конечно в C++ не может
Roman
хотя.. union?
Roman
я пока не думал про union
Alexander "SonnySlave"
я потерял мысль
Roman
в общем в случае с union получаем пересекающийся интервал
Alexander "SonnySlave"
как мы перешли от interval_tree к union?)
Roman
как мы перешли от interval_tree к union?)
я хочу постоить карту памяти из dwarf, т.е. где какие структуры расположены и куда указывают указатели
Roman
думаю с union можно получить не полностью вложенный интервал, если задать кастомный alignof
Roman
Хотя не могу этого утверждать
Roman
Надо разбираться
Roman
В общем у меня уже есть готовый прототип на Python в виде скрипта к gdb. Но он работает слишком медленно. Больше 100000 объектов не тянет
Roman
Нет, похоже нельзя даже с union сделать пересекающиеся интервалы памяти
Дмитрий ⬡
Нельзя, точно говорю)
Roman
Похоже компилятор выравнивает все по max (alighof ( union_element ))
Roman
ну т.е. все элементаные интервалы - примитивные типы C++ в памяти не пересекаются
Гегам
Это уже вопрос кодировки. Чего хотим и что имеем?
у меня задача записывать строки в файл потом считая из них удалить знаки препинаия и записывать в новый файл. на англ все норм а на русском кряки хотя и нужные символы удаляет
Дмитрий ⬡
Дмитрий ⬡
Видимо windows? В linux сейчас char* по умолчанию в unicode
Ерунду, простите, говорите. На Linux принято использовать UTF-8, что позворяет приложениям, работающим с ASCII, без сайд-эффектов работать с UTF-8, не более.
Дмитрий ⬡
Я имел в виду это: cout « sizeof ("Привет") « endl; » 13
Тоже ерунда) Кодировка входного файла оч сложный вопрос. На линуксе, в силу UTF-8, под char * видно только, что длина строчек слегка странная, но работает.
Гегам
https://pastebin.com/tRxjDWyz
Дмитрий ⬡
вот кодировка не знаю наверно utf8))) а так string
string хранит char. Это значит, что можно работать с ASCII, или если не надо ковырять, то и UTF-8. Но это не имеет никакого отношения к тому, какая кодировка у файла.
Дмитрий ⬡
Какая у тебя ОС, давай так начнём?
Roman
Тоже ерунда) Кодировка входного файла оч сложный вопрос. На линуксе, в силу UTF-8, под char * видно только, что длина строчек слегка странная, но работает.
Ну у меня на Ubuntu UTF по дефолту: std::ofstream ofs; ofs.open ("out.txt", std::ofstream::out); ofs « "Привет"; $cat out.txt Привет
Дмитрий ⬡
Ну у меня на Ubuntu UTF по дефолту: std::ofstream ofs; ofs.open ("out.txt", std::ofstream::out); ofs « "Привет"; $cat out.txt Привет
Моя мысль в том, что если на данной ОС с данной кодировкой работает, то это ещё не значит, что на соседнем компьютере с такой же ОС заработает.
Дмитрий ⬡
@geghamantonyan, я не знаю, как кратко ответить на твой вопрос, кроме как послать изучать всё про кодировки и локали. Потому что локали rus не существует, как я знаю.
Roman
Моя мысль в том, что если на данной ОС с данной кодировкой работает, то это ещё не значит, что на соседнем компьютере с такой же ОС заработает.
Ну да, гарантий к сожалению язык не дает. Хотя кто-то мне говорил что в последнем стандарте что-то написано про utf
Дмитрий ⬡
Ну да, гарантий к сожалению язык не дает. Хотя кто-то мне говорил что в последнем стандарте что-то написано про utf
Слишком мало, к сожалению. Даже сконвертировать не очень сходу понятно, как.
Roman
Слишком мало, к сожалению. Даже сконвертировать не очень сходу понятно, как.
В общем только utf-8 строковые литералы добавили http://en.cppreference.com/w/cpp/language/string_literal
Roman
но когда я так пишу визула на экран хотя бы русские буквы понимает
Да, microsoft знает как заставить пользователей страдать :) Регулярно под Windows выходят игры которые не запускаются если у тебя имя пользователя на русском языке Последний раз это видел в Fallout 4
Дмитрий ⬡
@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
Дмитрий ⬡
для utf16 в каком случае неверно? что постоянное число char
Суррогатные пары! Плюс винда иногда пропускает не самые валидные последовательности, стоит быть аккуратным (но на это ещё надо напороооться).
Дмитрий ⬡
Иногда нужно два char16_t.
Vlad
utf32 решение всех проблем
Дмитрий ⬡
utf32 решение всех проблем
Да, это хранит любой символ как символ... Только если его не разложили (дадада, привет ненормализованная ё).
Дмитрий ⬡
Unicode is fun.
Vlad
ничего лучше не придумано
Vlad
ненормализованная ё - обычно первый признак подготовки текста на маке ;)
Roman
А в чём проблема с ё ? И что есть нормализация в данном контексте
Дмитрий ⬡
Ну её можно записать как два символа: 1. киррилитическая е 2. две точки сверху предыдущему господину
Vlad
U+0308
Vlad
по стандарту нужно нормализовывать
Vlad
но вот макось например забивает
Дмитрий ⬡
Ничосе. Не знал про такое. Это как свисток ASCII 7 ?
Кто говорит, что нужно? Не обязательно. Нет, свисток это честный символ. До сих пор юзаем)
Roman
U+0308
В описании сказано вызывает диарею https://www.fileformat.info/info/unicode/char/0308/index.htm
Vlad
и + u+0306
Vlad
там ещё этих нормализаций 4 вида
Vlad
Правда для большинства символов приводящих к одному и тому же
Гегам
Спасибо за информацию но для меня это чуток рано. после экзаменов прям все почитаю чтоб понять)
Roman
Какая-же боль от того что оператор new не типизированный. Ну почему variadic шаблоны изообрели не сразу
Дмитрий ⬡
Ммм, а чего хотелось бы? Чтобы при переопределении в классе надо было писать шаблон на наследников, или что?
Roman
Хочу просто знать тип выделяемого объекта при перегрузке new
Roman
А он не типизированный, по сути как malloc
Дмитрий ⬡
Звучит-то разумно, а какой кейс, если не секрет?