Вверх ↑
Этот топик читают: Гость
Ответов: 5446
Рейтинг: 323
#1: 2009-08-25 01:51:13 ЛС | профиль | цитата
Сегодня обнаружил (недокументированную) особенность свойств типа Array: default value (значение по-умолчанию) имеет смысл "тип элементов". С типами int (1) и str (2) всё ясно. По всей видимости, поддерживается и тип data (3), однако назначить элементам значения не представляется возможным (кнопка "..." есть, но её нажатие ни к чему не приводит). Собственно вопрос: что надо сделать, чтобы она заработала? Для порядка конфиг элемента:


#ini
[About]
Version=1.0
Author=iarspider
Mail=

[Type]
Class=Element
Info=Массив (List)
Tab=Arrays

[Property]
+Items=Инициализирует массив строками|13|3

[Methods]
Array=Доступ к любому элементу списка по его индексу|3|0
doArray=Создаёт массив из входного объекта|1|0
------------ Дoбавленo в 01.52:
P.S. Если я пошёл неверным путём, то каков кошерный способ организации массива разнородных элементов?
карма: 1

0
vip
#1.1контекстная реклама от партнеров
Администрация
Ответов: 15294
Рейтинг: 1518
#2: 2009-08-25 10:09:13 ЛС | профиль | цитата
iarspider писал(а):
По всей видимости, поддерживается и тип data (3)

не поддерживается

iarspider писал(а):
то каков кошерный способ организации массива разнородных элементов?

отсутствует
карма: 26
0
Ответов: 262
Рейтинг: 6
#3: 2009-08-25 11:53:29 ЛС | профиль | цитата
iarspider, Я еще в 2006 году предлагал массив разнородных данных http://hiasm.1gb.ru/xf/topic.php?t=6877&start=0. В HiAsm 3_62b160 можно даже поэкспериментировать. Там все работало и тип данных 3 поддерживался. Потом все забылось, хотя по моему, зря Можно было бы доработать компонент и пользоваться.

[size=-2]------ Добавлено в 11:53
Да, и вот тут http://hiasm.1gb.ru/xf/topic.php?t=6831&start=50 было много разговоров на эту тему, да и без нее хватало ....
карма: 0

0
Разработчик
Ответов: 26066
Рейтинг: 2120
#4: 2009-08-25 12:04:14 ЛС | профиль | цитата
Вот вы мне все ответьте -- чем это все от MT отличается в разных вариациях
Чем цепочка MT не одномерный массив разнородных данных, сейчас уже есть и двухмерный массив MT
Ни черта не пойму, в чем разница

------------ Дoбавленo в 12.08:
Хорошо, MT не подходит, тк не имеет именнованых позиций, а чем тогда StreamArray не массив бинарных разнородных данных
карма: 22

0
Администрация
Ответов: 15294
Рейтинг: 1518
#5: 2009-08-25 12:17:18 ЛС | профиль | цитата
nesco писал(а):
а чем тогда StreamArray не массив бинарных разнородных данных

тем, что "бинарные разнородные данные" могут быть представлены только как последовательсть байт в натуральном или HEX виде, что для пользователя неприемлемо.
карма: 26
0
Ответов: 262
Рейтинг: 6
#6: 2009-08-25 12:25:38 ЛС | профиль | цитата
nesco, сразу четыре вопроса я просто сказал тов. iarspider, что когда то уже проходили этот вопрос. А то, что половину элементов можно заменить другими, или их комбинациями, так это и так понятно. Тогда речь шла об универсальности массива и о том, что один элемент-массив мог бы работать со всеми типами данных HiAsm-а, как с однотипными, так и разнородными. Т.е. вместо всех существующих сейчас ХххArray, был бы один универсальный Array.

[size=-2]------ Добавлено в 12:25
Кстати, уже тогда мой элемент поддерживал Streem, Bitmap, Font, Icon, Rect и другие типы в массиве.
карма: 0

0
Администрация
Ответов: 15294
Рейтинг: 1518
#7: 2009-08-25 12:28:59 ЛС | профиль | цитата
Chesh писал(а):
как с однотипными, так и разнородными

туда же следует добавить и структурные типы с набором произвольных полей
карма: 26
0
Ответов: 262
Рейтинг: 6
#8: 2009-08-25 15:40:40 ЛС | профиль | цитата
Dilma, ну Font и Rect структурные типы, а вот что подразумевается под "типами с набором произвольных полей"? Если можно, суть поподробнее или на примере
SizeOf(records) ?....
карма: 0

0
Администрация
Ответов: 15294
Рейтинг: 1518
#9: 2009-08-25 15:46:54 ЛС | профиль | цитата
Chesh писал(а):
SizeOf(records)

да. Формат определения массива:

[Property]
Items=Элементы массива|13|Поле1:тип,Поле2:тип...Поле№:тип

массив чисел в такой нотации

