00001
00002 #ifndef _DATASERVER_REGISTER2_ORIG_H_
00003 #define _DATASERVER_REGISTER2_ORIG_H_
00004
00005 #include "dataserver.h"
00006
00007 #define REGISTER2_DATA_BLOCK() int DataServer::RegisterExternal(char *keyword, RemoteSocket *C, int &error_flag, bool register_flag)
00008
00009 #define REGISTER2_KEYWORD_INFO(key,desc,elemsize,numelems,perm,var) {\
00010 if (register_flag) \
00011 RegisterKey(key, desc, keyType(var), elemsize, numelems, perm, &(var)); }
00012
00013 #define REGISTER2_KEYWORD_INFO_NO_PTR(key,desc,elemsize,numelems,perm,var) {\
00014 if (register_flag) \
00015 RegisterKey(key, desc, keyType(var), elemsize, numelems, perm); }
00016
00017 #define REGISTER2_DATA(key,perm,data) {\
00018 REGISTER2_KEYWORD_INFO(key, GENERIC_DATA, sizeof(data), 1, perm, data); \
00019 if (!strcmp(keyword, key)) {\
00020 error_flag = 0; \
00021 Wait(key); \
00022 C->SendVar<int>(sizeof(data)); \
00023 C->SendBytes(sizeof(data), &data);\
00024 Post(key); \
00025 return 1; } \
00026 if (!strcmp(perm, "rw")) \
00027 if (!strcmp(keyword, "R" key)) {\
00028 error_flag = 2; \
00029 Wait(key); \
00030 C->SendVar<int>(sizeof(data)); \
00031 C->RecvBytes(sizeof(data), &(data)); \
00032 SetDirty(key); \
00033 Post(key); \
00034 return 1; }}
00035
00036 #define REGISTER2_VARIABLE(key,perm,data) {\
00037 REGISTER2_KEYWORD_INFO(key, VARIABLE, sizeof(data), 1, perm, data); \
00038 if (!strcmp(keyword, key)) {\
00039 error_flag = 0; \
00040 DataServer::Wait(key); \
00041 C->SendVar<int>(sizeof(data)); \
00042 C->SendVar(data); \
00043 DataServer::Post(key); \
00044 return 1; } \
00045 if (!strcmp(perm, "rw")) \
00046 if (!strcmp(keyword, "R" key)) {\
00047 error_flag = 2; \
00048 DataServer::Wait(key); \
00049 C->SendVar<int>(sizeof(data)); \
00050 C->RecvVar(&data); \
00051 SetDirty(key); \
00052 DataServer::Post(key); \
00053 return 1; }}
00054
00055 #define REGISTER2_STRUCTURE(key,perm,var) {\
00056 REGISTER2_KEYWORD_INFO(key, CUSTOM_STRUCTURE, sizeof(var), 1, perm, var); \
00057 if (!strcmp(keyword, key)) {\
00058 error_flag = 0; \
00059 C->SendStruct(&(var), Lock(key)); \
00060 return 1; } \
00061 if (!strcmp(perm, "rw")) \
00062 if (!strcmp(keyword, "R" key)) {\
00063 error_flag = 2; \
00064 C->RecvStruct(&(var), Lock(key)); \
00065 SetDirty(key); \
00066 return 1; }}
00067
00068 #define REGISTER2_GENERIC_ARRAY(key,perm, data, element, dim) {\
00069 REGISTER2_KEYWORD_INFO(key, (DataType) (STATIC_1D_ARRAY+dim-1), sizeof(data element), sizeof(data)/sizeof(data element), perm, data element); \
00070 if (!strcmp(keyword, key)) {\
00071 error_flag = 0; \
00072 Wait(key); \
00073 C->SendVar<int>(sizeof(data)); \
00074 C->SendVar<int>(sizeof(data element)); \
00075 C->SendArrayGeneric(data, sizeof(data), sizeof(data element)); \
00076 Post(key); \
00077 return 1; } \
00078 if (!strcmp(perm, "rw")) \
00079 if (!strcmp(keyword, "R" key)) {\
00080 error_flag = 2;\
00081 Wait(key); \
00082 C->SendVar<int>(sizeof(data)); \
00083 C->SendVar<int>(sizeof(data element)); \
00084 C->RecvArrayGeneric(data, sizeof(data), sizeof(data element)); \
00085 SetDirty(key); \
00086 Post(key); \
00087 return 1; }}
00088
00089 #define REGISTER2_1D_ARRAY(key,perm,data) REGISTER2_GENERIC_ARRAY(key, perm, data, [0], 1)
00090 #define REGISTER2_2D_ARRAY(key,perm,data) REGISTER2_GENERIC_ARRAY(key, perm, data, [0][0], 2)
00091 #define REGISTER2_3D_ARRAY(key,perm,data) REGISTER2_GENERIC_ARRAY(key, perm, data, [0][0][0], 3)
00092 #define REGISTER2_4D_ARRAY(key,perm,data) REGISTER2_GENERIC_ARRAY(key, perm, data, [0][0][0][0], 4)
00093
00094 #define REGISTER2_DYNAMIC_1D_ARRAY(key,perm, data, n1) {\
00095 REGISTER2_KEYWORD_INFO(key, DYNAMIC_1D_ARRAY, sizeof(data[0]), -1, perm, data[0]); \
00096 REGISTER2_VARIABLE(key "_dim1", "ro", n1); \
00097 if (!strcmp(keyword, key)) { \
00098 error_flag = 0; \
00099 Wait(key); \
00100 C->SendVar<int>(n1); \
00101 C->SendArray1D(data, n1); \
00102 Post(key); \
00103 return 1; } \
00104 if (!strcmp(perm, "rw")) \
00105 if (!strcmp(keyword, "R" key)) { \
00106 error_flag = 2;\
00107 Wait(key); \
00108 C->SendVar<int>(n1); \
00109 C->RecvArray1D(data, n1); \
00110 SetDirty(key); \
00111 Post(key); \
00112 return 1; }}
00113
00114 #define REGISTER2_DYNAMIC_2D_ARRAY(key, perm, data, n1, n2) {\
00115 REGISTER2_KEYWORD_INFO_NO_PTR(key, DYNAMIC_2D_ARRAY, sizeof(data[0][0]), -1, perm, data[0][0]); \
00116 REGISTER2_VARIABLE(key "_dim1", "ro", n1); \
00117 REGISTER2_VARIABLE(key "_dim2", "ro", n2); \
00118 if (!strcmp(keyword, key)) { \
00119 error_flag = 0; \
00120 Wait(key); \
00121 C->SendVar<int>(n1); \
00122 C->SendVar<int>(n2); \
00123 C->SendArray2D(data, n1, n2); \
00124 Post(key); \
00125 return 1; } \
00126 if (!strcmp(perm, "rw")) \
00127 if (!strcmp(keyword, "R" key)) { \
00128 error_flag = 2;\
00129 Wait(key); \
00130 C->SendVar<int>(n1); \
00131 C->SendVar<int>(n2); \
00132 C->RecvArray2D(data, n1, n2); \
00133 SetDirty(key); \
00134 Post(key); \
00135 return 1; }}
00136
00137 #define REGISTER2_DYNAMIC_3D_ARRAY(key,perm, data, n1, n2, n3) {\
00138 REGISTER2_KEYWORD_INFO_NO_PTR(key, DYNAMIC_3D_ARRAY, sizeof(data[0][0][0]), -1, perm, data[0][0][0]); \
00139 REGISTER2_VARIABLE(key "_dim1", "ro", n1); \
00140 REGISTER2_VARIABLE(key "_dim2", "ro", n2); \
00141 REGISTER2_VARIABLE(key "_dim3", "ro", n3); \
00142 if (!strcmp(keyword, key)) { \
00143 error_flag = 0; \
00144 Wait(key); \
00145 C->SendVar<int>(n1); \
00146 C->SendVar<int>(n2); \
00147 C->SendVar<int>(n3); \
00148 C->SendArray3D(data, n1, n2, n3); \
00149 Post(key); \
00150 return 1; } \
00151 if (!strcmp(perm, "rw")) \
00152 if (!strcmp(keyword, "R" key)) { \
00153 error_flag = 2;\
00154 Wait(key); \
00155 C->SendVar<int>(n1); \
00156 C->SendVar<int>(n2); \
00157 C->SendVar<int>(n3); \
00158 C->RecvArray3D(data, n1, n2, n3); \
00159 SetDirty(key); \
00160 Post(key); \
00161 return 1; }}
00162
00163 #define REGISTER2_DYNAMIC_4D_ARRAY(key,perm, data, n1, n2, n3, n4) {\
00164 REGISTER2_KEYWORD_INFO_NO_PTR(key, DYNAMIC_4D_ARRAY, sizeof(data[0][0][0][0]), -1, perm, data[0][0][0][0]); \
00165 REGISTER2_VARIABLE(key "_dim1", "ro", n1); \
00166 REGISTER2_VARIABLE(key "_dim2", "ro", n2); \
00167 REGISTER2_VARIABLE(key "_dim3", "ro", n3); \
00168 REGISTER2_VARIABLE(key "_dim4", "ro", n4); \
00169 if (!strcmp(keyword, key)) { \
00170 error_flag = 0; \
00171 Wait(key); \
00172 C->SendVar<int>(n1); \
00173 C->SendVar<int>(n2); \
00174 C->SendVar<int>(n3); \
00175 C->SendVar<int>(n4); \
00176 C->SendArray4D(data, n1, n2, n3, n4); \
00177 Post(key); \
00178 return 1; } \
00179 if (!strcmp(perm, "rw")) \
00180 if (!strcmp(keyword, "R" key)) { \
00181 error_flag = 2;\
00182 Wait(key); \
00183 C->SendVar<int>(n1); \
00184 C->SendVar<int>(n2); \
00185 C->SendVar<int>(n3); \
00186 C->SendVar<int>(n4); \
00187 C->RecvArray4D(data, n1, n2, n3, n4); \
00188 SetDirty(key); \
00189 Post(key); \
00190 return 1; }}
00191
00192
00193 #endif // _DATASERVER_REGISTER2_ORIG_H_
00194