#pragma once #include "gui/Notification.h" #include #include #include #include template std::unique_ptr make_unique_nothrow(Args &&...args) noexcept(noexcept(T(std::forward(args)...))) { return std::unique_ptr(new (std::nothrow) T(std::forward(args)...)); } template std::shared_ptr make_shared_nothrow(Args &&...args) noexcept(noexcept(T(std::forward(args)...))) { return std::shared_ptr(new (std::nothrow) T(std::forward(args)...)); } template bool remove_locked_first_if(std::mutex &mutex, std::forward_list &list, Predicate pred) { std::lock_guard lock(mutex); auto oit = list.before_begin(), it = std::next(oit); while (it != list.end()) { if (pred(*it)) { list.erase_after(oit); return true; } oit = it++; } return false; } // those work only in powers of 2 #define ROUNDDOWN(val, align) ((val) & ~(align - 1)) #define ROUNDUP(val, align) ROUNDDOWN(((val) + (align - 1)), align) extern uint8_t SRGBComponentToRGBTable[]; extern uint8_t RGBComponentToSRGBTable[]; inline uint8_t SRGBComponentToRGB(uint8_t ci) { return SRGBComponentToRGBTable[ci]; } inline uint8_t RGBComponentToSRGB(uint8_t ci) { return RGBComponentToSRGBTable[ci]; } extern std::mutex gNotificationListMutex; extern std::forward_list> gNotificationList;