Serializacion en C!!

Iniciado por ekys, 14 Abril 2011, 08:55 AM

0 Miembros y 1 Visitante están viendo este tema.

ekys

Hola a todos,

me gustaría que alguien me ayudara.

El caso es q estoy intentando serializar una estructura definida por mí (basicamente es una estructura en arbol dnd cada nodo tiene un string y un entero) y lo estoy haciendo en C (sí en C, ni C# ni C++) y para ello utilizo la libreria c11n. Sigo las intrucciones del manual pero no hay manera!!!!!

Alguien ha trabajado alguna vez con esta librería (segun dicen es parecida a la libreria s11n utilizada en C++)??

Algun tipo de ayuda para digerir mi desesperacion??


Gracias de antemano por cualquier tipo de ayuda.


D4RIO

Si posteas algo de código podría ayudar a entender. De otra forma no sabríamos en qué parte tienes problemas, o qué problemas tienes. Usa la etiqueta de código personalizado disponible a la derecha arriba de tu panel de edición para postear código. Saludos.
OpenBSDFreeBSD

ekys

Si si, pongo el código ahora, pero es q he posteao en otros foros con el codigo incluido y nadie me contesta nunca...  :P

Gracias por contestar!!!

Este es el codigo:


//*****************************MAIN.c*************************************

#include <string.h>
#include <stdio.h>
#include <stdlib.h>
#include "AST.h"
#include "c11n.h"
#include "c11n_io.h"
#include "c11n_stream_FILE.h"

/// Main program
int main(int argc,char *argv[])
{
AST* a1=NULL;
a1 = InsertAST(a1, "prueba");

c11n_node * n = c11n_node_create("a1");
bool rc = c11n_serialize( AST_c11n, n, &a1);
c11n_node_destroy( n );
if( ! rc ) printf("SERIALIZE error !!!!!");

c11n_stream *str= c11n_stream_for_filename("a1.c11n", true);
bool rc2 = c11n_save_serializable( str, AST_c11n, &a1 );
c11n_serializable_save( str, AST_c11n, &a1, 0 );

str->api->destroy(str);

return 0;
}

//*****************************AST.h*************************************

#include "c11n.h"

typedef struct bnode AST;

//AST definitions FIELDs
struct bnode {
char widget_name[20];
int count;
AST *left;
AST *right;
};

AST* InsertAST ( AST* root, char* nodename);

extern const c11n_marshaller * AST_c11n;


//*****************************AST.c*************************************

#include "AST.h"

AST* InsertAST ( AST* root, char* nodename)
{
if ( root == NULL ) {
root = malloc ( sizeof ( AST ) );
strcpy ( root->widget_name, nodename );
root->count = 1;
root->left = root->right = NULL;
} else if ( strcmp (nodename, root->widget_name ) < 0 ){   //else if ( root->left == NULL)
root->left = InsertAST ( root->left, nodename);
}
else if ( strcmp (nodename, root->widget_name ) > 0 ){
root->right = InsertAST ( root->right, nodename);
}
else{ // must be equal
root->count++;
}

return root;
}

static const c11n_marshaller_api c11n_markshaller_api_AST =
    C11N_MARSHALLER_API_INIT("AST",
     NULL,
     NULL,
     NULL,
     NULL,
     NULL);

static const c11n_marshaller AST_c11nX = { &c11n_markshaller_api_AST };
const c11n_marshaller * AST_c11n = &AST_c11nX;