String_class

Started by Drumpi, April 08, 2011, 07:11:41 PM

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.

Drumpi

Hola a todos:

Pues nada, os subo una parte de mi último código que puede que os sea útil.
Son un par de ficheros de código Bennu que nos permite manejar listas de strings. Dado que no se pueden usar arrays de strings (ya sean estáticos o dinámicos) sin algún que otro problema, comprensible por la propia naturaleza cambiante de este tipo de dato, pues os ofrezco esta solución.

Aunque usa una lista enlazada, no os tendreis que pelear con punteros ni nada de eso (o casi, no puedo evitar la necesidad de pasar punteros a las funciones para modificar las listas). Os creais un puntero al nuevo tipo STRING_NODE, y luego sólo teneis que usar STRING_ADD para añadir o STRING_DELETE_N para borrar (o STRING_DELETE_ALL para borrarla entera).

Viene un fichero de ejemplo con el uso de diversas funciones, y algunos comentarios al principio de las funciones más complejas de entender. Lo siento, era de uso interno y no hice documentación, y ahora no tengo tanto tiempo como antes para hacerla, pero no creo que os resulte muy difícil de usar, si es que lo quereis.
Creo que se asemeja mucho al uso de listas de clases de Java, aunque no os lo puedo confirmar porque aun no he empezado a trabajar con ellas ^^U

Usos: pues si escribís textos en diversas líneas (para texto que se modifica, es decir, escrito con WRITE_STRING, STRING_GET_POINTER es vuestra salvación), o teneis que pasar un número indefinido de strings a una función, o simplemente quereis hacer una lista de nombres, os facilitará mucho la vida.

Espero que os sea útil.
Hala, como con 1001 procesos sólo va a 9 FPS, vamos a meterle 32 veces más, a ver si revienta.
(Drumpi epic moment)

SplinterGU

#1
acaBO de ver el codigo, no podes hacer esto de forma segura.

ya avise.
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

l1nk3rn3l


JaViS

buenas, no entendí el comentario de Splinter.

gracias :)
Working on Anarkade. A couch multiplayer 2D shooter.

Drumpi

Yo tampoco lo entendí, pero en su momento no pregunté (supongo que tendría la cabeza como un bombo por algo ^^U).
Hala, como con 1001 procesos sólo va a 9 FPS, vamos a meterle 32 veces más, a ver si revienta.
(Drumpi epic moment)

SplinterGU

Download Lastest BennuGD Release: http://www.bennugd.org/node/2

JaViS

bien... y la justificacion? un poco de explicacion no vendria mal.
Working on Anarkade. A couch multiplayer 2D shooter.

SplinterGU

ya lo explique muchas veces... el compilador no puede saber que lo que tenes en un puntero a string es una string o un valor basura de la memoria alocada, tampoco puede saber si la data contenida en un puntero sera data que se use en otro lado, por ende no se puede basar en la data contenida o apuntada por un puntero a string para liberarla cuando muere el proceso; incluso tampoco puede saber si un puntero cambia de posicion si la data apuntada previamente es correspondiente a un string a basura.

hay miles de cosas, que son mas que logicas.

por favor, usen el search, sino estamos repitiendo las mismas respuestas por todo el foro. (no hace falta disculparse por esto, ni tampoco es algo dirigido a una persona, muchos preguntan lo que ya se explico muchas veces)
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

Drumpi

Ya, pero lo que yo hice fue tener una lista de nodos, en la que cada uno tiene una string y un puntero a la siguiente posición. A la hora de borrar hago que la string valga "" antes de hacer el FREE, por lo que no deberían existir esos problemas a la hora de liberar memoria.
Y tampoco a la hora de usarla, ya que lo que tengo son estructuras, cada una con una variable tipo string, que incluso se inicializan en la creación de la misma.
La única pega que podría haber es que al cambiar el contenido de una string, al hacerla más larga, le pise memoria a otra variable (pero eso ya sería culpa de cómo se gestiona internamente la memoria, o las strings, y sucedería igual aunque no usase estas estructuras).

Vamos, que medité largamente cómo hacerlo lo más robusto posible (una de mis noches de insomnio exclusivamente para esto :D). Otra cosa es que a la hora de escribir el código haya metido la pata en mi inexperiencia con la programación en general.
Hala, como con 1001 procesos sólo va a 9 FPS, vamos a meterle 32 veces más, a ver si revienta.
(Drumpi epic moment)

SplinterGU

yo no apostaria tanto a eso que estas suponiendo.

que lo pongas a "", no significa que la string se libere, o que no "" no sea una string.

ya lo comente.
Download Lastest BennuGD Release: http://www.bennugd.org/node/2