Извините, ничего не найдено.

Не расстраивайся! Лучше выпей чайку!
Регистрация
Справка
Календарь

Вернуться   forum.boolean.name > Программирование игр для компьютеров > Blitz3D > FAQ

FAQ Туториалы и часто задаваемые вопросы

Ответ
 
Опции темы
Старый 12.02.2009, 11:38   #1
impersonalis
Зануда с интернетом
 
Аватар для impersonalis
 
Регистрация: 04.09.2005
Сообщений: 14,014
Написано 6,798 полезных сообщений
(для 20,935 пользователей)
К вопросу об указателях

Хотелось бы пролить свет на следующий вопрос. Я напишу - а вы скажите, что не правильно. Я весьма грубо работал с терминологией, т.к. меня интересовали лишь общие детали реализации (поридираться я и сам могу)

В Blitz-е все экземпляры типов создаются всегда только с максимальной областью видимости - иными словами, глобально для всей программы.
Таким образом каждая конструкция типа
MyElem.MyType
описывает указатель на элемент типа MyType.
В свою очередь, MyElem может принять либо адрес существующего экземпляра типа:
Local XElem.MyType=New MyType
MyElem=XElem
или вновь созданного оператором New
MyElem=New MyType
К указателю может быть применена операция (int), т.е. тайп-каст к целому числу (хотя на самом деле, ничего общего нет - это все-голишь способ имперсонализации\сериализации указателя, а не приведения типа данных) путём применения к нему недокументированной команды Handle:
x=Handle(MyElem)
Обратная операция осуществялется констуркцией с использованием недокументированной команды Object:
MyElem=Object.MyType(x)
Все экземпляры типа автоматически добавляются в единый (для данного типа) двунаправленный список элементов.

Значение в MyElem (х3 как его получить - но тем не менее это же число) насколько я понимаю - есть физический адрес в ОЗУ, в то время как Handle (дескриптор) является некоей биекцией ставящей каждому казтелю данного типа в соотвествие некторое, слабопрогнозируемео значение.
__________________
http://nabatchikov.com
Мир нужно делать лучше и чище. Иначе, зачем мы живем? tormoz
А я растила сына на преданьях
о принцах, троллях, потайных свиданьях,
погонях, похищениях невест.
Да кто же знал, что сказка душу съест?
(Offline)
 
Ответить с цитированием
Старый 12.02.2009, 11:50   #2
HolyDel
 
Регистрация: 26.09.2006
Сообщений: 6,035
Написано 1,474 полезных сообщений
(для 2,707 пользователей)
Ответ: К вопросу об указателях

можно уточнить, что сопоставление handle и объекта происходит во время первого вызова handle, а не создания объекта, как можно было бы подумать.
(Offline)
 
Ответить с цитированием
Эти 3 пользователя(ей) сказали Спасибо HolyDel за это полезное сообщение:
Dream (12.02.2009), impersonalis (12.02.2009), Mr_F_ (01.09.2009)
Старый 12.02.2009, 11:54   #3
SBJoker
Злобный Админ
 
Аватар для SBJoker
 
Регистрация: 04.09.2005
Сообщений: 5,926
Написано 3,415 полезных сообщений
(для 9,330 пользователей)
Ответ: К вопросу об указателях

Это подтверждает мою догадку что handle это хеш-функция.
__________________
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
impersonalis (12.02.2009)
Старый 12.02.2009, 13:10   #4
jimon
 
Сообщений: n/a
Ответ: К вопросу об указателях

Может там есть какой-то глобальный список и туда помещаются указатели на связаный список типа при вызове handle ?
а сам handle возращает индекс из этого глобального списка (грубо говоря указатель на узел в связаном списке)

я так делал (уже не помню где) чтобы передавать параметры в скриптовый движок
 
Ответить с цитированием
Старый 12.02.2009, 14:37   #5
impersonalis
Зануда с интернетом
 
Аватар для impersonalis
 
Регистрация: 04.09.2005
Сообщений: 14,014
Написано 6,798 полезных сообщений
(для 20,935 пользователей)
Ответ: К вопросу об указателях

Причём получается - что работать с экземпляром можно только через указатель.
__________________
http://nabatchikov.com
Мир нужно делать лучше и чище. Иначе, зачем мы живем? tormoz
А я растила сына на преданьях
о принцах, троллях, потайных свиданьях,
погонях, похищениях невест.
Да кто же знал, что сказка душу съест?
(Offline)
 
Ответить с цитированием
Старый 12.02.2009, 14:55   #6
Dream
быдло
 
Регистрация: 05.08.2007
Сообщений: 1,435
Написано 614 полезных сообщений
(для 1,489 пользователей)
Ответ: К вопросу об указателях

Type one
	Field x
End Type

Type two
	Field y
End Type

For i =1 To 5
	one.one=New one
	one\x=i
Next

For i=5 To 10
	two.two=New two
	two\y=i
Next


For one.one=Each one
	i=i+1
	Print Handle (one)
Next

For two.two=Each two
	i=i+1
	Print Handle (two)
Next

