コード例 #1
0
ファイル: event.c プロジェクト: et4te/memory-pool-system
Res EventWrite(Event event, mps_lib_FILE *stream)
{
  Res res;
  
  if (event == NULL) return ResFAIL;
  if (stream == NULL) return ResFAIL;

  res = EVENT_CLOCK_WRITE(stream, event->any.clock);
  if (res != ResOK)
    return res;

  switch (event->any.code) {

#define EVENT_WRITE_PARAM(name, index, sort, ident) \
  EVENT_WRITE_PARAM_##sort(name, index, sort, ident)

#define EVENT_WRITE(X, name, code, always, kind) \
  case code: \
    res = WriteF(stream, " $S", #name, \
                 EVENT_##name##_PARAMS(EVENT_WRITE_PARAM, name) \
                 NULL); \
    if (res != ResOK) return res; \
    break;
  EVENT_LIST(EVENT_WRITE, X)

  default:
    res = WriteF(stream, " <unknown code $U>", event->any.code, NULL);
    if (res != ResOK) return res;
    /* TODO: Hexdump unknown event contents. */
    break;
  }
  
  return ResOK;
}
コード例 #2
0
ファイル: event.c プロジェクト: aseaday/mps-temporary
Res EventDescribe(Event event, mps_lib_FILE *stream, Count depth)
{
  Res res;

  /* TODO: Some sort of EventCheck would be good */
  if (event == NULL)
    return ResFAIL;
  if (stream == NULL)
    return ResFAIL;

  res = WriteF(stream, depth,
               "Event $P {\n", (WriteFP)event,
               "  code $U\n", (WriteFU)event->any.code,
               "  clock ", NULL);
  if (res != ResOK)
    return res;
  res = EVENT_CLOCK_WRITE(stream, depth, event->any.clock);
  if (res != ResOK)
    return res;
  res = WriteF(stream, depth, "\n  size $U\n", (WriteFU)event->any.size, NULL);
  if (res != ResOK)
    return res;

  switch (event->any.code) {

#define EVENT_DESC_PARAM(name, index, sort, ident) \
                 "\n  $S", (WriteFS)#ident, \
                 EVENT_WRITE_PARAM_##sort(name, index, sort, ident)

#define EVENT_DESC(X, name, _code, always, kind) \
  case _code: \
    res = WriteF(stream, depth, \
                 "  event \"$S\"", (WriteFS)#name, \
                 EVENT_##name##_PARAMS(EVENT_DESC_PARAM, name) \
                 NULL); \
    if (res != ResOK) \
      return res; \
    break;

  EVENT_LIST(EVENT_DESC, X)

  default:
    res = WriteF(stream, depth, "  event type unknown", NULL);
    if (res != ResOK)
      return res;
    /* TODO: Hexdump unknown event contents. */
    break;
  }
  
  res = WriteF(stream, depth,
               "\n} Event $P\n", (WriteFP)event,
               NULL);
  return res;
}