forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   2D-программирование (http://forum.boolean.name/forumdisplay.php?f=109)
-   -   Где описан EachIn ? и как написать свой ? :) (http://forum.boolean.name/showthread.php?t=4383)

jimon 08.09.2007 23:15

Где описан EachIn ? и как написать свой ? :)
 
ну собсно в LinkedList есть :
Код:

Rem
BBDoc: Enumerator Object use by TList in order to implement Eachin support.
End Rem
Type TListEnum

        Field _link:TLink

        Method HasNext()
                Return _link._value<>_link
        End Method

        Method NextObject:Object()
                Local value:Object=_link._value
                Assert value<>_link
                _link=_link._succ
                Return value
        End Method

End Type

в Blitz.Mod есть ключевое слово EachIn ...
а где описание етой функции ?!
или ето типо встроенное в транслятор ? :(

в общем есть куча (>50 екземпляров) такого кода :
Код:

For local p:Blablabla = EachIn Bla_1
...
Next

а надо зделать вот так :
Код:

For local a:Blabla = EachIn Bla_2
For local p:Blablabla = EachIn a
...
Next
Next

смысл всего остального не меняется ...
дело в другом ... как ето поменять без особого изврата ?
потому что тупо вставить второй цикл ето изврат :)

я так понимаю что EachIn разворачивается в While - Wend ... :mda:
(ето исходя из того как щетчик для связаного списка зделан)

dimanche13 09.09.2007 00:32

Re: Где описан EachIn ? и как написать свой ? :)
 
Код:

Link:TLink = MyList.FirstLink()
while Link
    TMyObj(Link.Value()).Method()
    Link = Link.NextLink()
wend

можно и так. Если я правильно понял вопрос)))

jimon 09.09.2007 01:06

Re: Где описан EachIn ? и как написать свой ? :)
 
dimanche13

главный вопрос :
Цитата:

как ето поменять без особого изврата ?
я предпологаю написать замену EachIn
или тупо тогда уж два цикла писать 50 раз ...

твой способ ваще не катит в принципе ... :)

johnk 09.09.2007 05:16

Re: Где описан EachIn ? и как написать свой ? :)
 
1. а где описание етой функции ?!
2. или ето типо встроенное в транслятор ?

У меня сейчас БМакса нема, так что попробуй BRL.Blitz посмотреть.
Если нету, то пункт 2, получается, что да :)
:)

dimanche13 09.09.2007 12:07

Re: Где описан EachIn ? и как написать свой ? :)
 
jimon я тебе показал как пройти по списку БЕЗ eachin. Причем заменив пару строк, можно пройти список в обратном порядке от последнего к первому, что в eachin нельзя сделать. Так почему же мой способ не катит?
Ладно, пжлста, переведи список в массив объектов и крути там по индексам. Я вот тока не понимаю, зачем ты хочешь переделать что и так работает? Причем, как подтверждают многие тесты, и твой в том числе, что eachin работает очень шустро. Зачем тебе этот изврат?
И еще вопрос, зачем вложенные циклы обхода листов? Думаю можно организовать программу как-то по-другому.

jimon 09.09.2007 12:18

Re: Где описан EachIn ? и как написать свой ? :)
 
dimanche13
тебе вечно надо что-то доказывать ... ну пожалуйста прочитай еще раз 10 мой первый пост :)

теперь обьясню
в TCreation есть CreationObjects:TList
через 3 месяца появляется TCreationGroup
и в TCreation появляется CreationGroups:TList
в TCreationGroup есть Objects:TList

если сложить все Objects из TCreationGroup то получим обьекты в CreationObjects:TList
тоесть двойное полное дублирование всех ссылок ... тоесть
памяти в два раза больше надо ...

надо убрать CreationObjects малой кровью
дело в том что он используется раз 50-60 в куче файлов

JohnK
видимо так и есть

dimanche13 09.09.2007 12:26

Re: Где описан EachIn ? и как написать свой ? :)
 
перечитал: "в Blitz.Mod есть ключевое слово EachIn..." - в первом посте. Ты сам говоришь ,что это ключевое слово! А ключевые слова как я знаю менять нельзя. замени for или local к примеру. Доказывать мне ничего не надо. Я сам могу доказать тебе, что захочу. Я лишь хочу тебе помочь в меру своих сил и возможностей. А насчет примера, то у тебя программа организована не так как тебе надо. Вывод: реорганизация.

elmortem 10.09.2007 00:41

Re: Где описан EachIn ? и как написать свой ? :)
 
Эх... Зачем вы всё время ругаетесь?.. ):

jimon, можешь поподробнее рассказать, зачем тебе нужно то, что нужно? Я малость запутался в... (:
Может действительно со структурой косяк и нужен рефакторинг кода?

jimon 10.09.2007 00:54

Re: Где описан EachIn ? и как написать свой ? :)
 
elmortem
нужен как раз етот рефракторинг кода, только малой кровью
собсно надо оптимальным путем засунуть два цикла в один
лан забью на ето дело и буду писать два цикла :)

elmortem 10.09.2007 11:57

Re: Где описан EachIn ? и как написать свой ? :)
 
Вполне возможно, что и не нужно вовсе убирать CreationObjects. Тем более, если удобнее его использовать. К тому же подозреваю, что 2 eachin работают в 2 раза медленнее, чем 1 eachin. ^__^
Просто при удалении объякта нжно будет учесть, что у тебя 2 перекрёстные ссылки хранятся.
По крайней мере мне показалось, что это не критично. К тому же ссылка на объект - не сам объект и много памяти не отожрёт, а скорость обработки будет выше.
Для какого-то проекта я делал подобным же образом специально...

dimanche13 10.09.2007 14:58

Re: Где описан EachIn ? и как написать свой ? :)
 
elmortem с чего ты взял что мы ругаемся? Я бы назвал это бурной беседой. Просто меня несколько напрягли слова jimonа "тебе вечно надо что-то доказывать" хотя в 16 лет я был таким же и мало кого уважал))) А jimonа я уважаю как прогера, сам пользовался его программой склейки PNG картинок. За что ему спасибо. В свою очередь хочу напомнить что я одним из первых откликнулся на его тему о названии игры и первым предложил использовать в названии слово Аква. А целью этого оффтопа являлось высказать простую фразу: надо уважать других)))
С уважением, dimanche13.

jimon 10.09.2007 15:46

Re: Где описан EachIn ? и как написать свой ? :)
 
dimanche13, elmortem
никто уже не ругается :) думаю все поняли друг друга

в общем убрать CreationObjects я хотел только потому что оно жрет много памяти ...
не то что много ... а в два раза больше :)
когда внутрений менеджер показывает ~2метра ... меня ето пугает
но так подумал что слишком проблематично его убрать
лан пусть будет ети два метра ... ниче страшного

если заоптимизировать менеджер ресурсов
то общая память будет в районе 60 метров
а так щас игра занимает в оперативке все 120 :(
( из которых 60 метров правда всего две картинки :-) )

в общем вопрос закрыт :)

elmortem 10.09.2007 16:05

Re: Где описан EachIn ? и как написать свой ? :)
 
Т.е. у тебя около 2 миллионов объектов чтоль? Не верю. (:
Ссылка - она же 4 байта всего. Или ты имел в виду, что 2 метра занимают вообще все объекты?

jimon 10.09.2007 16:52

Re: Где описан EachIn ? и как написать свой ? :)
 
elmortem
угу, говорю же что 2 метра показывает внутрений менеджер памяти бмакса :)

щас занимаюсь с динамической загрузкой\выгрузкой ресурсов :)


Часовой пояс GMT +4, время: 07:38.

vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot