savemenico

Untitled

Jun 13th, 2013
47
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 2.00 KB | None | 0 0
  1. typedef struct {
  2.         char simbolo;
  3.         char recurso;
  4. } __attribute__((__packed__)) personajeYRecursoAsignadoStruct;
  5.  
  6. typedef struct {
  7.         int32_t cantidadPersonajes;
  8.         t_queue *cola;
  9. } __attribute__((__packed__)) colaAsignadosStruct;
  10.  
  11. typedef struct {
  12.         int32_t length;
  13.         char *data;
  14. } __attribute__((__packed__)) t_qasignados;
  15.  
  16.  
  17. t_qasignados *serializador_recursos(colaAsignadosStruct *self) {
  18.         char *data = malloc( sizeof( queue_size(self->cola) * sizeof(personajeYRecursoAsignadoStruct) ));
  19.         t_qasignados *stream = malloc( sizeof(t_qasignados) );
  20.         int32_t offset = 0, tmp_size = 0;
  21.         t_queue *aux=queue_create();
  22.         char nulo= '\0';
  23.         queue_copy(aux,self->cola);
  24.  
  25.         memcpy(data, &self->cantidadPersonajes, tmp_size = sizeof(int32_t));
  26.         offset = tmp_size;
  27.         while (!queue_is_empty(aux))
  28.         {
  29.                 memcpy(data + offset, (void *) queue_pop(aux), tmp_size = sizeof(personajeYRecursoAsignadoStruct));
  30.                 offset += tmp_size;
  31.                 memcpy(data + offset, &nulo, tmp_size = sizeof(char));
  32.                 offset += tmp_size;
  33.         }
  34.  
  35.         stream->length = offset + tmp_size;
  36.         stream->data = data;
  37.         queue_destroy(aux);
  38.         return stream;
  39. }
  40.  
  41. colaAsignadosStruct * desserializador_recursos(t_qasignados *stream)
  42. {
  43.         colaAsignadosStruct *self = malloc(sizeof(colaAsignadosStruct));
  44.         personajeYRecursoAsignadoStruct *elem;
  45.         int32_t i, offset = 0, tmp_size = 0;
  46.  
  47.         memcpy(&self->cantidadPersonajes, stream->data, tmp_size = sizeof(int32_t));
  48.  
  49.  
  50.         for (i = 0; i < self->cantidadPersonajes; i++)
  51.         {
  52.                 offset = tmp_size;
  53.                 elem = malloc(sizeof(personajeYRecursoAsignadoStruct));
  54.                 memcpy((personajeYRecursoAsignadoStruct*) elem,(void *) stream->data + offset, 2);
  55.                 queue_push(self->cola,elem);
  56.                 tmp_size++;
  57.         }
  58. return self;
  59. }
Advertisement
Add Comment
Please, Sign In to add comment