int main (int argc, char **argv) #endif { #ifndef VXWORKS int numTrials; char *formatString; #endif int i; FORMATTER_PTR format; char data[MAX_DATA_SIZE]; /* No error checking if the format is too big */ void *dataPtr; IPC_VARCONTENT_TYPE vc; bzero(data, MAX_DATA_SIZE); #ifndef VXWORKS if (argc == 1) { fprintf(stderr, "Usage %s: <format_string> [num_trials]\n", argv[0]); exit(-1); } formatString = argv[1]; numTrials = (argc > 2 ? atoi(argv[2]) : DEFAULT_TRIALS); #endif IPC_initialize(); format = IPC_parseFormat(formatString); if (!format) { fprintf(stderr, "Illegal format string: %s\n", formatString); exit(-1); } /* Marshall tests */ printf("Marshalling trial with %s\n", formatString); printf(" Struct Size: %d, Buffer Size: %d (%s size)\n", x_ipc_dataStructureSize(format), (formatContainsPointers(format) ? -1 : x_ipc_bufferSize(format, NULL)), (x_ipc_sameFixedSizeDataBuffer(format) ? "fixed" : "variable")); TIME_TRIAL({ IPC_marshall(format, &data, &vc); IPC_freeByteArray(vc.content);})
void *x_ipc_decodeMsgData(CONST_FORMAT_PTR Format, DATA_MSG_PTR dataMsg, BOOLEAN keepData) { char *DataStruct=NULL; #if (!defined(LISP)) if (x_ipc_sameFixedSizeDataBuffer(Format)) { dataMsg->dataStruct = dataMsg->msgData; DataStruct = dataMsg->msgData; if (dataMsg->dataByteOrder == BYTE_ORDER) /* This is now a no op */ return ((void *)dataMsg->msgData); } #endif /* Have to keep it anyway, probably for sending after printing.*/ if (keepData) { DataStruct = NULL; dataMsg->dataStruct = NULL; } return x_ipc_decodeData(Format, dataMsg->msgData, 0, DataStruct, dataMsg->dataByteOrder, dataMsg->alignment, dataMsg->msgTotal); }
void x_ipc_encodeMsgData(CONST_FORMAT_PTR Format, const void *DataStruct, DATA_MSG_PTR dataMsg, int32 BStart) { dataMsg->dataStruct = (const char *)DataStruct; if (Format == NULL) { dataMsg->msgData = NULL; } else { BOOLEAN isLisp; LOCK_M_MUTEX; isLisp = IS_LISP_MODULE(); UNLOCK_M_MUTEX; if (!isLisp && x_ipc_sameFixedSizeDataBuffer(Format)) { dataMsg->msgData = (char *)DataStruct; } else { dataMsg->msgData = (char *)x_ipcMalloc((unsigned)dataMsg->msgTotal); x_ipc_encodeData(Format, DataStruct, dataMsg->msgData, BStart, dataMsg->msgTotal); } } dataMsg->vec = x_ipc_createVectorization(Format, (const char *)DataStruct,dataMsg->msgData, dataMsg->msgTotal); }