Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Использование типов данных "Перечисление" и "Множество" [D7, XP]


Страницы:   1 2 3

DQ ©   (2014-03-28 19:44:00) 

Пара вопросов.

Вот я объявил:
type ZEnum = (z_first, z_second, ..); ZSet = set of ZEnum;
Посмотрел SizeOf(ZSet)- он показывает 1 байт. Можно ли заставить его выравнивать до 4-х байт? Временное решение: .. , z_last=31)

Вот я теперь пытаюсь (в Делфи7) проверить:
var ZS: ZSet;
..
ZS:=[z_second];
if (z_first in ZS) then showmessage('z_first');
if (z_second in ZS) then showmessage('z_second');

И при Ctrl+Space нет всплывающих окошек с подсказками какие ещё ZEnum бывают, можно как-то поправить чтоб были?


Германн   (2014-03-29 02:24:00) [21]

Удалено модератором


Inovet   (2014-03-29 02:11:00) [22]

> [35] DQ   (29.03.14 01:46)
> Предыдущего? Про надо спать?

Это тоже надо, но я про [31].


DQ   (2014-03-29 01:46:00) [23]

Предыдущего? Про надо спать? =)
Конечно надо! Добрых снов! Завтра выходной, всем выспаться!

Сделаю завтра, потестирую... Будет видно.


Inovet   (2014-03-29 01:42:00) [24]

> [33] DQ   (29.03.14 01:40)
> Попробовать обернуть множество и блок в 4 байта в ещё один юнион?

Ну да, так и надо. Только как там насчёт предыдущего поста?


DQ   (2014-03-29 01:40:00) [25]

Не было секрета, вообще-то я ещё в [7] об этом написал.
У меня нет проблем. Меня не устраивают сами штатные способы, их я знаю наизусть (хотя не уверен что именно вы подразумевали этим термином). Просто пытаюсь переписать давно готовый код, чтоб стало прозрачнее, короче и удобнее для человека (плюс упрощая читаемость, поддержку и доработку). Монстры у меня только в описании структурных типов данных. А в секции реализации всё как раз очищается от лишнего. Иногда просто удобно переписав тип данных избавляешься от десятков Shr/Shl.

Inovet, просто там не всё по 4 байта. Без Packed он в одном месте не так выравнивает, а с Packed всё кроме этого SetOf нормально. Попробовать обернуть множество и блок в 4 байта в ещё один юнион? хм...

Кстати $MinEnumSize не действует на SetOf вообще никак. =(


Inovet   (2014-03-29 01:31:00) [26]

> [30] Германн ©   (29.03.14 01:05)
> Пардон. Установил новую ОС.

ОС... У меня вон, пока тут отвечал, на ровном месте полезла AV в функции из двух строчек, нулевой указатель внезапно стал передаваться. Спать надо.


Inovet   (2014-03-29 01:28:00) [27]

Кстати, насколько там нормировано и как зависит от директив расположение бит, чтобы его так вот в юнионе использовать, а то придётся жёстко задавать.


Германн   (2014-03-29 01:05:00) [28]

Удалено модератором


Герменн   (2014-03-29 01:03:00) [29]

Удалено модератором


Герменн   (2014-03-29 01:00:00) [30]

Удалено модератором


Inovet   (2014-03-29 00:53:00) [31]

> [26] DQ   (29.03.14 00:20)

Ну допустим наложить множество на DWORD? так зачем ровно 4 байта делать, пусть меньше будет, главное чтобы начало было выровнено, а это уже компилятор будет выравнивать при соответсвующем указании - что на что накладывать.


DQ   (2014-03-29 00:20:00) [32]

В том-то и фокус - они не разъехавшиеся. Они в юнионе, говорил же. Точнее будут не такими сякими если SizeOf(ZSet)=4.
У меня нету XYZ, у меня поиск нового подхода к древней задаче. Просто практически не пользовал раньше "Перечисление" и "Множество".
Пытаюсь переложить кучу логики, промежуточных переменных и принудительных приведениев типов с кода на уровень хитрого описания типа данных.
Не получится - ну просто вернусь к подходу которому около 15 лет, только DWORD, только хардкор. А вот если получится - будет сверхудобная штука.


DVM   (2014-03-29 00:13:00) [33]

А причем тут вообще размер перечисления.


Inovet   (2014-03-29 00:00:00) [34]

> [22] DQ   (28.03.14 23:55)
> Что-то, а с директивами компилятора у меня большой пробел.

Там же и про выравнивание есть.


Inovet   (2014-03-29 00:00:00) [35]

> [21] DQ   (28.03.14 23:54)

В параллельных измерениях они и так разехавшиеся, в проекции могут и пересекаться, но это не должно волновать, путь компилятор им выделит в пространстве нужные координаты.

Снова XYZ, на днях только было.


DQ   (2014-03-28 23:55:00) [36]

ой.. Пока печатал.. Спасибо! Будем изучать. Что-то, а с директивами компилятора у меня большой пробел.


DQ   (2014-03-28 23:54:00) [37]

Представьте воображаемые "составы" в 4-хмерном пространстве, которые в параллельных измерениях едут в одном и том же месте одновременно, пересекаясь своими координатами и объёмами.
Нужно что бы вагон типа ZSet вцепленный в Packed Record занимал 4 байта ровно, а то разъедутся мимо.
Ладно... А всё же почему это: ZS:=[плюс Ctrl+Space показывает перечисления, а там где "in" ничего не показывает вообще?


MBo   (2014-03-28 23:51:00) [38]

Перечисления  с явно заданными значениями  (z_last=31) неполноценно поддерживаются компилятором, например, для них нет RTTI. Видимо, поэтому и подсказок нет.

А минимальный размер перечисления определяется директивой компилятора $MinEnumSize ($Z)


Inovet   (2014-03-28 23:45:00) [39]

> [17] DQ   (28.03.14 23:40)
> ам... Они все от нулевого "едут". И все должны возле каждого 4-го останавливаться.

Тогда нет проблем с количеством вагонов, лишь бы длина состава была не больше расстояния между 4-мя столбами.


DQ   (2014-03-28 23:41:00) [40]

Там вообще-то шутка была. Есть такая штука как юмор. =(


Страницы:   1 2 3

Наверх

Титульная страница Поиск, карта сайта Написать письмо