[Обозвать] Проверка на очистку любого флага
От: Sinix  
Дата: 06.04.10 06:35
Оценка:
Есть пачка методов, проверяющая выставлен/отсутствует ли флаг у enum'а.

Задача — обозвать метод, возвращающий true, если хоть один флагов не выставлен
x = (value & flag) != flag


Пока назван HasNotAnyFlag по аналогии с методом из коробки HasFlag. Резервный вариант — PartiallyCleared.

P.S. HasAnyFlag (или PartiallySet) для
x = (value & flag) != 0

Смотрится настолько же криво?
Re: [Обозвать] Проверка на очистку любого флага
От: Lazytech Ниоткуда  
Дата: 06.04.10 07:36
Оценка: 6 (1)
Здравствуйте, Sinix, Вы писали:

S>Есть пачка методов, проверяющая выставлен/отсутствует ли флаг у enum'а.


S>Задача — обозвать метод, возвращающий true, если хоть один флагов не выставлен


На правах дилетанта, предлагаю пару вариантов: NotAllFlagsSet и SomeFlag[s]NotSet.
Re: [Обозвать] Проверка на очистку любого флага
От: SergeyT. США http://sergeyteplyakov.blogspot.com/
Дата: 06.04.10 09:56
Оценка: 12 (1) +1
Здравствуйте, Sinix, Вы писали:

S>Есть пачка методов, проверяющая выставлен/отсутствует ли флаг у enum'а.


S>Задача — обозвать метод, возвращающий true, если хоть один флагов не выставлен

S>
S>x = (value & flag) != flag 
S>


S>Пока назван HasNotAnyFlag по аналогии с методом из коробки HasFlag. Резервный вариант — PartiallyCleared.


А может вывернуться (хотя это больше соответствует интерфейсу тех же перечислений):

bool HasAllFlags(); //возвращает true, если все флаги выставлены


а потом:
if (!HasAllFlags())
{ //соответственно, сюда попадем когда хотя бы один из флагов не выставлен
}


P.S. Мне название HasNotAnyFlag выносит мозг и заставляет каждый раз задумываться над тем, что же оно означает.
Re[2]: [Обозвать] Проверка на очистку любого флага
От: Sinix  
Дата: 06.04.10 10:24
Оценка:
Здравствуйте, SergeyT., Вы писали:

ST>А может вывернуться (хотя это больше соответствует интерфейсу тех же перечислений):

Ага. Тогда останется только HasFlag и HasAnyFlag. Вариант.

ST>P.S. Мне название HasNotAnyFlag выносит мозг и заставляет каждый раз задумываться над тем, что же оно означает.

+1
Re: [Обозвать] Проверка на очистку любого флага
От: Кодт Россия  
Дата: 06.04.10 10:26
Оценка: 6 (1)
Здравствуйте, Sinix, Вы писали:

IsGroupSet, IsGroupClear, IsGroupMixed ?
MaskGroup(flags,mask)    = flags & mask
IsGroupClear(flags,mask) = MaskGroup(flags,mask)==0
IsGroupSet(flags,mask)   = MaskGroup(flags,mask)==mask  = IsGroupClear(~flags,mask)
IsGroupMixed(flags,mask) = !IsGroupSet(flags,mask) && !IsGroupClear(flags,mask)
Перекуём баги на фичи!
Re[2]: [Обозвать] Проверка на очистку любого флага
От: Sinix  
Дата: 06.04.10 12:05
Оценка:
Здравствуйте, Кодт!

Кмк, оно не совсем очевидно будет в использовании. Как оно выглядит сейчас (extension method):

var a = SomeEnum.ValueA | SomeEnum.ValueB.

// ...

// В 4м fw есть Enum.HasValue, увы, довольно тормознутый. 
// Если я обзову свой метод иначе - будет 2 метода, делающих одно и то же.
if (a.HasFlag(SomeEnum.ValueA)) 
{
  // ...
}
// ...
if (a.HasAnyFlag(SomeEnum.ValueA | SomeEnum.ValueC))
{
  // ...
}


Пока склоняюсь к варианту SergeyT. — вайпнуть остальные два метода. Грабли: параллельно существует класс с ассертами
var a = SomeEnum.ValueA | SomeEnum.ValueB.

// ...

EnumCode.HasNotAnyFlag(a, SomeEnum.ValueB | SomeEnum.ValueC, "Violation description."); // fails
Re[3]: [Обозвать] Проверка на очистку любого флага
От: Кодт Россия  
Дата: 06.04.10 15:02
Оценка: 36 (2)
Здравствуйте, Sinix, Вы писали:

Тогда ещё варианты HasAnyOfFlags(flags), HasNoneOfFlags(flags), HasAllOfFlags(flags)
А то меня как-то корёжит от "has not any flag"

Или же, если некоторые признаки двоичные (вкл-выкл), а некоторые многеричные (выбор из нескольких вариантов), то проверка будет такой
HasFlag(flagmask,flag) = (value&flagmask)==flag

например, HasFlag(alignment,right)
где
enum FormatFlag
{
  left = 0, center = 0x1, right = 0x2,
  top = 0, vcenter = 0x4, bottom = 0x8,
  nobreak = 0, wordbreak = 0x10, hyphens = 0x20,
  // и т.п.
};

enum FormatMask
{
  alignment = left|center|right,
  valignment = top|vcenter|bottom,
  breaks = nobreak|wordbreak|hyphens,
  // и т.п.
};
Перекуём баги на фичи!
Re[4]: [Обозвать] Проверка на очистку любого флага
От: Sinix  
Дата: 06.04.10 16:36
Оценка:
Здравствуйте, Кодт!

К>Тогда ещё варианты HasAnyOfFlags(flags), HasNoneOfFlags(flags), HasAllOfFlags(flags)


О! Что-то меня хронически клинит когда я названия придумываю. Спасибо!
Re[4]: [Обозвать] Проверка на очистку любого флага
От: Sinix  
Дата: 07.04.10 04:39
Оценка:
Здравствуйте, Кодт, Вы писали:

К>Тогда ещё варианты HasAnyOfFlags(flags), HasNoneOfFlags(flags), HasAllOfFlags(flags)


В общем пришли к HasFlag, HasAnyFlag, HasFlagCleared, HasAnyFlagCleared.
Всем спасибо!
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.