Autor Tema: String_class  (Leído 5376 veces)

Drumpi

  • Hero Member
  • *****
  • Mensajes: 6340
  • Karma: 162
  • Odio el periodo "entre proyectos"
    • La web de Drumpi
String_class
« en: Abril 08, 2011, 07:11:41 pm »
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

  • Hero Member
  • *****
  • Mensajes: 12894
  • Karma: 377
Re: String_class
« Respuesta #1 en: Abril 08, 2011, 07:32:32 pm »
acaBO de ver el codigo, no podes hacer esto de forma segura.

ya avise.
« última modificación: Mayo 13, 2011, 03:37:26 pm por SplinterGU »
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

l1nk3rn3l

  • Hero Member
  • *****
  • Mensajes: 2004
  • Karma: 257
Re: String_class
« Respuesta #2 en: Abril 08, 2011, 08:58:24 pm »
gracias

JaViS

  • Global Moderator
  • *****
  • Mensajes: 1296
  • Karma: 28
    • Anarkade
Re: String_class
« Respuesta #3 en: Mayo 12, 2011, 06:01:55 pm »
buenas, no entendí el comentario de Splinter.

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

Drumpi

  • Hero Member
  • *****
  • Mensajes: 6340
  • Karma: 162
  • Odio el periodo "entre proyectos"
    • La web de Drumpi
Re: String_class
« Respuesta #4 en: Mayo 12, 2011, 06:55:09 pm »
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

  • Hero Member
  • *****
  • Mensajes: 12894
  • Karma: 377
Re: String_class
« Respuesta #5 en: Mayo 13, 2011, 03:37:40 pm »
ya corregi... :D
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

JaViS

  • Global Moderator
  • *****
  • Mensajes: 1296
  • Karma: 28
    • Anarkade
Re: String_class
« Respuesta #6 en: Mayo 13, 2011, 05:53:09 pm »
bien... y la justificacion? un poco de explicacion no vendria mal.
Working on Anarkade. A couch multiplayer 2D shooter.

SplinterGU

  • Hero Member
  • *****
  • Mensajes: 12894
  • Karma: 377
Re: String_class
« Respuesta #7 en: Mayo 13, 2011, 06:02:15 pm »
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

  • Hero Member
  • *****
  • Mensajes: 6340
  • Karma: 162
  • Odio el periodo "entre proyectos"
    • La web de Drumpi
Re: String_class
« Respuesta #8 en: Mayo 13, 2011, 07:34:06 pm »
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

  • Hero Member
  • *****
  • Mensajes: 12894
  • Karma: 377
Re: String_class
« Respuesta #9 en: Mayo 13, 2011, 07:39:35 pm »
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