Foro especializado en Warcraft III y su editor
 
BuscarEntrar al ChatboxPortal del foroÍndiceSpellsRegistrarseConectarse
Eventos Actuales
¡ Bienvenido Invitado !

Editar Perfil

Tus temas
Tus Mensajes ()

Enlaces rápidos








Comparte
 

 [Snippet] Pointer

Ver el tema anterior Ver el tema siguiente Ir abajo 
AutorMensaje
Ruke

Ruke


Barra de Salud : Su salud está al 100% - Este usuario no ha recibido infracciones

Mensajes Mensajes : 298
Reputación Reputación : 64
Monedas de oro : 1678
Monedas de Platino : 0 [Snippet] Pointer Empty

Inventario :
[Snippet] Pointer Empysl10 [Snippet] Pointer Empysl10 [Snippet] Pointer Empysl10
[Snippet] Pointer Empysl10 [Snippet] Pointer Empysl10 [Snippet] Pointer Empysl10

[Snippet] Pointer Empty
Mensaje(#) Tema: [Snippet] Pointer [Snippet] Pointer Clock10Sáb Ene 11, 2014 8:27 am

[jass]library Pointer

    //! textmacro Type takes NAME, TYPE
    struct $NAME$
        $TYPE$ value
    endstruct
    //! endtextmacro
    
    //! runtextmacro Type("Integer", "integer")
    //! runtextmacro Type("String", "string")
    //! runtextmacro Type("Real", "real")
    //! runtextmacro Type("Handle", "handle")
    //! runtextmacro Type("Boolean", "boolean")
    
endlibrary[/jass]

¿Qué es esto?
Un ejemplo:

Si necesitamos lo siguiente

[jass]local integer i = 5
local integer n = i

set n = 6

if ( i == 6 ) then
    call BJDebugMsg("bien!")
endif[/jass]

No podemos hacerlo, porque [ljass]i[/ljass] continua con el mismo valor (5). El único que ha cambiado de valor es [ljass]n[/ljass].
Pero si quisiéramos que este ejemplo realmente funcione, podemos usar semi-punteros.

[jass]local Integer i = Integer.create()
local Integer n = i

set n.value = 6

if ( i.value == 6 ) then
    call BJDebugMsg("bien!")
endif[/jass]

Un poco mas de trabajo, ¡pero funciona!.

Nota
En Handler, se puede guardar todo a excepción de integer, real, string, boolean y code.

¡ATENCIÓN!
Mucho cuidado a la hora de usar handlers, puesto que si no se manipulan con cuidado podrán generar leaks.

Ejemplo que genera leak:
[jass]local Handle unidad1 = Handle.create()
local Handle unidad2 = unidad1

set unidad1.value = CreateUnit(...)
// unidad2.value == unidad1.value

set unidad2.value = CreateUnit(...)
// unidad2.value == unidad1.value (reemplazamos el valor de unidad1, lo que significa leak!)[/jass]

Para evitar leak en el ejemplo anterior, deben destruir el handle ([ljass]RemoveUnit(...)[/ljass]).

Saludos.
Volver arriba Ir abajo
io
Aprendiz
io


Barra de Salud : Su salud está al 100% - Este usuario no ha recibido infracciones

Mensajes Mensajes : 24
Reputación Reputación : 5
Monedas de oro : 314
Monedas de Platino : 0 [Snippet] Pointer Empty

Inventario :
[Snippet] Pointer Empysl10 [Snippet] Pointer Empysl10 [Snippet] Pointer Empysl10
[Snippet] Pointer Empysl10 [Snippet] Pointer Empysl10 [Snippet] Pointer Empysl10

[Snippet] Pointer Empty
Mensaje(#) Tema: Re: [Snippet] Pointer [Snippet] Pointer Clock10Sáb Ene 11, 2014 2:23 pm

Punteros en vJass ... nunca se me hubiera ocurrido Very Happy ...
Volver arriba Ir abajo
 

[Snippet] Pointer

Ver el tema anterior Ver el tema siguiente Volver arriba 
Página 1 de 1.

Permisos de este foro:No puedes responder a temas en este foro.
Warcraft III - WorldEditor :: Aportes :: Librerías-