Какими из операторов можно проверить присутствие флага, и удалить его если он есть, в противном случае добавить?
Значения флагов имеет тип uint32_t.
bool window::set_fullscreen(const bool value) const
{
uint32_t flags = SDL_GetWindowFlags(m_window_.get());
if(flags & SDL_WINDOW_FULLSCREEN)
{
if(value)
{
return true;
}
flags &= SDL_WINDOW_FULLSCREEN; // удалить флаг если значение value false
}
else
{
// Тут необходимо добавить флаг в значение flags и вызвать соответствующую ф-цию
}
return SDL_SetWindowFullscreen(m_window_.get(), flags) == 0;
}
Если переменная флагов - flags, а конкретный бит - mask (например, 000100 в бинарной записи), то
Проверка установленности:
if (flags&mask) { установлен }
Установка флага:
flags |= mask;
Сброс флага:
flags &= ~mask;
Изменение флага на противоположный:
flags ^= mask;
Видимо, флаги здесь соответствуют выставленным битам, например FlagX = 0x00000800 означает, что 11-й бит установлен.
Для установки флага используется битовое ИЛИ
flags = flags | FlagX
Для сброса нужно, не портя других битов, обнулить конкретный. Для этого инвертируем константу флага (все биты становятся единичными, кроме данного) и выполняем битовое И
flags = flags & (~FlagX)
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости