blob: c967812707c13dcbe2a2a690a664151355982ef8 [file] [log] [blame]
MG Mud User88f12472016-06-24 23:31:02 +02001VORLAEUFIG, GESCHUETZT
2SYNOPSIS
3 #include <sys/rtlimits.h>
4
5 mixed limited(closure fun);
6 mixed limited(closure fun, int tag, int value, ...);
7 mixed limited(closure fun, int *limits [, mixed *args]);
8
9BESCHREIBUNG
10 limited() ruft die Funktion <fun> mit den bezeichneten Argumenten
11 <args> auf und fuehrt sie mit den gegebenen Laufzeitlimiten aus.
12
13 Beim Ende der Funktion <fun> werden die momentan aktiven
14 Laufzeitlimiten wiederhergestellt. limited() liefert den
15 Rueckgabewert der Closure <fun> zurueck.
16
17 Die Laufzeitlimiten koennen in zwei Formen angegeben werden: als
18 Array (wie es von query_limits() geliefert wird) oder als Liste von
19 Werten mit Tags. Wird limited() ohne Angabe von Limits aufgerufen,
20 gelten die Laufzeitlimiten als 'unlimitiert'.
21
22 Die Limiteneinstellung kennt drei spezielle Werte aus <rtlimits.h>:
23 LIMIT_UNLIMITED: es gibt kein Limit
24 LIMIT_KEEP: das zuletzt gesetzte Limit wird beibehalten
25 LIMIT_DEFAULT: die 'globalen' Limiten werden verwendet
26
27 Fuer LIMIT_COST, die Spezialwerte haben diese Bedeutung:
28 LIMIT_UNLIMITED: die Ausfuehrung kosten lediglich einen Tick
29 LIMIT_KEEP: LIMIT_COST wird auf 0 gesetzt
30 LIMIT_DEFAULT: LIMIT_COST wird auf -100 gesetzt
31
32 limited() erzeugt eine Schutzverletzung ("limited", current_object,
33 fun, limits-array).
34
35BEMERKUNGEN:
36 Diese Funktion kann bei uns mudlibweit genutzt werden. Allerdings wird
37 nur die _Reduktion_ von LIMIT_EVAL zugelassen, alle anderen Limits
38 duerfen _nicht_ veraendert werden. Hierbei ist zu beachten, dass das
39 Limit fuer LIMIT_EVAL um min. 1000 Ticks unter den noch verfuegbaren
40 Ticks liegen muss (get_eval_cost()).
41 Fuer LIMIT_COST sind nur 0 und -100 zugelassen.
42
43BEISPIELE
44 limited(#'function)
45 --> fuehrt die Funktion ohne Limiten aus.
46
47 limited(#'function, ({ 200000 }), "foo")
48 --> fuehrt die Funktion mit einem Eval-Kosten Limit von 200000 Ticks
49 aus. Die Funktion wird als 'function("foo")' aufgerufen.
50
51 limited(lambda(0, ({#'function, "foo"})), LIMIT_EVAL, 200000)
52 --> fuehrt die Funktion mit einem Eval-Kosten Limit von 200000 Ticks
53 aus. Die Funktion wird als 'function("foo")' aufgerufen.
54
55AENDERUNGEN
56 Eingefuehrt in LDMud 3.2.7.
57 LDMud 3.3.563 fuehrte LIMIT_COST ein.
58
59SIEHE AUCH
60 query_limits(E), set_limits(E)
61 get_eval_cost(E)
62
6316.05.2007, Zesstra
64