5 static void _pxprpc_ensure_buf(struct pxprpc_serilizer
*ser
,uint32_t remain
){
6 if(ser
->cap
-ser
->pos
<remain
){
7 int newsize
=ser
->pos
+remain
;
9 ser
->buf
=pxprpc__realloc(ser
->buf
,newsize
);
13 extern void pxprpc_ser_prepare_ser(struct pxprpc_serilizer
*ser
,int initBufSize
){
14 ser
->buf
=pxprpc__malloc(initBufSize
);
18 extern void pxprpc_ser_prepare_unser(struct pxprpc_serilizer
*ser
,void *buf
,uint32_t size
){
24 extern void pxprpc_ser_put_int(struct pxprpc_serilizer
*ser
,uint32_t val
){
25 _pxprpc_ensure_buf(ser
,4);
26 *(uint32_t *)(ser
->buf
+ser
->pos
)=val
;
29 extern void pxprpc_ser_put_long(struct pxprpc_serilizer
*ser
,uint64_t val
){
30 _pxprpc_ensure_buf(ser
,8);
31 *(uint64_t *)(ser
->buf
+ser
->pos
)=val
;
34 extern void pxprpc_ser_put_float(struct pxprpc_serilizer
*ser
,float val
){
35 _pxprpc_ensure_buf(ser
,4);
36 *(float *)(ser
->buf
+ser
->pos
)=val
;
39 extern void pxprpc_ser_put_double(struct pxprpc_serilizer
*ser
,double val
){
40 _pxprpc_ensure_buf(ser
,8);
41 *(double *)(ser
->buf
+ser
->pos
)=val
;
44 extern void pxprpc_ser_put_bytes(struct pxprpc_serilizer
*ser
,struct pxprpc_bytes
*val
){
45 if(val
->length
<=0xff){
46 _pxprpc_ensure_buf(ser
,1+val
->length
);
47 *(ser
->buf
+ser
->pos
)=val
->length
;
50 _pxprpc_ensure_buf(ser
,5+val
->length
);
51 *(ser
->buf
+ser
->pos
)=0xff;
53 *(uint32_t *)(ser
->buf
+ser
->pos
)=val
->length
;
56 memcpy(ser
->buf
+ser
->pos
,&val
->data
,val
->length
);
57 ser
->pos
+=val
->length
;
59 extern uint32_t pxprpc_ser_get_int(struct pxprpc_serilizer
*ser
){
60 uint32_t val
=*(uint32_t *)ser
->buf
+ser
->pos
;
64 extern uint64_t pxprpc_ser_get_long(struct pxprpc_serilizer
*ser
){
65 uint64_t val
=*(uint64_t *)ser
->buf
+ser
->pos
;
69 extern float pxprpc_ser_get_float(struct pxprpc_serilizer
*ser
){
70 float val
=*(float *)ser
->buf
+ser
->pos
;
74 extern double pxprpc_ser_get_double(struct pxprpc_serilizer
*ser
){
75 double val
=*(double *)ser
->buf
+ser
->pos
;
79 extern struct pxprpc_bytes
*pxprpc_ser_get_bytes(struct pxprpc_serilizer
*ser
){
80 int len
=*(ser
->buf
+ser
->pos
);
83 len
=*(uint32_t *)(ser
->buf
+ser
->pos
);
86 struct pxprpc_bytes
*val
=(struct pxprpc_bytes
*)pxprpc__malloc(4+len
);
88 memcpy(&val
->data
,ser
->buf
+ser
->pos
,len
);
89 ser
->pos
+=val
->length
;