forked from bartvdbraak/blender
220 lines
7.5 KiB
C
220 lines
7.5 KiB
C
|
/*
|
||
|
**
|
||
|
*/
|
||
|
|
||
|
#include <stdlib.h>
|
||
|
|
||
|
#include "v_cmd_gen.h"
|
||
|
|
||
|
#if !defined(V_GENERATE_FUNC_MODE)
|
||
|
|
||
|
#include "verse.h"
|
||
|
#include "v_pack.h"
|
||
|
|
||
|
VNOPackedParams * verse_method_call_pack(unsigned int param_count, const VNOParamType *param_type, const VNOParam *params)
|
||
|
{
|
||
|
unsigned int i, j, buffer_pos;
|
||
|
uint8 *buf;
|
||
|
|
||
|
buf = malloc(1500 + 8 * 16);
|
||
|
buffer_pos = vnp_raw_pack_uint16(buf, 0);
|
||
|
for(i = 0; i < param_count; i++)
|
||
|
{
|
||
|
switch(param_type[i])
|
||
|
{
|
||
|
case VN_O_METHOD_PTYPE_INT8 :
|
||
|
buffer_pos += vnp_raw_pack_uint8(&buf[buffer_pos], params[i].vint8);
|
||
|
break;
|
||
|
case VN_O_METHOD_PTYPE_INT16 :
|
||
|
buffer_pos += vnp_raw_pack_uint16(&buf[buffer_pos], params[i].vint16);
|
||
|
break;
|
||
|
case VN_O_METHOD_PTYPE_INT32 :
|
||
|
buffer_pos += vnp_raw_pack_uint32(&buf[buffer_pos], params[i].vint32);
|
||
|
break;
|
||
|
case VN_O_METHOD_PTYPE_UINT8 :
|
||
|
buffer_pos += vnp_raw_pack_uint8(&buf[buffer_pos], params[i].vuint8);
|
||
|
break;
|
||
|
case VN_O_METHOD_PTYPE_UINT16 :
|
||
|
buffer_pos += vnp_raw_pack_uint16(&buf[buffer_pos], params[i].vuint16);
|
||
|
break;
|
||
|
case VN_O_METHOD_PTYPE_UINT32 :
|
||
|
buffer_pos += vnp_raw_pack_uint32(&buf[buffer_pos], params[i].vuint32);
|
||
|
break;
|
||
|
case VN_O_METHOD_PTYPE_REAL32 :
|
||
|
buffer_pos += vnp_raw_pack_real32(&buf[buffer_pos], params[i].vreal32);
|
||
|
break;
|
||
|
case VN_O_METHOD_PTYPE_REAL64 :
|
||
|
buffer_pos += vnp_raw_pack_real64(&buf[buffer_pos], params[i].vreal64);
|
||
|
break;
|
||
|
case VN_O_METHOD_PTYPE_STRING :
|
||
|
buffer_pos += vnp_raw_pack_string(&buf[buffer_pos], params[i].vstring, (1500 + 8 * 16) - buffer_pos);
|
||
|
break;
|
||
|
case VN_O_METHOD_PTYPE_NODE :
|
||
|
buffer_pos += vnp_raw_pack_uint32(&buf[buffer_pos], params[i].vnode);
|
||
|
break;
|
||
|
case VN_O_METHOD_PTYPE_LAYER :
|
||
|
buffer_pos += vnp_raw_pack_uint16(&buf[buffer_pos], params[i].vlayer);
|
||
|
break;
|
||
|
case VN_O_METHOD_PTYPE_REAL32_VEC2 :
|
||
|
for(j = 0; j < 2; j++)
|
||
|
buffer_pos += vnp_raw_pack_real32(&buf[buffer_pos], params[i].vreal32_vec[j]);
|
||
|
break;
|
||
|
case VN_O_METHOD_PTYPE_REAL32_VEC3 :
|
||
|
for(j = 0; j < 3; j++)
|
||
|
buffer_pos += vnp_raw_pack_real32(&buf[buffer_pos], params[i].vreal32_vec[j]);
|
||
|
break;
|
||
|
case VN_O_METHOD_PTYPE_REAL32_VEC4 :
|
||
|
for(j = 0; j < 4; j++)
|
||
|
buffer_pos += vnp_raw_pack_real32(&buf[buffer_pos], params[i].vreal32_vec[j]);
|
||
|
break;
|
||
|
case VN_O_METHOD_PTYPE_REAL64_VEC2 :
|
||
|
for(j = 0; j < 2; j++)
|
||
|
buffer_pos += vnp_raw_pack_real64(&buf[buffer_pos], params[i].vreal64_vec[j]);
|
||
|
break;
|
||
|
case VN_O_METHOD_PTYPE_REAL64_VEC3 :
|
||
|
for(j = 0; j < 3; j++)
|
||
|
buffer_pos += vnp_raw_pack_real64(&buf[buffer_pos], params[i].vreal64_vec[j]);
|
||
|
break;
|
||
|
case VN_O_METHOD_PTYPE_REAL64_VEC4 :
|
||
|
for(j = 0; j < 4; j++)
|
||
|
buffer_pos += vnp_raw_pack_real64(&buf[buffer_pos], params[i].vreal64_vec[j]);
|
||
|
break;
|
||
|
case VN_O_METHOD_PTYPE_REAL32_MAT4 :
|
||
|
for(j = 0; j < 4; j++)
|
||
|
buffer_pos += vnp_raw_pack_real32(&buf[buffer_pos], params[i].vreal32_mat[j]);
|
||
|
break;
|
||
|
case VN_O_METHOD_PTYPE_REAL32_MAT9 :
|
||
|
for(j = 0; j < 9; j++)
|
||
|
buffer_pos += vnp_raw_pack_real32(&buf[buffer_pos], params[i].vreal32_mat[j]);
|
||
|
break;
|
||
|
case VN_O_METHOD_PTYPE_REAL32_MAT16 :
|
||
|
for(j = 0; j < 16; j++)
|
||
|
buffer_pos += vnp_raw_pack_real32(&buf[buffer_pos], params[i].vreal32_mat[j]);
|
||
|
break;
|
||
|
case VN_O_METHOD_PTYPE_REAL64_MAT4 :
|
||
|
for(j = 0; j < 4; j++)
|
||
|
buffer_pos += vnp_raw_pack_real64(&buf[buffer_pos], params[i].vreal64_mat[j]);
|
||
|
break;
|
||
|
case VN_O_METHOD_PTYPE_REAL64_MAT9 :
|
||
|
for(j = 0; j < 9; j++)
|
||
|
buffer_pos += vnp_raw_pack_real64(&buf[buffer_pos], params[i].vreal64_mat[j]);
|
||
|
break;
|
||
|
case VN_O_METHOD_PTYPE_REAL64_MAT16 :
|
||
|
for(j = 0; j < 16; j++)
|
||
|
buffer_pos += vnp_raw_pack_real64(&buf[buffer_pos], params[i].vreal64_mat[j]);
|
||
|
break;
|
||
|
}
|
||
|
if(buffer_pos > 1500)
|
||
|
{
|
||
|
free(buf);
|
||
|
return NULL;
|
||
|
}
|
||
|
}
|
||
|
vnp_raw_pack_uint16(buf, buffer_pos);
|
||
|
return buf;
|
||
|
}
|
||
|
|
||
|
boolean verse_method_call_unpack(const VNOPackedParams *data, unsigned int param_count, const VNOParamType *param_type, VNOParam *params)
|
||
|
{
|
||
|
unsigned int i, j, buffer_pos = 0, len;
|
||
|
uint16 size;
|
||
|
const uint8 *buf;
|
||
|
static char string[2048];
|
||
|
char *stringput = string;
|
||
|
|
||
|
buf = data;
|
||
|
buffer_pos += vnp_raw_unpack_uint16(buf, &size);
|
||
|
for(i = 0; i < param_count; i++)
|
||
|
{
|
||
|
switch(param_type[i])
|
||
|
{
|
||
|
case VN_O_METHOD_PTYPE_INT8 :
|
||
|
buffer_pos += vnp_raw_unpack_uint8(&buf[buffer_pos], ¶ms[i].vint8);
|
||
|
break;
|
||
|
case VN_O_METHOD_PTYPE_INT16 :
|
||
|
buffer_pos += vnp_raw_unpack_uint16(&buf[buffer_pos], ¶ms[i].vint16);
|
||
|
break;
|
||
|
case VN_O_METHOD_PTYPE_INT32 :
|
||
|
buffer_pos += vnp_raw_unpack_uint32(&buf[buffer_pos], ¶ms[i].vint32);
|
||
|
break;
|
||
|
case VN_O_METHOD_PTYPE_UINT8 :
|
||
|
buffer_pos += vnp_raw_unpack_uint8(&buf[buffer_pos], ¶ms[i].vuint8);
|
||
|
break;
|
||
|
case VN_O_METHOD_PTYPE_UINT16 :
|
||
|
buffer_pos += vnp_raw_unpack_uint16(&buf[buffer_pos], ¶ms[i].vuint16);
|
||
|
break;
|
||
|
case VN_O_METHOD_PTYPE_UINT32 :
|
||
|
buffer_pos += vnp_raw_unpack_uint32(&buf[buffer_pos], ¶ms[i].vuint32);
|
||
|
break;
|
||
|
case VN_O_METHOD_PTYPE_REAL32 :
|
||
|
buffer_pos += vnp_raw_unpack_real32(&buf[buffer_pos], ¶ms[i].vreal32);
|
||
|
break;
|
||
|
case VN_O_METHOD_PTYPE_REAL64 :
|
||
|
buffer_pos += vnp_raw_unpack_real64(&buf[buffer_pos], ¶ms[i].vreal64);
|
||
|
break;
|
||
|
case VN_O_METHOD_PTYPE_STRING :
|
||
|
params[i].vstring = stringput;
|
||
|
len = vnp_raw_unpack_string(&buf[buffer_pos], stringput, (1500 + 8 * 16) - buffer_pos, -1);
|
||
|
stringput += len;
|
||
|
buffer_pos += len;
|
||
|
break;
|
||
|
case VN_O_METHOD_PTYPE_NODE :
|
||
|
buffer_pos += vnp_raw_unpack_uint32(&buf[buffer_pos], ¶ms[i].vnode);
|
||
|
break;
|
||
|
case VN_O_METHOD_PTYPE_LAYER :
|
||
|
buffer_pos += vnp_raw_unpack_uint16(&buf[buffer_pos], ¶ms[i].vlayer);
|
||
|
break;
|
||
|
case VN_O_METHOD_PTYPE_REAL32_VEC2 :
|
||
|
for(j = 0; j < 2; j++)
|
||
|
buffer_pos += vnp_raw_unpack_real32(&buf[buffer_pos], ¶ms[i].vreal32_vec[j]);
|
||
|
break;
|
||
|
case VN_O_METHOD_PTYPE_REAL32_VEC3 :
|
||
|
for(j = 0; j < 3; j++)
|
||
|
buffer_pos += vnp_raw_unpack_real32(&buf[buffer_pos], ¶ms[i].vreal32_vec[j]);
|
||
|
break;
|
||
|
case VN_O_METHOD_PTYPE_REAL32_VEC4 :
|
||
|
for(j = 0; j < 4; j++)
|
||
|
buffer_pos += vnp_raw_unpack_real32(&buf[buffer_pos], ¶ms[i].vreal32_vec[j]);
|
||
|
break;
|
||
|
case VN_O_METHOD_PTYPE_REAL64_VEC2 :
|
||
|
for(j = 0; j < 2; j++)
|
||
|
buffer_pos += vnp_raw_unpack_real64(&buf[buffer_pos], ¶ms[i].vreal64_vec[j]);
|
||
|
break;
|
||
|
case VN_O_METHOD_PTYPE_REAL64_VEC3 :
|
||
|
for(j = 0; j < 3; j++)
|
||
|
buffer_pos += vnp_raw_unpack_real64(&buf[buffer_pos], ¶ms[i].vreal64_vec[j]);
|
||
|
break;
|
||
|
case VN_O_METHOD_PTYPE_REAL64_VEC4 :
|
||
|
for(j = 0; j < 4; j++)
|
||
|
buffer_pos += vnp_raw_unpack_real64(&buf[buffer_pos], ¶ms[i].vreal64_vec[j]);
|
||
|
break;
|
||
|
case VN_O_METHOD_PTYPE_REAL32_MAT4 :
|
||
|
for(j = 0; j < 4; j++)
|
||
|
buffer_pos += vnp_raw_unpack_real32(&buf[buffer_pos], ¶ms[i].vreal32_mat[j]);
|
||
|
break;
|
||
|
case VN_O_METHOD_PTYPE_REAL32_MAT9 :
|
||
|
for(j = 0; j < 9; j++)
|
||
|
buffer_pos += vnp_raw_unpack_real32(&buf[buffer_pos], ¶ms[i].vreal32_mat[j]);
|
||
|
break;
|
||
|
case VN_O_METHOD_PTYPE_REAL32_MAT16 :
|
||
|
for(j = 0; j < 16; j++)
|
||
|
buffer_pos += vnp_raw_unpack_real32(&buf[buffer_pos], ¶ms[i].vreal32_mat[j]);
|
||
|
break;
|
||
|
case VN_O_METHOD_PTYPE_REAL64_MAT4 :
|
||
|
for(j = 0; j < 4; j++)
|
||
|
buffer_pos += vnp_raw_unpack_real64(&buf[buffer_pos], ¶ms[i].vreal64_mat[j]);
|
||
|
break;
|
||
|
case VN_O_METHOD_PTYPE_REAL64_MAT9 :
|
||
|
for(j = 0; j < 9; j++)
|
||
|
buffer_pos += vnp_raw_unpack_real64(&buf[buffer_pos], ¶ms[i].vreal64_mat[j]);
|
||
|
break;
|
||
|
case VN_O_METHOD_PTYPE_REAL64_MAT16 :
|
||
|
for(j = 0; j < 16; j++)
|
||
|
buffer_pos += vnp_raw_unpack_real64(&buf[buffer_pos], ¶ms[i].vreal64_mat[j]);
|
||
|
break;
|
||
|
}
|
||
|
}
|
||
|
return TRUE;
|
||
|
}
|
||
|
#endif
|