0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017
0018
0019
0020
0021
0022
0023
0024
0025
0026
0027
0028
0029
0030
0031
0032
0033
0034
0035 #ifndef FDATATYPE_H
0036 #define FDATATYPE_H
0037
0038 #ifdef __cplusplus
0039 extern "C" {
0040 #endif
0041
0042 #include <ubf.h>
0043 #include <ubf_tls.h>
0044 #include <exhash.h>
0045
0046
0047 #define NDRX_UBF_TYPE_LEN 32
0048
0049
0050 #define HDR_MIN_LANG 0
0051 #define HDR_C_LANG 0
0052 #define HDR_GO_LANG 1
0053 #define HDR_JAVA_LANG 2
0054 #define HDR_PYTHON_LANG 3
0055 #define HDR_MAX_LANG 3
0056
0057
0058 #if EX_ALIGNMENT_BYTES == 8
0059 #define FF_USED_BYTES (sizeof(BFLDID)*2)
0060 #else
0061 #define FF_USED_BYTES sizeof(BFLDID)
0062 #endif
0063
0064 #define UBF_MAGIC "UBF1"
0065 #define UBF_MAGIC_SIZE 4
0066 #define CF_TEMP_BUF_MAX 1078
0067 #define EXTREAD_BUFFSIZE 16384
0068
0069
0070
0071
0072 typedef short _UBF_SHORT;
0073 typedef unsigned int _UBF_INT;
0074 typedef double UBF_DOUBLE;
0075 typedef float UBF_FLOAT;
0076 typedef long UBF_LONG;
0077 typedef char UBF_CHAR;
0078 typedef char* UBF_PTR;
0079
0080
0081 struct dtype_str
0082 {
0083 char *fldname;
0084 char *altname;
0085 _UBF_SHORT fld_type;
0086 size_t size;
0087 int aligned_size;
0088 int (*p_next) (struct dtype_str*, char *fb, int *payload_size);
0089 int (*p_put_data) (struct dtype_str *t, char *fb, BFLDID bfldid, char *data, int len);
0090 int (*p_get_data_size) (struct dtype_str *t, char *data, int len, int *payload_size);
0091 int (*p_get_data) (struct dtype_str *t, char *fb, char *buf, int *len);
0092 };
0093
0094 typedef struct dtype_str dtype_str_t;
0095
0096
0097
0098
0099 struct dtype_ext1
0100 {
0101 _UBF_SHORT fld_type;
0102 int (*p_empty_sz) (struct dtype_ext1* t);
0103
0104
0105
0106
0107 int (*p_put_empty) (struct dtype_ext1* t, char *fb, BFLDID bfldid);
0108 void (*p_dump_data) (struct dtype_ext1 *t, char *text, char *data, int *len);
0109 int hdr_size;
0110
0111 char *(*p_tbuf) (struct dtype_ext1 *t, int len);
0112
0113 char *(*p_talloc) (struct dtype_ext1 *t, int *len);
0114
0115 int (*p_cmp) (struct dtype_ext1 *t, char *val1, BFLDLEN len1, char *val2,
0116 BFLDLEN len2, long mode);
0117
0118
0119
0120
0121
0122
0123
0124 char *(*p_prep_ubfp) (struct dtype_ext1 *t, ndrx_ubf_tls_bufval_t *vstorage, char *fld_start);
0125
0126 };
0127
0128 typedef struct dtype_ext1 dtype_ext1_t;
0129
0130
0131 struct UBF_header
0132 {
0133 unsigned char buffer_type;
0134 unsigned char version;
0135 char magic[UBF_MAGIC_SIZE];
0136
0137
0138
0139
0140
0141 BFLDLEN cache_long_off;
0142 BFLDLEN cache_char_off;
0143 BFLDLEN cache_float_off;
0144 BFLDLEN cache_double_off;
0145 BFLDLEN cache_string_off;
0146 BFLDLEN cache_carray_off;
0147 BFLDLEN cache_ptr_off;
0148 BFLDLEN cache_ubf_off;
0149 BFLDLEN cache_view_off;
0150
0151 BFLDLEN buf_len;
0152 _UBF_INT opts;
0153 BFLDLEN bytes_used;
0154 #if EX_ALIGNMENT_BYTES == 8
0155
0156 long padding1;
0157 #endif
0158 BFLDID bfldid;
0159 #if EX_ALIGNMENT_BYTES == 8
0160
0161 BFLDID passing2;
0162 #endif
0163 };
0164
0165 typedef struct UBF_header UBF_header_t;
0166
0167
0168
0169
0170
0171 struct UBF_string
0172 {
0173 BFLDID bfldid;
0174 #if EX_ALIGNMENT_BYTES == 8
0175 BFLDID padding;
0176 #endif
0177 BFLDLEN dlen;
0178 char str[1];
0179 };
0180 typedef struct UBF_string UBF_string_t;
0181
0182
0183
0184
0185 struct UBF_carray
0186 {
0187 BFLDID bfldid;
0188
0189
0190 #if EX_ALIGNMENT_BYTES == 8
0191 BFLDID padding;
0192 #endif
0193 BFLDLEN dlen;
0194
0195 char carr[0];
0196 };
0197 typedef struct UBF_carray UBF_carray_t;
0198
0199
0200
0201
0202 struct UBF_char
0203 {
0204 BFLDID bfldid;
0205 #if EX_ALIGNMENT_BYTES == 8
0206 BFLDID padding;
0207 #endif
0208 UBF_CHAR cval;
0209 };
0210 typedef struct UBF_char UBF_char_t;
0211
0212
0213
0214
0215
0216 struct UBF_double
0217 {
0218 BFLDID bfldid;
0219 #if EX_ALIGNMENT_BYTES == 8
0220 BFLDID padding;
0221 #endif
0222 UBF_DOUBLE dval;
0223 };
0224 typedef struct UBF_double UBF_double_t;
0225
0226
0227
0228
0229 struct UBF_float
0230 {
0231 BFLDID bfldid;
0232 #if EX_ALIGNMENT_BYTES == 8
0233 BFLDID padding;
0234 #endif
0235 UBF_FLOAT dval;
0236 };
0237 typedef struct UBF_float UBF_float_t;
0238
0239
0240
0241
0242 struct UBF_long
0243 {
0244 BFLDID bfldid;
0245 #if EX_ALIGNMENT_BYTES == 8
0246 BFLDID padding;
0247 #endif
0248 UBF_LONG lval;
0249 };
0250 typedef struct UBF_long UBF_long_t;
0251
0252
0253
0254
0255
0256 struct UBF_generic
0257 {
0258 BFLDID bfldid;
0259 #if EX_ALIGNMENT_BYTES == 8
0260 BFLDID padding;
0261 #endif
0262 char d[0];
0263 };
0264 typedef struct UBF_generic UBF_generic_t;
0265
0266
0267
0268
0269
0270 struct UBF_ubf
0271 {
0272 BFLDID bfldid;
0273
0274 #if EX_ALIGNMENT_BYTES == 8
0275 BFLDID padding;
0276 #endif
0277
0278 char ubfdata[0];
0279 };
0280 typedef struct UBF_ubf UBF_ubf_t;
0281
0282
0283
0284
0285 struct UBF_view
0286 {
0287 BFLDID bfldid;
0288 #if EX_ALIGNMENT_BYTES == 8
0289 BFLDID padding;
0290 #endif
0291 char vname[NDRX_VIEW_NAME_LEN+1];
0292 BFLDLEN dlen;
0293
0294 long vflags;
0295
0296 char data[0];
0297 };
0298 typedef struct UBF_view UBF_view_t;
0299
0300
0301
0302
0303 struct UBF_ptr
0304 {
0305 BFLDID bfldid;
0306
0307 #if EX_ALIGNMENT_BYTES == 8
0308 BFLDID padding;
0309 #endif
0310 UBF_PTR ptr;
0311 };
0312 typedef struct UBF_ptr UBF_ptr_t;
0313
0314
0315
0316
0317 typedef struct UBF_field_def UBF_field_def_t;
0318 struct UBF_field_def
0319 {
0320 BFLDID bfldid;
0321 _UBF_SHORT fldtype;
0322 char fldname[UBFFLDMAX+1];
0323
0324 EX_hash_handle hh;
0325 UBF_field_def_t *next, *prev;
0326 };
0327
0328
0329 extern NDRX_API dtype_str_t G_dtype_str_map[];
0330 extern NDRX_API dtype_ext1_t G_dtype_ext1_map[];
0331
0332
0333
0334 #ifdef __cplusplus
0335 }
0336 #endif
0337
0338 #endif
0339
0340