![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Ломанные линии. Запись на диск... [D5, Win2k, WinXP]
Zilog © (2004-09-21 14:27:00)Нариосвал программку, позволяющую рисовать ломанные линии. (прокладывать маршруты). Алгоритм реализован следующим образом:
есть массив, который хранит начальные точки каждого из маршрутов.
при добавлении новой точки маршрута, динамически выдляется память под точку, которая хранит в себе состояние (связи) о предыдущей и (возможно) следующей точки.
type TMapLine = class
X,Y : integer;
Next : pointer; //следующая точка (nil если такой нет)
Prev : pointer; //предыдущая точка точка (nil если такой нет)
end;
Говоря попросту - по сути все маршруты (сломанные линии) раскиданы в памяти где попало.
Задача - как все данные скинуть на диск (ну и грузить обратно, в последствии). Подскажите варианты Pls.
Digitman (2004-09-21 15:16:00) [1]открываешь файл
двигаешься по списку, от первого эл-та до последнего
структуру TPoint очередного эл-та записываешь в открытый файл
закрываешь файл
какие сложности ?
Zilog (2004-09-21 15:07:00) [2]А если поставить вопрос по другому:
мне удобна та форма представления, которая есть сейчас.
Как в таком случае решить проблему записи на диск?
MBo (2004-09-21 15:05:00) [3]>Zilog © (21.09.04 14:59) [4]
Не TList, а его аналог, вместо указателей содержащий записи твоего типа - причем Next,Prev уже не понадобятся, и можно просто TPoint хранить.
Digitman (2004-09-21 15:05:00) [4]
> DiamondShark © (21.09.04 14:58) [3]
> Не надо массивы точек гонять с места на место. Только вставки/разрывы
> узлов
конечная производительность зависит от процентного соотношения числа операций вставок/удаления к числу операций выборок из списка
если список редко обновляется, но гораздо чаще используется для поиска/выборки, то смежное хранение записей будет ощутимо эффективней
Zilog (2004-09-21 15:03:00) [5]2 DiamondShark
я собственно так и делаю.
вопрос - как это записать на диск. и прочитать обратно.
Zilog (2004-09-21 14:59:00) [6]2Digitman MBo
А не могли бы вы пояснить, как использовать TList в моем случае?
а то я не очень понимаю...
DiamondShark (2004-09-21 14:58:00) [7]
> ЧЕМ опрадан выбор алгоритма хранения списка в виде несмежных
> (связанных ссылками) блоков ?
Например, удобно теоретико-множественные операции над объектами производить. Не надо массивы точек гонять с места на место. Только вставки/разрывы узлов.
Digitman (2004-09-21 14:42:00) [8]
> раскиданы в памяти где попало
а чем изначально не угодили объекты, реализующие то же самое, но в виде массивов ? Тот же TList, например ? ЧЕМ опрадан выбор алгоритма хранения списка в виде несмежных (связанных ссылками) блоков ?
MBo (2004-09-21 14:31:00) [9]Обыкновенный обход связанного списка.
Задача сохранения будет проще и быстрее, если хранить данные последовательно - в динамическом массиве или псевдосписке типа TList - массив сохраняется одной командой.