size_t spc_serialize_value(writer_t* writer, spc_value_t value) { size_t bytes_written = 0; bytes_written += spc_write_uint32(writer, value.type); switch (value.type) { case SPC_TYPE_NULL: break; case SPC_TYPE_BOOL: bytes_written += spc_write_uint32(writer, value.value.u64); break; case SPC_TYPE_UINT64: bytes_written += spc_write_uint64(writer, value.value.u64); break; case SPC_TYPE_INT64: bytes_written += spc_write_int64(writer, value.value.i64); break; case SPC_TYPE_DOUBLE: bytes_written += spc_write_double(writer, value.value.dbl); break; case SPC_TYPE_STRING: bytes_written += spc_write_uint32(writer, strlen(value.value.str) + 1); bytes_written += spc_write_str(writer, value.value.str); break; case SPC_TYPE_ARRAY: bytes_written += spc_write_array(writer, value.value.array); break; case SPC_TYPE_DICT: bytes_written += spc_write_dict(writer, value.value.dict); break; case SPC_TYPE_FD: case SPC_TYPE_SEND_PORT: case SPC_TYPE_RECV_PORT: spc_write_port(writer, value.value.port); break; case SPC_TYPE_UUID: bytes_written += spc_write(writer, value.value.ptr, 0x10); break; case SPC_TYPE_DATA: bytes_written += spc_write_uint32(writer, value.value.data.size); bytes_written += spc_write_padded(writer, value.value.data.ptr, value.value.data.size); break; default: printf("Unsupported value type: 0x%x\n", value.type); } return bytes_written; }
static void pwrite( int port, int data ) { spc_write_port( snes_spc, stime++, port, data ); }