Automatisch erzeugte Manpages.
Damit nicht jeder sphinx auf dem Rechner haben muss,
behalten wir bis auf weiteres die aus den .rst
erzeugten Manpoages auch im Repo.
Change-Id: Id556c0d11cf5f79659d8350952ce1c014d81ea44
diff --git a/doc/sefun/shadow b/doc/sefun/shadow
index 9309dea..2b7032c 100644
--- a/doc/sefun/shadow
+++ b/doc/sefun/shadow
@@ -1,143 +1,162 @@
-FUNKTION:
- object shadow(object ob, int flag)
-ARGUMENTE:
- object ob - das vom shadow betroffene Objekt
- int flag - 0 fuer eine Shadow-Existenzabfrage
- 1 fuer Shadow durch previous_object()
-
-BESCHREIBUNG:
- Wenn <flag> nicht 0 ist, wird das aktuelle Objekt dem Objekt obj
- als Shadow uebergeworfen. Bei Erfolg wird das geshadowte Objekt
- zurueckgegeben, sonst 0.
- Wenn <flag> 0 ist, wird entweder 0 oder das geshadowte Objekt
- zurueck gegeben.
-
- Wenn ein Objekt A ein Objekt B beschattet, werden alle call_other() fuer
- B auf A umgeleitet. Wenn die an B gerufene Funktion in A existiert, so
- wird sie in A gerufen, bei Nichtexistenz in B.
- A ist das einzige Objekt, welche die beschatteten Funktionen mit
- call_other() in B aufrufen kann, selbst B kann nicht per call_other()
- diese Funktion rufen.
- Alle intern verwendeten Funktionen arbeiten jedoch weiterhin normal.
-
- Das aufrufende Objekt muss vom Master-Objekt die Erlaubnis haben,
- als Shadow zu wirken.
-
- Es gibt folgende Kriterien fuer eine erfolgreiche Beschattung:
- - das zu beschattende Objekt ob:
- - ist weder ein access_rights-Objekt noch ein ROOT-Objekt
- - gibt beim Aufruf von query_prevent_shadow(beschatter) eine 0
- zurueck
- - beschattet selbst niemanden
- - hat kein '#pragma no_shadow' gesetzt
- - der Beschatter:
- - wird nicht selbst (direkt) beschattet
- - beschattet noch niemanden (sonst folgt direkter Abbruch)
- - hat kein environment()
- - definiert/beschattet keine Methode, die im beschatteten Objekt ob
- als nomask definiert ist
-
- Beschattet man ein Objekt A mit einem Objekt B und dann das Objekt A
- zusaetzlich mit einem Objekt C, so wird eine Beschattungshierarchie
- erstellt:
-
- B macht shadow(A, 1)
- B->A
- C macht shadow(A, 1)
- C->B->A
-
-BEISPIELE:
- // wenn: B beschattet A, dann
- shadow(find_object(A), 0) == B
+shadow()
+********
- // 3 Objekte beschatten in Hierarchie (liegt auch im Pfad)
- --- aa.c ---
- void fun() {
- printf("%O [a] fun()\n", this_object());
- }
+FUNKTION
+========
- void fun3() {
- printf("%O [a] fun3()\n", this_object());
- }
+ object shadow(object ob, int flag)
- --- bb.c ---
- int fun() {
- printf("%O [b] fun()\n", this_object());
- find_object("/doc/beispiele/shadow/aa")->fun();
- }
- void fun2() {
- printf("%O [b] fun2()\n", this_object());
- find_object("/doc/beispiele/shadow/aa")->fun3();
- this_object()->fun3();
- }
+ARGUMENTE
+=========
- void do_shadow(object target) { shadow(target, 1); }
+ object ob - das vom shadow betroffene Objekt
+ int flag - 0 fuer eine Shadow-Existenzabfrage
+ 1 fuer Shadow durch previous_object()
- --- cc.c ---
- int fun() {
- printf("%O [c] fun()\n", this_object());
- find_object("/doc/beispiele/shadow/aa")->fun();
- }
- void fun3() {
- printf("%O [c] fun3()\n", this_object());
- }
+BESCHREIBUNG
+============
- void do_shadow(object target) { shadow(target, 1); }
+ Wenn <flag> nicht 0 ist, wird das aktuelle Objekt dem Objekt obj
+ als Shadow uebergeworfen. Bei Erfolg wird das geshadowte Objekt
+ zurueckgegeben, sonst 0.
+ Wenn <flag> 0 ist, wird entweder 0 oder das geshadowte Objekt
+ zurueck gegeben.
- // darauf arbeitender Code
+ Wenn ein Objekt A ein Objekt B beschattet, werden alle call_other() fuer
+ B auf A umgeleitet. Wenn die an B gerufene Funktion in A existiert, so
+ wird sie in A gerufen, bei Nichtexistenz in B.
+ A ist das einzige Objekt, welche die beschatteten Funktionen mit
+ call_other() in B aufrufen kann, selbst B kann nicht per call_other()
+ diese Funktion rufen.
+ Alle intern verwendeten Funktionen arbeiten jedoch weiterhin normal.
- object a, b, c;
+ Das aufrufende Objekt muss vom Master-Objekt die Erlaubnis haben,
+ als Shadow zu wirken.
- destruct("/doc/beispiele/shadow/aa");
- a = load_object("/doc/beispiele/shadow/aa");
- destruct("/doc/beispiele/shadow/bb");
- b = load_object("/doc/beispiele/shadow/bb");
- destruct("/doc/beispiele/shadow/cc");
- c = load_object("/doc/beispiele/shadow/cc");
+ Es gibt folgende Kriterien fuer eine erfolgreiche Beschattung:
+ - das zu beschattende Objekt ob:
+ - ist weder ein access_rights-Objekt noch ein ROOT-Objekt
+ - gibt beim Aufruf von query_prevent_shadow(beschatter) eine 0
+ zurueck
+ - beschattet selbst niemanden
+ - hat kein '#pragma no_shadow' gesetzt
+ - der Beschatter:
+ - wird nicht selbst (direkt) beschattet
+ - beschattet noch niemanden (sonst folgt direkter Abbruch)
+ - hat kein environment()
+ - definiert/beschattet keine Methode, die im beschatteten Objekt ob
+ als nomask definiert ist
- b->do_shadow(a);
- c->do_shadow(a);
- printf("--- a->fun() ---\n");
- a->fun();
- printf("--- b->fun() ---\n");
- b->fun();
- printf("--- c->fun() ---\n");
- c->fun();
- printf("--- b->fun2() ---\n");
- b->fun2();
+ Beschattet man ein Objekt A mit einem Objekt B und dann das Objekt A
+ zusaetzlich mit einem Objekt C, so wird eine Beschattungshierarchie
+ erstellt:
- // ... und seine Ausgabe:
+ B macht shadow(A, 1)
+ B->A
+ C macht shadow(A, 1)
+ C->B->A
- --- a->fun() ---
- /doc/beispiele/shadow/cc [c] fun()
- /doc/beispiele/shadow/bb [b] fun()
- /doc/beispiele/shadow/aa [a] fun()
- --- b->fun() ---
- /doc/beispiele/shadow/cc [c] fun()
- /doc/beispiele/shadow/bb [b] fun()
- /doc/beispiele/shadow/aa [a] fun()
- --- c->fun() ---
- /doc/beispiele/shadow/cc [c] fun()
- /doc/beispiele/shadow/bb [b] fun()
- /doc/beispiele/shadow/aa [a] fun()
- --- b->fun2() ---
- /doc/beispiele/shadow/bb [b] fun2()
- /doc/beispiele/shadow/aa [a] fun3()
- /doc/beispiele/shadow/cc [c] fun3()
- // Der erste Aufruf von b::fun2() in a findet sofort a::fun3()! Der
- // Driver nimmt an, dass alle Shadows ab c bei Rufen von b nach a
- // schon ihre Chance hatten.
- // Der zweite Aufruf allerdings ist auf b und wird beim Durchgeben
- // an a von c uebernommen.
+BEISPIELE
+=========
-SIEHE AUCH:
- Generell: shadow(E)
- Rechte: query_allow_shadow(M), query_prevent_shadow(L)
- Informationen: query_shadowing(E)
+ // wenn: B beschattet A, dann
+ shadow(find_object(A), 0) == B
-8.Aug 2007 Gloinson
\ No newline at end of file
+
+ // 3 Objekte beschatten in Hierarchie (liegt auch im Pfad)
+ --- aa.c ---
+ void fun() {
+ printf("%O [a] fun()\n", this_object());
+ }
+
+ void fun3() {
+ printf("%O [a] fun3()\n", this_object());
+ }
+
+ --- bb.c ---
+ int fun() {
+ printf("%O [b] fun()\n", this_object());
+ find_object("/doc/beispiele/shadow/aa")->fun();
+ }
+
+ void fun2() {
+ printf("%O [b] fun2()\n", this_object());
+ find_object("/doc/beispiele/shadow/aa")->fun3();
+ this_object()->fun3();
+ }
+
+ void do_shadow(object target) { shadow(target, 1); }
+
+ --- cc.c ---
+ int fun() {
+ printf("%O [c] fun()\n", this_object());
+ find_object("/doc/beispiele/shadow/aa")->fun();
+ }
+
+ void fun3() {
+ printf("%O [c] fun3()\n", this_object());
+ }
+
+ void do_shadow(object target) { shadow(target, 1); }
+
+ // darauf arbeitender Code
+
+ object a, b, c;
+
+ destruct("/doc/beispiele/shadow/aa");
+ a = load_object("/doc/beispiele/shadow/aa");
+ destruct("/doc/beispiele/shadow/bb");
+ b = load_object("/doc/beispiele/shadow/bb");
+ destruct("/doc/beispiele/shadow/cc");
+ c = load_object("/doc/beispiele/shadow/cc");
+
+ b->do_shadow(a);
+ c->do_shadow(a);
+ printf("--- a->fun() ---\n");
+ a->fun();
+ printf("--- b->fun() ---\n");
+ b->fun();
+ printf("--- c->fun() ---\n");
+ c->fun();
+ printf("--- b->fun2() ---\n");
+ b->fun2();
+
+ // ... und seine Ausgabe:
+
+ --- a->fun() ---
+ /doc/beispiele/shadow/cc [c] fun()
+ /doc/beispiele/shadow/bb [b] fun()
+ /doc/beispiele/shadow/aa [a] fun()
+ --- b->fun() ---
+ /doc/beispiele/shadow/cc [c] fun()
+ /doc/beispiele/shadow/bb [b] fun()
+ /doc/beispiele/shadow/aa [a] fun()
+ --- c->fun() ---
+ /doc/beispiele/shadow/cc [c] fun()
+ /doc/beispiele/shadow/bb [b] fun()
+ /doc/beispiele/shadow/aa [a] fun()
+ --- b->fun2() ---
+ /doc/beispiele/shadow/bb [b] fun2()
+ /doc/beispiele/shadow/aa [a] fun3()
+ /doc/beispiele/shadow/cc [c] fun3()
+
+ // Der erste Aufruf von b::fun2() in a findet sofort a::fun3()! Der
+ // Driver nimmt an, dass alle Shadows ab c bei Rufen von b nach a
+ // schon ihre Chance hatten.
+ // Der zweite Aufruf allerdings ist auf b und wird beim Durchgeben
+ // an a von c uebernommen.
+
+
+SIEHE AUCH
+==========
+
+ Generell: shadow(E)
+ Rechte: query_allow_shadow(M), query_prevent_shadow(L)
+ Informationen: query_shadowing(E)
+
+8.Aug 2007 Gloinson