Вверх ↑
Этот топик читают: Гость
Ответов: 2059
Рейтинг: 131
#1: 2015-03-29 18:48:14 ЛС | профиль | цитата
Посоветуйте, как лучше поступить. Возникла необходимость в компоненте Tree ( и как следствие List - не StrList).
Нужно формировать небольшие деревья в памяти - порядка 1000 шт. и более.
Конечно запись и чтение оных изв файл. - вопросов не возникает - обход дерева и т.д.
Глубина дерева меньше 10, в основном 3 - 8 подчинённых узлов - думаю, что это необязательный параметр.
Каждый узел обязательно хранит несколько данных (указателей на них), помимо указателей на узлы и названия.
Механика кортежей не удобна, во всяком случае для данной задачи. Всё меняется динамически.
Не хочется вводить лишние библиотеки, может и KOL подойдёт, или другие варианты посоветуйте.
Вопрос:
1. Как в KOL TTree приклеить данные к узлу (указатель на них)?
Приведите какой то пример - doAddData.
2 Как грамотно через TData передать pointer.
Допустим:
var tp:pointer;
t:integer;
...
t:=integer(tp); Так?

Собственно для чего - [url]http://geektimes.ru/post/79882/ [/url]
[url]http://habrahabr.ru/post/148124/ [/url]
[url] http://habrahabr.ru/post/229403/ [/url]
[url] http://www.solarix.ru/for_developers/docs/syntax_analyzer.shtml [/url]
Грамматический движок уже сделал (русский, английский), но на StrList подобных списках.
Но как говорил один из героев О.Генри "Вождь Краснокожих" - «Песок — плохая замена овсу!».
P.S.
Кому интересно, могу выложить, но там масса не стандартных компонентов. И вообще - это отдельная тема.
карма: 6

1
Голосовали:Minkovsky
vip
#1.1контекстная реклама от партнеров
Ответов: 963
Рейтинг: 12
#2: 2015-05-23 21:08:16 ЛС | профиль | цитата
Что-то похожее я делал в Лазарусе на днях гляну есть ли там что-то полезное ...
Хотя если дерево нужно сугубо для данных я бы использовал самодельные связные списки ..
(Кода-то на еще на турбо паскале делал "гиганские коллекции" именно на их основе )




Так?
...

Вообще то так
var tp:pointer;
t:integer;
...
А лучше например так
t:^integer;
...
var
T:^Integer ;

begin
New(T);// выделить память
T^:=1;
ShowMessage(intToStr(T^));
Dispose (T); // освободить память ..
end;
Просто Т будет pointer, а T^ Integer ...
....
var tp:pointer;
t:integer;
...
а тут действительно нужно приведение типов
t:=integer(tp^)
Но нужно позаботится о том что бы указатель не указывал в "мировое пространство "

Но вообще лучше бы больше конкретики ... (Возможно я не понял контекст )
карма: 0

0
Ответов: 2059
Рейтинг: 131
#3: 2015-05-24 14:05:25 ЛС | профиль | цитата
AlexKir
(Возможно я не понял контекст )

Я плохо объяснил.
Как через точку передать указатель с меньшем количеством преобразований в передающем и принимающем квадратике.
Но вообще лучше бы больше конкретики

Позже выложу 2 компонента для критики - List и Tree.
Сейчас времени нет и зуб болит.
карма: 6

0
Ответов: 35
Рейтинг: -2
#4: 2015-06-01 01:27:41 ЛС | профиль | цитата
не по зубам тебе
карма: 0
Лень двигатель прогресса.
0
Ответов: 963
Рейтинг: 12
#5: 2015-06-02 03:33:03 ЛС | профиль | цитата
AlexKir
(Возможно я не понял контекст )

Я плохо объяснил.
Как через точку передать указатель с меньшем количеством преобразований в передающем и принимающем квадратике.


unit Share
....
##ToXXX
function ToString(const Data:TData) :string;
function ToInteger(const Data:TData) :THiInt;
function ToReal(const Data:TData) : real;
function ToStream(var Data:TData) : PStream;
function ToBitmap(var Data:TData) : PBitmap;
function ToIcon(var Data:TData) : PIcon;
*function ToObject(var Data:TData) : pointer;
function ToFont(var Data:TData) : PFontRec;
function ToTypes(var Data:TData) : PType;

// ##_DoData
function _DoData(Value:THiInt): TData; overload;
function _DoData(Value:real) : TData; overload;
function _DoData(const Value:string) : TData; overload;
function _DoData(const Value:TData): TData; overload;
function _DoData(Value: PStream):TData; overload;
function _DoData(Value: PBitmap):TData; overload;
function _DoData(Value: PMatrix):TData; overload;
*function _DoData(Value: PType):TData; overload;

// ##CreateData
procedure dtData(var Data:TData; const Value:TData);
procedure dtNull(var Data:TData);
procedure dtInteger(var Data:TData; Value:integer);
procedure dtReal(var Data:TData; Value:real);
procedure dtString(var Data:TData; const Value:string);
procedure dtArray(var Data:TData; Value: PArray);
procedure dtMatrix(var Data:TData; Value: PMatrix);
procedure dtBitmap(var Data:TData; Value: PBitmap);
procedure dtStream(var Data:TData; Value: PStream);
procedure dtObject(var Data: TData; id:integer; Value: pointer);
procedure dtRect(var Data:TData; Value: pointer);
procedure dtIcon(var Data:TData; Value: PIcon);
procedure dtType(var Data:TData; Value: PType);



function _IsStr(const Data:TData):boolean;
function _IsInteger(const Data:TData):boolean;
function _IsFont(const Data:TData):boolean;
function _IsStream(const Data:TData):boolean;
function _IsBitmap(const Data:TData):boolean;
function _IsIcon(const Data:TData):boolean;
function _IsObject(const Data:TData; id:integer):boolean;
function _IsNull(const Data:TData):boolean;
function _IsBreak(const Data:TData):boolean;
function _IsTypes(const Data:TData):boolean;
function _IsType(const Data:TData):integer;

...
карма: 0

0
Ответов: 2059
Рейтинг: 131
#6: 2015-06-02 10:36:43 ЛС | профиль | цитата
Спасибо AlexKir.
Вечером займусь.

карма: 6

0
6
Сообщение
...
Прикрепленные файлы
(файлы не залиты)