WaitKey()
Type one
	Field x
End Type

Type two
	Field y
End Type

For i =1 To 5
	one.one=New one
	one\x=i
Next

For i=5 To 10
	two.two=New two
	two\y=i
Next

two.two=First two
For one.one=Each one
	
	Print Handle (one)
	Print Handle (two)
	two=After (two)
Next

Print 
For two.two=Each two
	Print Handle(two)
Next

WaitKey()
вот сопстно подтверждение того что было сказано выше.
Хендл обьектом даётся по порядку его вызова, и сохраняются за елементом.
в первом случаем вызывались по порядку, сначало все елементы первого типа, потом все елементы второго типа. Хендлы шли по порядку.

во втором случае хендлы вызывались через один. зендлы идут попорядку
и чтобы убедится в утверждениях, вызываем ещё раз хендлы для второго списка и получаем числа через одно)
(Offline)
 
Ответить с цитированием
Эти 2 пользователя(ей) сказали Спасибо Dream за это полезное сообщение:
impersonalis (12.02.2009), tormoz (12.02.2009)
Старый 12.02.2009, 15:35   #7
HolyDel
 
Регистрация: 26.09.2006
Сообщений: 6,035
Написано 1,474 полезных сообщений
(для 2,707 пользователей)
Ответ: К вопросу об указателях

к слову, я тему посчет handle уже поднимал, но развития она не получила:
http://forum.boolean.name/showthread.php?t=3045
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
Dream (12.02.2009)
Старый 12.02.2009, 15:36   #8
Dream
быдло
 
Регистрация: 05.08.2007
Сообщений: 1,435
Написано 614 полезных сообщений
(для 1,489 пользователей)
Ответ: К вопросу об указателях

Хочу сказать что блиц странная вещь... мне кажется его придумали для завладением разумов рус программистов под видом удобного языка....
(Offline)
 
Ответить с цитированием
Старый 12.02.2009, 16:50   #9
IGR
Blitz's Shame !!
 
Регистрация: 31.03.2007
Сообщений: 3,639
Написано 832 полезных сообщений
(для 2,013 пользователей)
Ответ: К вопросу об указателях

Вот, тоже самое, только в квадратных скобочках
по идеи, по правилами переведения типов, не должно там быть этих скобочек, так что эту мутню\удобство придумали специально !!
Type one
	Field x
End Type

Type two
	Field y
End Type

For i =1 To 5
	one.one=New one
	one\x=i
Next

For i=5 To 10
	two.two=New two
	two\y=i
Next

For one.one=Each one
	Print Str (one)
Next

For one.one=Each one
	Print Handle (one)
Next

WaitKey()
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
Dream (12.02.2009)
Старый 12.02.2009, 18:01   #10
IGR
Blitz's Shame !!
 
Регистрация: 31.03.2007
Сообщений: 3,639
Написано 832 полезных сообщений
(для 2,013 пользователей)
Ответ: К вопросу об указателях

а еще при создании елемента типа резервируется 20 байт ??
; целый тип
Type TInteger
	Field x1%;24
End Type

; тип с запятой
Type TFloat
	Field x1#;24
End Type

; стороковий тип
Type TString
	Field x1$;24
End Type

; пустой тип
Type TVoid
End Type

For counter = 1 To 5
	i.TInteger=New TInteger
Next

For counter = 1 To 5
	f.TFloat = New TFloat
Next

For counter  = 1 To 5
	s.TString = New TString
Next

For counter = 1 To 5
	v.TVoid = New TVoid
Next

val = 0

Print "TInteger: "
For i.TInteger=Each TInteger
	Print Int(i)
Next

Print "TFloat: "
For f.TFloat=Each TFloat
	Print Int(f)
Next

Print "TString: "
For s.TString=Each TString
	Print Int(s)
Next

Print "TVoid: "
For v.TVoid=Each TVoid
	Print Int(v)
Next

WaitKey()
(Offline)
 
Ответить с цитированием
Эти 2 пользователя(ей) сказали Спасибо IGR за это полезное сообщение:
Dream (12.02.2009), impersonalis (12.02.2009)
Старый 12.02.2009, 18:37   #11
moka
.
 
Регистрация: 05.08.2006
Сообщений: 10,429
Написано 3,454 полезных сообщений
(для 6,863 пользователей)
Ответ: К вопросу об указателях

Больше кажется что было это сделано чисто для соблюдения типов переменных в синтаксисе, по сути, почему тогда не назначают численное значение эллементу сразу - компилятор тогда будет переводить это как числа, и такая структура:
123414 = New 3434
Будет тупить?
Поэтому тип данных для компилятора, назначаемый эллементу другой - чтобы лучше отличить?
Иль это тупые догадки?

Вообще в B3D очень примитивная работа с недо-классами. Когда берёшь BM и постигаешь Классы в нём, с их ООП, то дорога обратно, можно сказать, вами намеренно закрыта. Анти рекламка Хехе.
(Offline)
 
