SYNOPSIS
#include <rtlimits.h>
mixed limited(closure fun)
mixed limited(closure fun, int tag, int value, ...)
mixed limited(closure fun, int *limits)
mixed limited(closure fun, int *limits, mixed *args)
DESCRIPTION
Call the function <fun> with any given <args> as parameters,
and execute it with the given runtime limits.
After the function exits, the currently active limits are restored.
Result of the efun is the result of the closure call.
The runtime limits can be given in two ways: as an array (like the
one returned from query_limits(), or as a list of tagged values. If
the efun is used without any limit specification, all limits are
supposed to be 'unlimited'.
The limit settings recognize three special values:
LIMIT_UNLIMITED: the limit is deactivated
LIMIT_KEEP: the former setting is kept
LIMIT_DEFAULT: the 'global' default setting is used.
For LIMIT_COST, the special values have these meaning:
LIMIT_UNLIMITED: at maximum 1 tick is accounted
LIMIT_KEEP: LIMIT_COST is set to 0
LIMIT_DEFAULT: LIMIT_COST is set to -100
The efun causes a privilege violation ("limited", current_object,
fun, limits-array).
EXAMPLES
limited(#'function)
--> executes function with no limits at all
limited(#'function, ({ 200000 }), "foo")
--> executes function with an eval_cost limit of 200000, and
calls function as <function>("foo").
limited(lambda(0, ({#'function, "foo"})), LIMIT_EVAL, 200000)
--> executes function with an eval_cost limit of 200000, and
calls function as <function>("foo").
HISTORY
Introduced in LDMud 3.2.7.
LDMud 3.3.563 introduced LIMIT_COST.
LDMud 3.3.677 introduced LIMIT_MAPPING_KEYS, LIMIT_MAPPING_SIZE.
LDMud 3.5.0 introduced LIMIT_MEMORY.
SEE ALSO
query_limits(E), set_limits(E)
|