[Property]
Items=Элементы массива|13|Value:integer

массив элементов с произвольным набором полей

[Property]
Items=Элементы массива|13|Left:integer,Top:integer,Right:integer,Bottom:integer

или

[Property]
Peoples=Массив людей|13|Name:string,age:integer,Sity:string,PostCode:integer,Phone:string

карма: 26
0
Ответов: 262
Рейтинг: 6
#10: 2009-08-25 16:05:25 ЛС | профиль | цитата
Dilma, Интересно, насколько я понимаю таких элементов пока нет. Да и создавать целый элемент ради одного статического records-а, по моему будет не удобно, опять же проблемы с переносимостью схем.
Так, если на вскидку - попробую предложить... элемент скажем HiRecords.
Входящий work, сверху DPL точки - поля рекордса, на выходе event - сформированный records
Попробую набросать шаблон и выложу. Останется только определиться с внутренним форматом в TData, как передавать рекордсы? sdata - описание полей, idata - указатель на область с данными ? вопросы ...
карма: 0

0
Администрация
Ответов: 15294
Рейтинг: 1518
#11: 2009-08-25 16:21:00 ЛС | профиль | цитата
Chesh писал(а):
Да и создавать целый элемент ради одного статического records-а

никак нет. Это не один статический рекорд, а массив рекордов со всеми возможностями, присущими любому массиву. Однако чтение и запись элемента такого массива будет происходить с использованием МТ. Самый простой пример, где эта возможность нужна уже сегодня - ToolBar. Каджая кнопка должна быть структурой с полями Caption,Hint,Icon,Enabled,Mode. Однако в МТ есть один минус - у такого потока сложно получать и изменять один произвольный элемент... Поэтому пока надо еще думать.

Насколько удачная идея засунуть структуру в качестве новой сущности в TData с точки зрения пользователя - пока судить не берусь. Но с точки зрения реализации стандартного пакета она удручает. Парсить в runtime имена полей для получения данных это слишком медленно.
карма: 26
0
Ответов: 262
Рейтинг: 6
#12: 2009-08-25 16:42:12 ЛС | профиль | цитата
Dilma, ок, я не правильно понял -- другой вариант:
скажем, автор элемента MyPeoples пишет


#pas
unit HiMyPeoples;
...
Type
TPeoples=record
Name: string;
age:integer;
Sity:string;
PostCode:integer;
Phone:string;
end;

THIMyPeoples = object
...
_event_onRead:THI_Event;
_prop_Peoples: array of TPeoples;
...
end;

Кодогенератор заполнит массив данными. Ок.
Но сам элемент должен уметь отдавать один рекордс из массива. соответственно вопрос - как?
hi_onEvent_(_event_onRead,_prop_Peoples[1]); ???
компилятор ругнется, на то что у него нет такой "реинкарнации" _hi_onEvent. Вот здесь я и застрял
карма: 0

0
Администрация
Ответов: 15294
Рейтинг: 1518
#13: 2009-08-25 16:51:41 ЛС | профиль | цитата
Chesh писал(а):
компилятор ругнется, на то что у него нет такой "реинкарнации" _hi_onEvent. Вот здесь я и застрял

отдаем не record, а набор типа МТ

#pas
hi_onEvent_(_event_onRead, CreateMTPeople(_data_Peoples[1]));
где CreateMTPeople() - функция, которая создает стандартный МТ с 5 звеньями в типе TData. Это далекий от идеала вариант, но его достаточно легко реализовать уже сегодня без вмешательства в архитектуру пакета.
карма: 26
0
Ответов: 262
Рейтинг: 6
#14: 2009-08-25 17:12:00 ЛС | профиль | цитата
Dilma, хмм... получается некий "разрыв технологий". Тогда универсальному массиву из начала топика и нет смысла знать о существовании records-ов. достаточно просто уметь делать тоже, что делает сейчас MT_MTArray, т.е. копировать МТ поток.

[size=-2]------ Добавлено в 17:12
Тогда проще представить Records как матрицу: столбцы - поля, строки массив.
Соответственно - от универсального массива можно перейти к универсальной матрице-рекордсу с типизируемыми столбцами. И напоследок подумать об универсальном Memory. В результате может получиться технология, которая тремя элементами заменит полтора десятка существующих, к тому же ядро у нее будет одно. Это процедуры из ShareDT.pas (конечно в доработанном виде)
карма: 0

0
Администрация
Ответов: 15294
Рейтинг: 1518
#15: 2009-08-25 17:22:43 ЛС | профиль | цитата
к рекорду заманчиво будет вернуться тогда, когда можно будет реализовать в среде механизм, при котором элемент Record будучи подключенным к потоку автоматически создаст точки в соответствии с именами полей рекорда и позволит через них писать или читать данные. Но опять таки же - только в пакете на базе FTCG.
карма: 26
0
15
Сообщение
...
Прикрепленные файлы
(файлы не залиты)