Ответить с цитированием
Эти 2 пользователя(ей) сказали Спасибо moka за это полезное сообщение:
Dream (12.02.2009), SBJoker (12.02.2009)
Старый 12.02.2009, 21:30   #12
impersonalis
Зануда с интернетом
 
Аватар для impersonalis
 
Регистрация: 04.09.2005
Сообщений: 14,014
Написано 6,798 полезных сообщений
(для 20,935 пользователей)
Ответ: К вопросу об указателях

2IGR
вы невнимательны:
www.boolean.name > Программирование игр для компьютеров > Blitz3D > Переводы > Перевод хелпа - Type
Хитрая уловка для целей отладки или для сохранения данных от элементов типов в файл, заключается в использовании команды Str$(). Print Str$() будет выводить значения каждого поля элемента типа, по очереди, отделяя их запятыми и заключая в квадратные скобки, например [15,42, »Fluffy»,500].
2MoKa
Вообще в B3D очень примитивная работа с недо-классами. Когда берёшь BM и постигаешь Классы в нём, с их ООП, то дорога обратно, можно сказать, вами намеренно закрыта. Анти рекламка Хехе.
При всём уважении и отношении как к блестящему дизайнеру и моделлеру, всё же: это лишнее в даннной теме

2DimasSup
получается простраснтво хендлов едино для разных типов объектов?

Вот, IGR, юзает тайпкаст к целому числу:
Int(s)
результат физический адрес? это достоверно?
__________________
http://nabatchikov.com
Мир нужно делать лучше и чище. Иначе, зачем мы живем? tormoz
А я растила сына на преданьях
о принцах, троллях, потайных свиданьях,
погонях, похищениях невест.
Да кто же знал, что сказка душу съест?
(Offline)
 
Ответить с цитированием
Эти 4 пользователя(ей) сказали Спасибо impersonalis за это полезное сообщение:
Dream (12.02.2009), HolyDel (12.02.2009), moka (12.02.2009), Tadeus (12.02.2009)
Старый 12.02.2009, 22:48   #13
Dream
быдло
 
Регистрация: 05.08.2007
Сообщений: 1,435
Написано 614 полезных сообщений
(для 1,489 пользователей)
Ответ: К вопросу об указателях

получается простраснтво хендлов едино для разных типов объектов?
Да, для всех обьектов всех типов, хендлы идут в последовательности вызова Handle для них.
Вот, IGR, юзает тайпкаст к целому числу:
Int(s)
результат физический адрес? это достоверно?
Type TInteger
	Field x1%;24
End Type
For counter = 1 To 5
CreateImage(150,10)
	i.TInteger=New TInteger
Next
Print "TInteger: "
For i.TInteger=Each TInteger
	Print Int(i)
Next
как видим, разница в числах всёравно 24, даже если создавать имаги между созданиями новых экзепляров, вывод, скорее всего это указатель на указатель,и хранятся в отдельной области памьяти
(Offline)
 
Ответить с цитированием
Эти 2 пользователя(ей) сказали Спасибо Dream за это полезное сообщение:
impersonalis (12.02.2009), SBJoker (13.02.2009)
Старый 31.08.2009, 03:16   #14
Dream
быдло
 
Регистрация: 05.08.2007
Сообщений: 1,435
Написано 614 полезных сообщений
(для 1,489 пользователей)
Ответ: К вопросу об указателях

ещё один интересный факт...
Type TInteger
	Field x1$;24
	Field x2%
End Type
Type TInteger2
	Field x1%;24
	Field x2%
	Field x3#
End Type
Type TInteger3
	Field x1%;24
	Field x2%
	Field x3$
	Field x4#
	
End Type
For counter = 1 To 5
CreateImage(150,10)
	i3.TInteger3=New TInteger3;порядок обьявления поменяйте 
           i2.TInteger2=New TInteger2;пару раз для того чтобы 
	i.TInteger=New TInteger;понять чтоя  хочу показать
	i3\x3="dasdasdasd"
	
Next
Print ""
Print "Type1 "
Print " "
For i.TInteger=Each TInteger

	Print Int (i)
Next
Print ""
Print "Type2 "
Print ""
For i2.TInteger2=Each TInteger2

	Print Int (i2)
Next
Print ""
Print "Type3 "
Print ""
For i3.TInteger3=Each TInteger3

	Print Int (i3)
Next
ПС. видим вот что - (как уже замечалось выше)20- поидее указатель(или что там) на сам обьект структы + 4 на каждое поле в типе в независимости от типа
ПС2. может кто уже и сам это сделал просто хочу чтобы это осталось в этом топике, для полного раскрытия темы

Последний раз редактировалось Dream, 31.08.2009 в 03:27.
(Offline)
 
Ответить с цитированием
Ответ


Опции темы

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
К вопросу о сжатии черно-белого изображения Tronix Алгоритмика 12 11.11.2009 14:10
Еще раз к вопросу о вреде MMORPG... Chrono Syndrome Юмор 7 20.12.2007 19:49
К вопросу автоматизации impersonalis Болтовня 10 19.11.2006 22:53


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


vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot
Style crйe par Allan - vBulletin-Ressources.com