Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.05.12;
Скачать: CL | DM;

Вниз

множества   Найти похожие ветки 

 
unreger   (2003-04-29 08:43) [0]

type
TSProgrammStateOK = (ps_Neutral=0, ps_OK=1, ps_Warning=2);
TSProgrammStatesOK = set of TSProgrammStateOK;
TSProgrammStateError = (ps_Error=3, ps_Critical=4);
TSProgrammStatesError = set of TSProgrammStateError;

Надо объявить что-то вроде
TSProgrammState = TSProgrammStateOK+TSProgrammStateError (объединение)

Только не соображу как это сделать.

Хочется
if CurrentState in TSProgrammStatesOK then ....
где CurrentState типа TSProgrammState


 
Goffman   (2003-04-29 08:57) [1]

Можно объявить ps_Neutral, ps_OK итд константами
а множества объявлять так
TSProgrammStatesOK=set of ps_Neutral..ps_Warning;
TSProgrammStatesError = set of ps_Error..ps_Critical;

TSProgrammState=set of byte;

Надеюсь смысл ясен


 
unreger   (2003-04-29 09:42) [2]

То что надо!
Спасибо.


 
evvcom ©   (2003-04-29 09:55) [3]

Или так:
type
TSProgrammState = (ps_Neutral, ps_OK, ps_Warning, ps_Error, ps_Critical);
TSProgrammStateOK = (ps_Neutral..ps_Warning);
TSProgrammStateError = (ps_Error..ps_Critical);

TSProgrammStates = set of TSProgrammState;
TSProgrammStatesOK = set of TSProgrammStateOK;
TSProgrammStatesError = set of TSProgrammStateError;




 
Goffman ©   (2003-04-29 10:01) [4]


> evvcom © (29.04.03 09:55)

А скомпилировать пробовал :)


 
evvcom ©   (2003-04-29 10:04) [5]

> Goffman © (29.04.03 10:01)
Сейчас нет. А вообще что-то типа этого я уже делал.
Сорьки! Надо без скобок:

TSProgrammStateOK = ps_Neutral..ps_Warning;
TSProgrammStateError = ps_Error..ps_Critical;


 
Goffman ©   (2003-04-29 10:09) [6]

Выдаст Undeclared Identifier


 
han_malign ©   (2003-04-29 10:34) [7]

Извращенцы
type
TSProgrammState = (ps_Neutral, ps_OK, ps_Warning, ps_Error, ps_Critical);
const
cSProgrammStateOk = [ps_Neutral..ps_Warning];
cSPragrammStateError = [ps_Error..ps_Critical];

- намного корректней просто объявить константы подмножеств и проверять вхождение в них, тем более, что в более сложных случаях можно комбинировать эти подмножества операциями объединения, пересечения, et cetera...


 
unreger   (2003-04-29 11:34) [8]

Константы подмножеств - вот оно, нужное слово.
Только
TSProgrammState = (ps_Neutral=0,ps_OK=1,ps_Warning=2,ps_Error=3,ps_Critical=4);
т.к. надо обращаться к элементам массива.


 
evvcom ©   (2003-04-29 12:37) [9]

Можно массив описать:
type TMyArray = array[TSProgrammState] of <AnyType>;
и обращаться MyArray[SProgrammState]
Если же все-таки тип индексов массива целочисленный, то так:
MyArray[Integer(SProgrammState)]
но первый вариант мне гораздо больше нравится.


 
evvcom ©   (2003-04-29 12:40) [10]

Это к тому, что
TSProgrammState = (ps_Neutral=0,ps_OK=1,ps_Warning=2,ps_Error=3,ps_Critical=4);
имеет недостаток. Если вдруг захочешь в этот тип куда-нибудь в середину добавить еще какое-нибудь значение, а суммарное их количество достаточно велико, то придется вручную довольно много править. Поэтому увеличивается вероятность ошибки порой даже трудно уловимую.


 
unreger   (2003-04-29 12:45) [11]

MyArray[Integer(SProgrammState)]

это все внутри класса и сделал private property, которое возвращает
Integer(от текущего ProgrammState) :)


 
unreger   (2003-04-29 13:00) [12]

evvcom © (29.04.03 12:40)

вряд ли потребуется расширять можество, но подумал и, пожалуй,
соглашусь с первым способом

type TMyArray = array[TSProgrammState] of <AnyType>;


 
evvcom ©   (2003-04-29 14:04) [13]

> это все внутри класса и сделал private property

Ничего не мешает реализовывать эту идею и внутри класса. Преобразования типов Integer(TOrdinalType) и TOrdinalType(Integer) добавляют дополнительные символы в текст программы, но не добавляют ничего в результирующий код, поэтому можно этого не бояться.

> которое возвращает Integer(от текущего ProgrammState)

Да и возвращал бы я все же TSProgrammState...



Страницы: 1 вся ветка

Текущий архив: 2003.05.12;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.009 c
14-34612
DiamondShark
2003-04-21 17:40
2003.05.12
Слово


14-34594
Дмитрий К.К.
2003-04-24 06:19
2003.05.12
Именинники 24 апреля


1-34418
Bug008
2003-04-23 19:30
2003.05.12
Выделение цветом слова в Edit


3-34356
PrettyFly
2003-04-22 15:21
2003.05.12
Фильтрация + DBGrid


3-34333
off
2003-04-21 14:04
2003.05.12
Как ускорить выгрузку!