IPB
ЛогинПароль:

> TList, FP
compiler
сообщение 14.07.2007 20:22
Сообщение #21


Человек
*****

Группа: Пользователи
Сообщений: 1 050
Пол: Мужской
Реальное имя: Станислав

Репутация: -  3  +


Добрый день
Существует ли список в FP, как встроенный тип?
говорят что да но найти о нем в руководстве не могу ни слова sad.gif


--------------------
Спасибо!
Удачи!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов
volvo
сообщение 17.07.2007 15:50
Сообщение #22


Гость






С пониманием природы первого указателя у тебя проблема...
Цитата
получаем 2 аргумента первый указатель на процедуру, второй -- не ясно что...
С чего бы это? Смотри, что написано:

Цитата(rtl.pdf)
2.42.21 TFPList.ForEachCall
Synopsis: Call a procedure or method for each pointer in the list.
Declaration: procedure ForEachCall(proc2call: TListCallback;arg: pointer)
procedure ForEachCall(proc2call: TListStaticCallback;arg: pointer)
Visibility: public
Description: ForEachCall iterates over all pointers in the list and calls proc2call, passing it the pointer and the additional arg data pointer. Proc2Call can be a method or a static procedure.

То есть, первый аргумент - это сам указатель, хранящийся в списке (над элементом, на который он указывает, надо произвести какие-то действия), а второй - дополнительный указатель.

Второй ЗДЕСЬ не используется.

Сообщение отредактировано: volvo - 17.07.2007 15:52
 К началу страницы 
+ Ответить 
compiler
сообщение 17.07.2007 16:45
Сообщение #23


Человек
*****

Группа: Пользователи
Сообщений: 1 050
Пол: Мужской
Реальное имя: Станислав

Репутация: -  3  +


Цитата(volvo @ 17.07.2007 15:50) *
С чего бы это?
туманно все как-то...

посмотрев исходники кажеться понял зачем nil -- просто так..

my_list.foreachcall(@incr, nil);
//вызов процедуры

procedure incr(p: pointer; arg: pointer); // И здесь тоже ...
//реализация процедуры
begin
with PT(p)^ do begin
inc(X); inc(Y);
end;
end;


procedure TFPList.ForEachCall(proc2call:TListCallback;arg:pointer);
//реализация метода(исходники)
var
i : integer;
p : pointer;
begin
For I:=0 To Count-1 Do
begin
p:=FList^[i];
if assigned(p) then
proc2call(p,arg);
end;
end;

type TListCallback = procedure(
//реализация типа (документация)
data: pointer; //Data pointer from the list.
arg: pointer // Parameter passed to the ForEachCall call. /не нужный параметр?
) of object;

итак мы вызываем метод(в качестве первого параметра используем указатель(почему?) на процедуруа второй оставляем пустым), процедура возвразщает 2 указателя, которые преобразуются в некий TListCallback. Тоесть мы для вызова ForEachCall используем два лишних указателя .Так?

Сообщение отредактировано: compiler - 17.07.2007 17:02


--------------------
Спасибо!
Удачи!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
hardcase
сообщение 17.07.2007 17:07
Сообщение #24


code warrior
****

Группа: Пользователи
Сообщений: 484
Пол: Мужской
Реальное имя: Славен

Репутация: -  8  +


TListCallback - это процедура которую будет вызывать ForEachCall для КАЖДОГО элемента списка и передавать ей этот элемент первым параметром.
Втрой указаталь - arg нужен для того, чтобы передавать в TListCallback некие дополнительные параметры, например, если мы хотим отфильтровать список, в качестве arg будет выстпуать новый список, в котором будут аккумулироваться разультаты фильтрации.


--------------------
ИзВ ин ИтЕ зА нЕ рОв НЫй П оч ЕРк
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
compiler
сообщение 17.07.2007 17:15
Сообщение #25


Человек
*****

Группа: Пользователи
Сообщений: 1 050
Пол: Мужской
Реальное имя: Станислав

Репутация: -  3  +


хорошо, но все же почему мы вызываем(@incr, nil), а не (incr, nil)?


--------------------
Спасибо!
Удачи!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
compiler
сообщение 18.07.2007 18:45
Сообщение #26


Человек
*****

