00001
00002
00003
00004 #if !defined(C_SERIALIZE)
00005 #define C_SERIALIZE 1
00006
00007 #include <stdio.h>
00008 #include <string.h>
00009
00010
00011
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
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
00056
00057
00058
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
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