Example #1
0
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);})
Example #2
0
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);
}
Example #3
0
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);
}