Группа: Пользователи
Сообщений: 1 050
Пол: Мужской
Реальное имя: Станислав

Репутация: -  3  +


вопрос по добавлению нового элемент есть метод Add.
Цитата
public function TFPList.Add(Item: Pointer):Integer;
Description
Add adds a new pointer to the list after the last pointer (i.e. at position Count, thus increasing the item count with 1. If the list is at full capacity, the capacity of the list is expanded, using the Grow method.

но как что ему передавать не что он возвращает не указано... так что это за параметры?

Сообщение отредактировано: compiler - 18.07.2007 18:47


--------------------
Спасибо!
Удачи!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

Сообщений в этой теме
compiler   TList   14.07.2007 20:22
volvo   Не совсем "встроенный". Описан в модуле ...   14.07.2007 20:28
compiler   спасибо... а что такое notification mechanism? [...   14.07.2007 20:32
volvo   Документация утверждает ,что у TList-а есть механи...   14.07.2007 20:52
compiler   мда... ихний список совсем не список... мне совсем...   15.07.2007 18:08
volvo   А может лучше ты расскажешь, что хочешь получить? ...   15.07.2007 18:37
compiler   А может лучше ты расскажешь, что хочешь получить? ...   15.07.2007 18:48
volvo   Все, про TList можешь забыть - реализуй список сам...   15.07.2007 19:58
compiler   Все, про TList можешь забыть - реализуй список са...   15.07.2007 20:09
hardcase   просто как работать с классическим списком я чит...   17.07.2007 1:06
compiler   А простым примером по использовыванию никто не под...   17.07.2007 13:12
volvo   Так, например: uses classes; type PT = ^T; T...   17.07.2007 14:08
compiler   volvo, а в каком режиме ты компилировал? мой лог e...   17.07.2007 14:25
volvo   У меня по умолчанию выставлен {$mode delphi}   17.07.2007 14:56
compiler   У меня по умолчанию выставлен {$mode delphi}а...   17.07.2007 15:05
volvo   Для диалекта - надо добавить кое-что в заголовки п...   17.07.2007 15:25
compiler   Для диалекта - надо добавить кое-что в заголовки п...   17.07.2007 15:39
volvo   С пониманием природы первого указателя у тебя проб...   17.07.2007 15:50
compiler   С чего бы это? туманно все как-то... посмотрев ис...   17.07.2007 16:45
hardcase   TListCallback - это процедура которую будет вызыва...   17.07.2007 17:07
compiler   хорошо, но все же почему мы вызываем(@incr, nil), ...   17.07.2007 17:15
compiler   вопрос по добавлению нового элемент есть метод Add...   18.07.2007 18:45
volvo   Во-первых, в моем примере используется не TListCal...   17.07.2007 17:12
volvo   На входе - тот самый указатель (на данные), которы...   18.07.2007 19:10
compiler   хорошо, вроде разобрались... спасибо.   18.07.2007 19:26
compiler   есть задача а не получается :) существует некий по...   20.07.2007 14:49
volvo   Присоедини программу полностью, чтоб ее можно было...   20.07.2007 14:54
compiler   ***   20.07.2007 15:10
volvo   Ну, допустим, для того, чтобы сохранить значение н...   20.07.2007 15:26
compiler   Ну, допустим, для того, чтобы сохранить значение н...   20.07.2007 15:31
volvo   Я же написал: , а значит, я имел в виду описание т...   20.07.2007 16:25
compiler   Я же написал , а значит, я имел в виду описание ти...   20.07.2007 16:34
volvo   Да нельзя делать это с переменной! Нужно приво...   20.07.2007 16:39
compiler   спасибо теперь эта часть( :) ) работает... Хотя э...   20.07.2007 17:55
volvo   Вот что мне непонятно - это твое нежелание использ...   20.07.2007 18:08
compiler   одни вопросы :) Вот что мне непонятно - это твое ...   20.07.2007 18:27
volvo   Мало ли, как тебе удобнее... Ты мало того, что дел...   20.07.2007 19:45
compiler   Не забывай, что ты работаешь с Class Methods, так...   20.07.2007 19:56
hardcase   кто такой VMT? Virtual methods table - таблица ме...   25.07.2007 15:30


 Ответить  Открыть новую тему 
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0

 



- Текстовая версия 21.07.2024 19:29
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"