GyverLibs/EncButton

Почему два класса

XRay3D opened this issue · 14 comments

В чём основное различие между EncButton и EncButton2?
Возможно я могу помочь свести в один файл.

Первый класс хранит номера пинов в шаблоне, второй - в переменных класса

От этого большой выигрыш памяти скорости?
Могу попробовать написать обёртку для шаблонного варианта. Но не уверен что это можно сделать в с++11.
Хотя некоторые вещи всё таки компилит с варнингами.

Выигрыш во всём - в шаблоне. Вторая версия класса сделана для удобного задания массива кнопок/энкодеров

Ок тогда попробую завернуть EncButton.
Если выйдет, то можно попробовать и на другие распространить. Если таковые имеются.

Похоже что виртуальными кнопками придётся пожертвовать или вынести отдельный класс.

да зачем, и так всё отлично организовано. Сейчас отдельный класс нужен только для массива физических кнопок

да зачем, и так всё отлично организовано. Сейчас отдельный класс нужен только для массива физических кнопок

Есть возможность всё в один свести.

https://github.com/XRay3D/EncButton/tree/master
Борщенул с CRTP и выиграл от 50 до 102 байт по флешу, ОЗУ прежнее.
Теперь всё в одном классе.
Хотел ещё и недопустимые для выбранного типа проверки состояний вынести в ButtonImpl и EncoderImpl

Божечки! При всем желании не смогу разобраться, как оно работает)

Божечки! При всем желании не смогу разобраться, как оно работает)

https://en.cppreference.com/w/cpp/language/partial_specialization
https://en.cppreference.com/w/cpp/language/crtp
https://en.cppreference.com/w/cpp/language/qualified_lookup
https://en.cppreference.com/w/cpp/language/adl

замена макросов дала львиную долю памяти.

   // флаг макро
    void setFlag(Internals::Flags x) { flags |= +(1 << x); }
    void clrFlag(Internals::Flags x) { flags &= ~(1 << x); }
    NODISCARD bool getFlag(Internals::Flags x) { return flags & (1 << x); }

    template <Internals::Flags val>
    NODISCARD bool checkFlag() { return getFlag(val) ? clrFlag(val), true : false; }

https://en.cppreference.com/w/cpp/language/crtp
Это как "класс из кубиков лего собирать". Только у меня попой к переду работает.

Брать будете? )) Дизайнил из-за обратной совместимости. Почти. Могу всё комментарииями обмазать.

Божечки! При всем желании не смогу разобраться, как оно работает)

Годнота по теме подъехала.
https://www.youtube.com/watch?v=UrL5gdW2JOM