Manpages aus Driver aktualisiert
und mit unseren Erweiterungen vereinigt.
Div. Whitespace-Fixes
Aequivalenzcode entfernt.
Change-Id: Iff179ef570d3796ea39e6527825d091f31471888
diff --git a/doc/efun/filter b/doc/efun/filter
index 8f4467f..449f144 100644
--- a/doc/efun/filter
+++ b/doc/efun/filter
@@ -1,170 +1,159 @@
filter(E)
FUNKTION:
- mixed * filter (mixed *arg, string fun, string|object ob
- , mixed extra...)
- mixed * filter (mixed *arg, closure cl, mixed extra...)
- mixed * filter (mixed *arg, mapping map, mixed extra...)
+ mixed * filter(mixed *arg, string fun, string|object ob
+ , mixed extra...)
+ mixed * filter(mixed *arg, closure cl, mixed extra...)
+ mixed * filter(mixed *arg, mapping map, mixed extra...)
- string filter (string arg, string fun, string|object ob
- , mixed extra...)
- string filter (string arg, closure cl, mixed extra...)
- string filter (string arg, mapping map, mixed extra...)
+ string filter(string arg, string fun, string|object ob
+ , mixed extra...)
+ string filter(string arg, closure cl, mixed extra...)
+ string filter(string arg, mapping map, mixed extra...)
- mapping filter (mapping arg, string func, string|object ob
- , mixed extra...)
- mapping filter (mapping arg, closure cl, mixed extra...)
+ mapping filter(mapping arg, string func, string|object ob
+ , mixed extra...)
+ mapping filter(mapping arg, closure cl, mixed extra...)
+
PARAMETER:
- arr - zu filterndes Array/Mapping/String
- fun/cl - zu rufende Methode/Closure
- map - filterndes Mapping
- ob - Objekt/Dateiname, an dem Methode gerufen werden soll
- extra - weitere Parameter fuer Methode/Closure
+ arr - zu filterndes Array/Mapping/String
+ fun/cl - zu rufende Methode/Closure
+ map - filterndes Mapping
+ ob - Objekt/Dateiname, an dem Methode gerufen werden soll
+ extra - weitere Parameter fuer Methode/Closure
BESCHREIBUNG:
- Ruft fuer jedes Element des Arrays oder Mappings <arg> die Funktion
- <ob>-><func>() bzw. die Closure <cl> auf und liefert jene Elemente,
- fuer die die Funktion / Closure TRUE ergeben hat. Die <extra>
- Argumente werden als zusaetzliche Parameter an die Funktion
- uebergeben und duerfen keine Referenzen von Array- oder Mapping-
- Elementen sein (wie &(i[1]) ).
+ Ruft fuer jedes Element des Arrays oder Mappings <arg> die Funktion
+ <ob>-><func>() bzw. die Closure <cl> auf und liefert jene Elemente,
+ fuer die die Funktion / Closure TRUE ergeben hat. Die <extra>
+ Argumente werden als zusaetzliche Parameter an die Funktion
+ uebergeben und duerfen keine Referenzen von Array- oder Mapping-
+ Elementen sein (wie &(i[1]) ).
- Wird <ob> nicht angegeben oder ist es weder ein String noch ein
- Objekt, wird standardmaessig this_object() verwendet.
+ Wird <ob> nicht angegeben oder ist es weder ein String noch ein
+ Objekt, wird standardmaessig this_object() verwendet.
- Ist <arg> ein Array, wird <fun> mit jedem Element des Arrays als
- ersten Parameter aufgerufen, gefolgt von den <extra> Argumenten.
- Wenn das Resultat der Funktion TRUE ergibt, wird das Element in das
- Ergebnis der filter() Operation mit einbezogen.
+ Ist <arg> ein Array oder struct, wird <fun> mit jedem Element des
+ Arrays/der struct als ersten Parameter aufgerufen, gefolgt von den
+ <extra> Argumenten. Wenn das Resultat der Funktion TRUE ergibt, wird
+ das Element in das Ergebnis der filter() Operation mit einbezogen.
- Wird filter() mit einem Mapping <map> anstelle der Funktion <func>
- aufgerufen, wird jedes Element im Array <arg>, das ein Key von <map>
- ist, ins Ergebnis mit einbezogen.
+ Wird filter() mit einem Mapping <map> anstelle der Funktion <func>
+ aufgerufen, wird jedes Element im Array <arg>, das ein Key von <map>
+ ist, ins Ergebnis mit einbezogen.
- Wenn <arg> ein Mapping ist, wird die Funktion <func> mit jedem Key
- als erstem und (falls vorhanden) den Werten dieses Keys als restliche
- Parameter, gefolgt von den <extra> Argumenten, aufgerufen. Wenn die
- Funktion TRUE ergibt, wird das betreffende Element des Mappings ins
- Ergebnis aufgenommen.
+ Wenn <arg> ein Mapping ist, wird die Funktion <func> mit jedem Key
+ als erstem und (falls vorhanden) den Werten dieses Keys als zweitem
+ Parameter, gefolgt von den <extra> Argumenten, aufgerufen. Wenn die
+ Funktion TRUE ergibt, wird das betreffende Element des Mappings ins
+ Ergebnis aufgenommen.
- Abhaengig von der Groesse des Mappings <arg> erfolgt der Aufruf der
- Funktion auf drei unterschiedliche Arten:
+ Abhaengig von der Groesse des Mappings <arg> erfolgt der Aufruf der
+ Funktion auf drei unterschiedliche Arten:
- widthof(arg) == 0: ob->func(key, 0, extra,...);
- widthof(arg) == 1: ob->func(key, arg[key], extra, ...);
- widthof(arg) >1: ob->fund(key, ({arg[key,0]...arg[key, n-1]}),
- extra, ...);
+ widthof(arg) == 0: ob->func(key, 0, extra...)
+ == 1: ob->func(key, arg[key], extra...)
+ > 1: ob->func( key
+ , ({ arg[key,0] ...arg[key,width-1] })
+ , extra...)
- Der Vorteil dieser Vorgehensweise ist, dass beide Typen von
- multidimensionalen Mappings (Mappings mit mehreren Werte pro Key und
- Mappings aus Arrays) gleich verarbeitet werden koennen.
+ Der Vorteil dieser Vorgehensweise ist, dass beide Typen von
+ multidimensionalen Mappings (Mappings mit mehreren Werte pro Key und
+ Mappings aus Arrays) gleich verarbeitet werden koennen.
- Ist <arg> ein String, werden der Filterfunktion die einzelnen Zeichen des
- Strings uebergeben und nur jene Zeichen im zurueckgegebenen String
- aufgenommen, fuer die die Filterfunkton != 0 zurueckgibt.
+ Ist <arg> ein String, werden der Filterfunktion die einzelnen Zeichen
+ des Strings uebergeben und nur jene Zeichen im zurueckgegebenen
+ String aufgenommen, fuer die die Filterfunkton != 0 zurueckgibt.
+
AENDERUNGEN
- Eingefuehrt in LDMud 3.2.6. Die Funktion loest filter_array() ab.
+ Eingefuehrt in LDMud 3.2.6. Die Funktion loest filter_array() ab.
RUeCKGABEWERT:
- Gefiltertes Array mit allen die Filterbedingung erfuellenden Elementen.
+ Gefiltertes Array mit allen die Filterbedingung erfuellenden Elementen.
BEMERKUNGEN:
- (1) Achtung, die Elemente in 'arr' werden nicht tief kopiert, sind sie
- also selbst Arrays oder Mappings, so fuehrt eine spaetere Aenderung im
- Rueckgabe-Arrays zur Aenderung im Ursprungsarray:
+ (1) Achtung, die Elemente in 'arr' werden nicht tief kopiert, sind sie
+ also selbst Arrays oder Mappings, so fuehrt eine spaetere Aenderung im
+ Rueckgabe-Arrays zur Aenderung im Ursprungsarray:
- int *i, *j;
- i=({({1,2,3}),({4,5,6})});
- j=filter(i, #'sizeof); // filtert leere Arrays heraus
- j[0][0]=8;
+ int *i, *j;
+ i=({({1,2,3}),({4,5,6})});
+ j=filter(i, #'sizeof); // filtert leere Arrays heraus
+ j[0][0]=8;
- fuehrt zu: i==j==({({8,2,3}),({4,5,6})});
+ fuehrt zu: i==j==({({8,2,3}),({4,5,6})});
- (2) Das Kopieren in das Rueckgabemapping erfolgt fuer jedes Element nach
- Ausfuehrung der Filtermethode. Aenderungen der Werte im Array in dieser
- Methode (globale Variable/Uebergabe als Referenz an filter)
- schlagen sich also im Rueckgabearray nieder.
+ (2) Das Kopieren in das Rueckgabemapping erfolgt fuer jedes Element nach
+ Ausfuehrung der Filtermethode. Aenderungen der Werte im Array in dieser
+ Methode (globale Variable/Uebergabe als Referenz an filter)
+ schlagen sich also im Rueckgabearray nieder.
- (3) Fuer Arrays wirkt filter() wie filter_array(), fuer Mappings stellt
- filter() eine Verallgemeinerung von filter_indices() dar.
+ (3) Fuer Arrays wirkt filter() wie filter_array(), fuer Mappings stellt
+ filter() eine Verallgemeinerung von filter_indices() dar.
BEISPIEL:
- ### Filtere alle Lebewesen in einem Raum in ein Array ###
- filter(all_inventory(this_object()),#'living);
+ ### Filtere alle Lebewesen in einem Raum in ein Array ###
+ filter(all_inventory(this_object()),#'living);
+
+ ### Filtere alle tauben Spieler im Raum in ein Array ###
+ static int filter_isdeaf(object who) {
+ return (interactive(who) && who->QueryProp(P_DEAF));
+ }
+
+ filter(all_inventory(this_object()), #'filter_isdeaf);
- ### Filtere alle tauben Spieler im Raum in ein Array ###
- static int filter_isdeaf(object who) {
- return (interactive(who) && who->QueryProp(P_DEAF));
- }
-
- filter(all_inventory(this_object()), #'filter_isdeaf);
+ ### Filtern von Idlern (>=1 Sekunde idle) ###
+ // Folgend identische Resultate, aber andere Ansaetze:
+ #1: nutzt die Efun query_idle() als Lfun-Closure (ideal hier)
+ idle_usr = filter(users(), #'query_idle );
- ### Filtern von Idlern (>=1 Sekunde idle) ###
- // Folgend identische Resultate, aber andere Ansaetze:
+ #2: mit Filtermethode
+ int check_if_idle(object user) {
+ return query_idle(user);
+ }
- #1: nutzt die Efun query_idle() als Lfun-Closure (ideal hier)
- idle_usr = filter(users(), #'query_idle );
+ #2a: filtert mittels der Lfun im selben Objekt die Idler in das
+ Rueckgabearray
+ idle_usr = filter(users(), "check_if_idle");
+ idle_usr = filter(users(), "check_if_idle", this_object());
- #2: mit Filtermethode
- int check_if_idle(object user) {
- return query_idle(user);
- }
-
- #2a: filtert mittels der Lfun im selben Objekt die Idler in das
- Rueckgabearray
- idle_usr = filter(users(), "check_if_idle");
- idle_usr = filter(users(), "check_if_idle", this_object());
+ #2b: ruft die Lfun check_if_idle() als Lfun-Closure (Funktions-
+ pointer)
+ idle_usr = filter(users(), #'check_if_idle );
- #2b: ruft die Lfun check_if_idle() als Lfun-Closure (Funktions-
- pointer)
- idle_usr = filter(users(), #'check_if_idle );
+ #3: Nutzt eine Inline-Closure
+ idle_usr = filter(users(), function int (object user) {
+ return query_idle(user);
+ } );
- #3: Nutzt eine Inline-Closure
- idle_usr = filter(users(), function int (object user) {
- return query_idle(user);
- } );
+ ### Filtern von Idlern (>=20 Sekunden idle) mit Extraparameter ###
+ // Folgend identische Resultate, aber andere Ansaetze:
- ### Filtern von Idlern (>=20 Sekunden idle) mit Extraparameter ###
- // Folgend identische Resultate, aber andere Ansaetze:
+ #1: die Efun koennen wir nicht mehr direkt nutzen, weil sie
+ diesen Parameter nicht unterstuetzt
+ // idle_usr = filter(users(), #'query_idle );
- #1: die Efun koennen wir nicht mehr direkt nutzen, weil sie
- diesen Parameter nicht unterstuetzt
- // idle_usr = filter(users(), #'query_idle );
+ #2: mit separater Filtermethode ... mit neuem Parameter
+ int check_if_idle(object user, int length) {
+ return query_idle(user)>length;
+ }
- #2: mit separater Filtermethode ... mit neuem Parameter
- int check_if_idle(object user, int length) {
- return query_idle(user)>length;
- }
-
- #2a: filtert mittels der Lfun im selben Objekt die Idler in das
- Rueckgabearray ... mit drittem Parameter!
- idle_usr = filter(users(), "check_if_idle", this_object(), 20);
+ #2a: filtert mittels der Lfun im selben Objekt die Idler in das
+ Rueckgabearray ... mit drittem Parameter!
+ idle_usr = filter(users(), "check_if_idle", this_object(), 20);
- #2b: ruft die Lfun check_if_idle() als Lfun-Closure (Funktions-
- pointer)
- idle_usr = filter(users(), #'check_if_idle, 20);
+ #2b: ruft die Lfun check_if_idle() als Lfun-Closure (Funktions-
+ pointer)
+ idle_usr = filter(users(), #'check_if_idle, 20);
- #3: Nutzt eine Inline-Closure
- idle_usr = filter(users(), function int (object user, int length) {
- return (query_idle(user) > length);
- }, 20);
-
-
-AeQUIVALENZCODE (nicht empfohlen, nur zum Verstaendnis!):
- int i;
- mixed *ret; mixed *input;
-
- ret=allocate(0);
- i=sizeof(input);
- while(i--)
- if(ob->fun(input[i] [, extra1, extra2, ...]))
- // if(funcall(cl, input[i] [, extra1, extra2, ...]))
- // if(member(map, input[i]))
- ret+=({input[i]});
+ #3: Nutzt eine Inline-Closure
+ idle_usr = filter(users(), function int (object user, int length) {
+ return (query_idle(user) > length);
+ }, 20);
SIEHE AUCH:
Arrays: map(E)
@@ -176,5 +165,4 @@
transpose_array(E)
----------------------------------------------------------------------------
-09.04.2008, Zesstra
-
+23.09.2019, Zesstra