Вниз
Скачать: 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 вся ветка

Скачать: CL | DM;



Память: 0.48 MB
Время: 0.009 c
1-34492
Shuric
2003-04-29 17:50
2003.05.12
Обмен между приложениями


3-34375
Jaxtor
2003-04-21 12:26
2003.05.12
Кэшированные изменения


1-34506
[diesel]
2003-04-30 07:52
2003.05.12
Прорисовка TListView


1-34443
ДЮША
2003-04-28 15:02
2003.05.12
Программа в трее......


6-34526
elf_123
2003-03-16 15:48
2003.05.12
Глупенький маленький вопросик(Client/Server Socket)




   Наверх