static void ClientArenaVarargs(ArgStruct args[MPS_ARGS_MAX], va_list varargs) { args[0].key = MPS_KEY_ARENA_SIZE; args[0].val.size = va_arg(varargs, Size); args[1].key = MPS_KEY_ARENA_CL_BASE; args[1].val.addr = va_arg(varargs, Addr); args[2].key = MPS_KEY_ARGS_END; AVER(ArgListCheck(args)); }
mps_res_t mps_fmt_create_k(mps_fmt_t *mps_fmt_o, mps_arena_t arena, mps_arg_s args[]) { Format format; Res res; ArenaEnter(arena); AVER(mps_fmt_o != NULL); AVERT(Arena, arena); AVER(ArgListCheck(args)); res = FormatCreate(&format, arena, args); ArenaLeave(arena); if (res != ResOK) return res; *mps_fmt_o = (mps_fmt_t)format; return MPS_RES_OK; }
Bool ArgPick(ArgStruct *argOut, ArgList args, Key key) { Index i; AVER(argOut != NULL); AVER(ArgListCheck(args)); AVERT(Key, key); for (i = 0; args[i].key != MPS_KEY_ARGS_END; ++i) if (args[i].key == key) goto found; return FALSE; found: *argOut = args[i]; for(;;) { args[i] = args[i + 1]; if (args[i].key == MPS_KEY_ARGS_END) break; ++i; } return TRUE; }
void ArgTrivVarargs(ArgStruct args[MPS_ARGS_MAX], va_list varargs) { UNUSED(varargs); args[0].key = MPS_KEY_ARGS_END; AVER(ArgListCheck(args)); }