blob: 1155af15672a35411e29362d2840e8298ab9ef09 [file] [log] [blame]
MG Mud User88f12472016-06-24 23:31:02 +02001VORLAEUFIG, GESCHUETZT
2SYNOPSIS
Zesstrab6ac9f62020-01-21 11:11:16 +01003 #include <rtlimits.h>
MG Mud User88f12472016-06-24 23:31:02 +02004
Zesstrab6ac9f62020-01-21 11:11:16 +01005 mixed limited(closure fun)
6 mixed limited(closure fun, int tag, int value, ...)
7 mixed limited(closure fun, int *limits)
8 mixed limited(closure fun, int *limits, mixed *args)
MG Mud User88f12472016-06-24 23:31:02 +02009
10BESCHREIBUNG
11 limited() ruft die Funktion <fun> mit den bezeichneten Argumenten
Zesstrab6ac9f62020-01-21 11:11:16 +010012 <args> auf und fuehrt sie mit den gegebenen Laufzeitlimitierungen aus.
MG Mud User88f12472016-06-24 23:31:02 +020013
14 Beim Ende der Funktion <fun> werden die momentan aktiven
Zesstrab6ac9f62020-01-21 11:11:16 +010015 Laufzeitlimitierungen wiederhergestellt. limited() liefert den
MG Mud User88f12472016-06-24 23:31:02 +020016 Rueckgabewert der Closure <fun> zurueck.
17
Zesstrab6ac9f62020-01-21 11:11:16 +010018 Die Laufzeitlimitierungen koennen in zwei Formen angegeben werden:
19 * als Array (wie es von query_limits() geliefert wird) oder
20 * als Liste von Werten mit Tags.
21 Wird limited() ohne Angabe von Limits aufgerufen, gelten die
22 Laufzeitlimiten als 'unlimitiert'.
MG Mud User88f12472016-06-24 23:31:02 +020023
Zesstrab6ac9f62020-01-21 11:11:16 +010024 Die Limitierung kennt drei spezielle Werte aus <rtlimits.h>:
MG Mud User88f12472016-06-24 23:31:02 +020025 LIMIT_UNLIMITED: es gibt kein Limit
26 LIMIT_KEEP: das zuletzt gesetzte Limit wird beibehalten
Zesstrab6ac9f62020-01-21 11:11:16 +010027 LIMIT_DEFAULT: die 'globalen' Limitierungen werden verwendet
MG Mud User88f12472016-06-24 23:31:02 +020028
Zesstrab6ac9f62020-01-21 11:11:16 +010029 Fuer LIMIT_COST haben folgende Spezialwerte eine Bedeutung:
MG Mud User88f12472016-06-24 23:31:02 +020030 LIMIT_UNLIMITED: die Ausfuehrung kosten lediglich einen Tick
31 LIMIT_KEEP: LIMIT_COST wird auf 0 gesetzt
32 LIMIT_DEFAULT: LIMIT_COST wird auf -100 gesetzt
33
34 limited() erzeugt eine Schutzverletzung ("limited", current_object,
35 fun, limits-array).
36
MG Mud User88f12472016-06-24 23:31:02 +020037
38BEISPIELE
39 limited(#'function)
Zesstrab6ac9f62020-01-21 11:11:16 +010040 --> fuehrt die Funktion ohne Limits aus.
MG Mud User88f12472016-06-24 23:31:02 +020041
42 limited(#'function, ({ 200000 }), "foo")
Zesstrab6ac9f62020-01-21 11:11:16 +010043 --> fuehrt die Funktion mit einem Eval-Kosten-Limit von 200000 Ticks
MG Mud User88f12472016-06-24 23:31:02 +020044 aus. Die Funktion wird als 'function("foo")' aufgerufen.
45
46 limited(lambda(0, ({#'function, "foo"})), LIMIT_EVAL, 200000)
Zesstrab6ac9f62020-01-21 11:11:16 +010047 --> fuehrt die Funktion mit einem Eval-Kosten-Limit von 200000 Ticks
MG Mud User88f12472016-06-24 23:31:02 +020048 aus. Die Funktion wird als 'function("foo")' aufgerufen.
49
Zesstrab6ac9f62020-01-21 11:11:16 +010050GESCHICHTE
MG Mud User88f12472016-06-24 23:31:02 +020051 Eingefuehrt in LDMud 3.2.7.
52 LDMud 3.3.563 fuehrte LIMIT_COST ein.
Zesstrab6ac9f62020-01-21 11:11:16 +010053 LDMud 3.5.0 fuehrte LIMIT_MEMORY ein.
MG Mud User88f12472016-06-24 23:31:02 +020054
55SIEHE AUCH
56 query_limits(E), set_limits(E)