cser.h

Go to the documentation of this file.
00001 /* By Sean Middleditch <elanthis@awemud.net>
00002    released into public domain, July 8th, 2003 */
00003 
00004 #if !defined(C_SERIALIZE)
00005 #define C_SERIALIZE 1
00006 
00007 #include <stdio.h>
00008 #include <string.h>
00009 
00010 
00011 // Coutinho: If a c++ code use this file, tell it that these functions are in C
00012 #ifdef __cplusplus
00013 extern "C" {
00014 #endif
00015 
00016 
00017 #ifdef TO_NETWORK
00018 
00019 #include "pvm3.h"
00020 
00021 #define WRITE_BYTES(file, buffer, bufSize) pvm_pkbyte(buffer, bufSize, 1) // buffer: char *
00022 #define WRITE_NUM(file, varname, var)      pvm_pkint(&var, 1, 1)          // var: int
00023 #define WRITE_STR(file, varname, var)      cser_pkstr(var)                // var: char *
00024 #define WRITE_FLOAT(file, varname, var)    pvm_pkfloat(&var, 1, 1)        // var: float      
00025 
00026 #define READ_BEGIN(file)
00027 #define READ_END
00028 #define READ_BYTES(file, buffer, bufSize) pvm_upkbyte(buffer, bufSize, 1) // buffer: char *
00029 #define READ_NUM(varname, var)            pvm_upkint(&var, 1, 1)          // var: int
00030 #define READ_STR(varname, var)            (var = cser_upkstr())           // var: char *
00031 #define READ_FLOAT(varname, var)          pvm_pkfloat(&var, 1, 1)         // var: float    
00032 
00033 #else
00034 
00035 #define WRITE_BYTES(file, buffer, bufSize) fwrite(buffer, bufSize, 1, file)
00036 #define WRITE_NUM(file, varname, var) cser_write_num(file, varname, var)
00037 #define WRITE_STR(file, varname, var) cser_write_str(file, varname, var)
00038 #define WRITE_FLOAT(file, varname, var) fwrite(&(var), sizeof(float), 1, file)
00039 
00040 #define READ_BEGIN(file) CSER_READ_BEGIN(file)
00041 #define READ_END CSER_READ_END
00042 #define READ_BYTES(file, buffer, bufSize) fread(buffer, bufSize, 1, file)
00043 #define READ_NUM(varname, var) CSER_READ_NUM(varname, var)
00044 #define READ_STR(varname, var) CSER_READ_STR(varname, var)
00045 #define READ_FLOAT(varname, var) fread(&(var), sizeof(float), 1, filePtr)
00046 
00047 
00048 
00049 #define CSER_MAX_DATA 2048
00050 
00051 /* write values to a file */
00052 int cser_write_str(FILE* file, const char* name, const char* value);
00053 int cser_write_num(FILE* file, const char* name, long num);
00054 
00055 // Original version, struct values cam be in any order but depends on variable
00056 // name unicity to work and this restriction is very serious to me
00057 
00058 /* read from file */
00059 #define CSER_READ_BEGIN(file) \
00060         do { \
00061                 char _cser_buffer[CSER_MAX_DATA]; \
00062                 char* _cser_name = NULL; \
00063                 char* _cstr_string = NULL; \
00064                 long _cstr_number = 0; \
00065                 FILE *filePtr = file;
00066 #define CSER_READ_STR(name,var) \
00067                 if ((cser_read((filePtr), _cser_buffer, sizeof(_cser_buffer), \
00068                         &_cser_name, &_cstr_string, &_cstr_number)) == 0) { \
00069                         if (!strcasecmp((name), _cser_name)) { \
00070                                 if ((var) != NULL) free(var); \
00071                                 var = NULL; \
00072                                 if (_cstr_string != NULL) \
00073                                         (var) = strdup(_cstr_string); \
00074                         } else \
00075                         { fprintf(stderr, "cser var name error\n"); } \
00076                 } else { fprintf(stderr, "cser_read() error\n"); } 
00077 #define CSER_READ_NUM(name,var) \
00078                 if ((cser_read((filePtr), _cser_buffer, sizeof(_cser_buffer), \
00079                         &_cser_name, &_cstr_string, &_cstr_number)) == 0) { \
00080                         if (!strcasecmp((name), _cser_name)) { \
00081                                 (var) = _cstr_number; \
00082                         } else  \
00083                         { fprintf(stderr, "cser var name error\n"); } \
00084                 } else { fprintf(stderr, "cser_read() error\n"); } 
00085 #define CSER_READ_END \
00086         } while(0);
00087 
00088 /* read one value from file */
00089 int cser_read(FILE* file, char* buffer, size_t blen, char** name, char** str_value, long* num_value);
00090 
00091 
00092 #endif
00093 
00094 
00095 
00096 typedef int packData_t(void *list);
00097 typedef void *voidp;
00098 typedef voidp unpackData_t(void);
00099 
00100 int sendStruct(int tid, int tag, void *Struct, packData_t *packer);
00101 int mcastStruct(int *tids, int tidListSize, int tag, void *dataStruct, packData_t *packer);
00102 void *recvStruct(int tid, int tag, unpackData_t *unpacker);
00103 
00104 
00105 #ifdef __cplusplus
00106 }
00107 #endif
00108 
00109 #endif

Generated on Tue Jan 17 19:18:37 2006 for Void by  doxygen 1.4.6