Aidar
Ну в мейкфайлах на самом деле не надо файлы вручную перечислять
Aidar
нет не можем
Aidar
Стоп мы же можем сейчас кажись превращать констекспр поды в типы по методу Антона Полухина?
Aidar
Если да то мы можем "передавать" поды в качестве шаблонных параметров распаковывая и запаковывая их автоматически
🐙 Antony
Aidar
я пытаюсь
🐙 Antony
но нужен С++17
🐙 Antony
В "методе Полухина" на С++14 есть reinterpret_cast, который нельзя в constexpr
Aidar
да впень с++14
Aidar
там трабла в том что чтоб это сделать нормально мы уже должны это уметь
🐙 Antony
template <template <auto...> class Callback, class Value, size_t... I>
constexpr auto decompose_to_subtypes_impl(Value v, std::index_sequence<I...>) noexcept {
return Callback<get<I>(v)...>{};
}
Aidar
это работает?
🐙 Antony
не проверял)
Aidar
не должно вроде
🐙 Antony
Ну, постараюсь на этой неделе проверить и довести до ума
Aidar
ошибка: decomposition declaration cannot be declared «constexpr»
🐙 Antony
О_О
🐙 Antony
вот это облом
Aidar
и вот еще
Aidar
constexpr auto test_constexpr(int a) noexcept {
return integral_constant<int, a>{};
}
Aidar
не работает
Aidar
потомучто a не constexpr
🐙 Antony
тооочно
🐙 Antony
Aidar
короче бесполезно
Aidar
надо тупо вводить constexpr параметры или чтото такое
Aidar
constexpr test t{3, 'c'};
struct bar {
const test value = t;
};
cout << foo<bar>() << endl;
вот такое есть только
Aidar
можно обмазаться макросами
Danylo
можно обмазаться макросами
через месяц после этого:
"такс, такс, что это у нас тут, о, макрос _FUNC_, давно его не видел"
Berkus
рекурсия на ембеддеде довольно плохая идея
Berkus
радуйся что не попал к таким дауничам
Dr. Friedrich
А в бусте есть интрузивные контейнеры, например.
Berkus
если узлов миллион то можно трейдануть скорость за память и пройти по списку миллион раз, но затратить на это 0 памяти )
Berkus
можно затратить тысячу памяти и пройтись чуть поменьше
Купи
Berkus
но покажите мне эмбеддед с миллионом стека - такого даже не линуксе без доп. опций не добиться
Крылатый
Смотря как список реализован. Xor если, то херня вопрос и без оверхэда
Berkus
Купи
Купи
Купи
Nikita
"а если коллега идиот"?
Fox
Stas
Вопрос стандартный, если идешь в эмбедед. У тебя память и все остальные ресурсы ограничены. Тебе нужен кольцевой встраиваемый список, там даже маллок не нужен. потому что не во все контроллеры он влезет.
Stas
да это обычный. встраиваемый это тот который явл-ся частью полезных данных.
Stas
лучше использовать сразу двухсвязный. там все стандартные операции O(1)
Stas
Я ответил на твой вопрос? Это вопрос больше про Си. да да тот самый старенький Си.
Anatoly
если это С, то это не скомпилируется
Igor
если список не одноноправленный, вообще проблем нет, просто идешь назад,
но даже если список одноноправленный и не стоит ограничение на модификацию списка
можно попробовать его инвертировать. Те если мы упираемся только в память и можно жертвовать временем.
Stas
Да не нужно ничего инвертировать, он кольцевой. Ему даже маллок не нужно при модификации. Памяти в эмбедед очень мало. Но предельные случаи известны. по этому выделяется массив или даже секция по средствам линковщика. Но это массив. а с данными удобнее работать в динамике (но динамике с точки зрения выделения памяти нет, вот бл просто нет маллока и фри) По этому крутые дяди придумали так называемые встраиваемые контэйнеры.
Stas
вот пример из ядра линуха: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/include/linux/list.h?h=v4.13-rc2
Stas
это как раз двухсвязный. односвязные используются чуть реже. могу дать ссылку на мою реализацию если надо. Таким же макаром реализуют деревья, красночерное можно глянуть в том же ядре.
Anatoly
мы даем такой вопрос, но запрещаем рекурсией пользоваться и запрещаем так же new
Igor
Anatoly
что за хрень вообще стеком пользоваться для реверса односвязного списка?
Ivan
Anatoly
мы заставляем реверсировать этот же список
Ivan
А вставка?
Anatoly
при реверсе вставка.
Anatoly
?
Крылатый
Да прост xor список и всего делов, ну...
Крылатый
Никаких лишних аллокаций, ничего.
Ivan
Не, без реверса. Пуш бэк
Крылатый
Просто итерируешься назад с конца и всё.
Anatoly
я пишу про реверс
Ivan
А ок, ну да new не нужен
Ivan
Ну просто обычно прежде чем список развернуть, его надо написать)))
Anatoly
Ну, я так смотрю, многие найдут это задание интересным
Anatoly
дерзайте
Ivan
Пройдёт доконца, узнает размер)))
Крылатый
1. Пройтись до конца. 2. Хранить длину отдельно.
Ivan
Неее, нельзя хранить. Чистый список. Только из нод))
Stas
Ноды в эмбедед создаются уже под задачу, читай выше. ПРимер: нам известно что будут приходить данные из разных источников, мы их транслируем. скажем некие покеты по SPI или модбас там.. нам оговорили что в очереди 500 пакетов. мы делаем массив на максимум. далее обьявляем кол-во голов списков согласно кол-ва входных дырок. далее идут данные. с разных дурок с разной скоростью мы берем из общего пула ноду пихаем в свою голову, после отрабоки возврощаем. если в пуле нод нет, превышен заложенный макимум на 500. как то так.
Крылатый
Ivan
Так и делают
Ivan
Ну, конечно, лучше хранить размер))
Крылатый
Хотя если бы скорость была бы критичной и размер списка большой, то лучше бы хранил.
Stas
размер можно, но этого не делают для гибкости. потому что каждая нода может быть головой. иногда это удобно. опять же для динамики.
Ivan
Вообще список медленнее обходить, чем вектор тот же