Вниз
Скачать: 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.008 c
1-34481
dimon1979
2003-04-29 16:12
2003.05.12
Встроенный ассемблер


3-34377
supersan
2003-04-21 16:40
2003.05.12
Получение значения поля только что вставляемой записи


14-34544
exo
2003-04-22 18:21
2003.05.12
timer


3-34372
Jaxtor
2003-04-22 14:28
2003.05.12
IBStoredProc


1-34488
Tihas
2003-04-29 16:29
2003.05.12
Вопросик на тему вызова сишных функций из dll




   Наверх