diff options
Diffstat (limited to 'camel')
-rw-r--r-- | camel/camel-data-wrapper.c | 104 | ||||
-rw-r--r-- | camel/camel-data-wrapper.h | 15 |
2 files changed, 115 insertions, 4 deletions
diff --git a/camel/camel-data-wrapper.c b/camel/camel-data-wrapper.c index 19abc31c4c..9020b7e8fc 100644 --- a/camel/camel-data-wrapper.c +++ b/camel/camel-data-wrapper.c @@ -1,5 +1,8 @@ /* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ -/* camelDataWrapper.c : Abstract class for an data_wrapper */ +/* camelDataWrapper.c : Abstract class for a data_wrapper */ + +/** THIS IS MOSTLY AN ABSTRACT CLASS THAT SHOULD HAVE BEEN AN + INTERFACE. **/ /* * @@ -28,12 +31,21 @@ static GtkObjectClass *parent_class=NULL; /* Returns the class for a CamelDataWrapper */ #define CDH_CLASS(so) CAMEL_DATA_WRAPPER_CLASS (GTK_OBJECT(so)->klass) +static void __camel_data_wrapper_write_to_buffer(CamelDataWrapper *data_wrapper, gchar *buffer); +static void __camel_data_wrapper_write_to_file(CamelDataWrapper *data_wrapper, FILE *file); +static void __camel_data_wrapper_construct_from_buffer(CamelDataWrapper *data_wrapper, gchar *buffer, guint size); +static void __camel_data_wrapper_construct_from_file (CamelDataWrapper *data_wrapper, FILE *file, guint size); + static void camel_data_wrapper_class_init (CamelDataWrapperClass *camel_data_wrapper_class) { parent_class = gtk_type_class (gtk_object_get_type ()); /* virtual method definition */ + camel_data_wrapper_class->write_to_buffer = __camel_data_wrapper_write_to_buffer; + camel_data_wrapper_class->write_to_file = __camel_data_wrapper_write_to_file; + camel_data_wrapper_class->construct_from_buffer = __camel_data_wrapper_construct_from_buffer; + camel_data_wrapper_class->construct_from_file = __camel_data_wrapper_construct_from_file; /* virtual method overload */ } @@ -70,3 +82,93 @@ camel_data_wrapper_get_type (void) + +/** + * __camel_data_wrapper_write_to_buffer: write data content in a byte buffer + * @data_wrapper: the data wrapper object + * @buffer: byte buffer where data will be written + * + * This method must be overriden by subclasses + * Data must be written in the bytes buffer + * in a architecture independant fashion. + * If data is a standard data (for example an jpg image) + * it must be serialized in the buffer exactly as it + * would be saved on disk. A simple dump of the buffer in + * a file should be sufficient for the data to be + * re-read by a foreign application. + * + **/ +static void +__camel_data_wrapper_write_to_buffer(CamelDataWrapper *data_wrapper, gchar *buffer) +{ + /* nothing */ +} + + +/** + * camel_data_wrapper_write_to_buffer: write data in a memory buffer + * @data_wrapper: the data wrapper object + * @buffer: byte buffer where data will be written + * + * Write data content in a buffer. Data is stored in a machine + * independant format. + * + **/ +void +camel_data_wrapper_write_to_buffer(CamelDataWrapper *data_wrapper, gchar *buffer) +{ + CDH_CLASS(data_wrapper)->write_to_buffer (data_wrapper, buffer); +} + + + +static void +__camel_data_wrapper_write_to_file(CamelDataWrapper *data_wrapper, FILE *file) +{ + /* nothing */ +} + + +/** + * camel_data_wrapper_write_to_file: write data in a binary file + * @data_wrapper: the data wrapper object + * @file: file descriptoe where to write data + * + * Write data content in a binary file. + * + **/ +void +camel_data_wrapper_write_to_file(CamelDataWrapper *data_wrapper, FILE *file) +{ + CDH_CLASS(data_wrapper)->write_to_file (data_wrapper, file); +} + + +static void +__camel_data_wrapper_construct_from_buffer(CamelDataWrapper *data_wrapper, gchar *buffer, guint size) +{ + /* nothing */ +} + +void +camel_data_wrapper_construct_from_buffer(CamelDataWrapper *data_wrapper, gchar *buffer, guint size) +{ + CDH_CLASS(data_wrapper)->construct_from_buffer (data_wrapper, buffer, size); +} + + + +static void +__camel_data_wrapper_construct_from_file (CamelDataWrapper *data_wrapper, FILE *file, guint size) +{ + /* nothing */ +} + +void +camel_data_wrapper_construct_from_file (CamelDataWrapper *data_wrapper, FILE *file, guint size) +{ + CDH_CLASS(data_wrapper)->construct_from_file (data_wrapper, file, size); +} + + + diff --git a/camel/camel-data-wrapper.h b/camel/camel-data-wrapper.h index ef3a7cd1f3..e6b0b2a18a 100644 --- a/camel/camel-data-wrapper.h +++ b/camel/camel-data-wrapper.h @@ -1,4 +1,5 @@ -/* camelDataWrapper.h : Abstract class for a datawrapper */ +/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ +/* camelDataWrapper.h : Abstract class for a data wrapper */ /* * @@ -31,6 +32,7 @@ extern "C" { #endif /* __cplusplus }*/ #include <gtk/gtk.h> +#include <stdio.h> @@ -51,8 +53,12 @@ typedef struct typedef struct { GtkObjectClass parent_class; - + /* Virtual methods */ + void (*write_to_buffer) (CamelDataWrapper *data_wrapper, gchar *buffer); + void (*write_to_file) (CamelDataWrapper *data_wrapper, FILE *file); + void (*construct_from_buffer) (CamelDataWrapper *data_wrapper, gchar *buffer, guint size); + void (*construct_from_file) (CamelDataWrapper *data_wrapper, FILE *file, guint size); } CamelDataWrapperClass; @@ -63,7 +69,10 @@ GtkType camel_data_wrapper_get_type (void); /* public methods */ - +void camel_data_wrapper_write_to_buffer(CamelDataWrapper *data_wrapper, gchar *buffer); +void camel_data_wrapper_write_to_file(CamelDataWrapper *data_wrapper, FILE *file); +void camel_data_wrapper_construct_from_buffer(CamelDataWrapper *data_wrapper, gchar *buffer, guint size); +void camel_data_wrapper_construct_from_file (CamelDataWrapper *data_wrapper, FILE *file, guint size); #ifdef __cplusplus } |