Support fuer Mapper-Setmethoden
Setmethoden koennen zusammen mit einem neuen Modus SETMAPPED
eingetragen werden. In diesem Fall speichert die Setmethode
den Wert nicht selber, sondern gibt ihn nur zurueck und die
Propertyverwaltung speichert den neuen Wert.
Das ermoeglicht (wiederverwendbare, generische) Funktionen
als Mapper.
Change-Id: Ief259dc4ccad9bc0e9138ab964edeb6a2b408949
diff --git a/doc/lfun/Set b/doc/lfun/Set
index d654027..bef7161 100644
--- a/doc/lfun/Set
+++ b/doc/lfun/Set
@@ -67,14 +67,29 @@
Property nicht mehr ueber SetProp() aenderbar
(damit entfallen auch SET_METHOD, _set_'name')
+
+ SETMAPPED
+
+ Die Set-Methode speichert den Werte nicht selber, sondern gibt
+ ihn zurueck, das Property-System speichert ihn dann.
+ WARNUNG: Dieses Flag nicht per Hand manipulieren.
+
F_SET_METHOD
Aendert den Eintrag fuer eine SetMethod - eine Closure, die anstatt
des Setzens der Property beim Aufruf von SetProp mit 'Value'
aufgerufen wird.
+ F_SET_MAPPER
+ Setzt wie F_SET_METHOD eine Set-Methode (Closure), welche aber den Wert
+ der Property beim Aufruf nicht selber (durch Aufruf von Set()) setzt,
+ sondern den Wert zurueckgeben muss, der gesetzt werden soll.
+ Bsp. #'copy um vor dem Speichern eine Kopie zu erstellen
F_QUERY_METHOD
Aendert den Eintrag fuer eine QueryMethod - eine Closure, die anstatt
des Lesens der Property beim Aufruf von QueryProp aufgerufen wird.
-
+ Diese bekommt den gespeicherten Wert der Property uebergeben und muss
+ den an den Aufrufer von QueryProp() zurueckzugebenden Wert
+ zurueckgeben.
+ Bsp: #'copy, um eine Kopie des gespeicherten Wertes zurueckzugeben
RUeCKGABEWERT
=============
@@ -127,9 +142,7 @@
// Loeschen des SAVE-Flags
Set(P_XYZ, SAVE, F_MODE_AD);
-
-
- // Negieren des bisherigen SAVE-Flags
+ // Negieren (Umschalten) des bisherigen SAVE-Flags
Set(P_XYZ, SAVE, F_MODE);
// Hinweis: das Setzen des Flags funktioniert mittels F_MODE nur dann,
// wenn sichergestellt ist, dass es vorher nicht gesetzt war. Die
@@ -157,6 +170,12 @@
other->Set(P_XYZ, #'bar, F_QUERY_METHOD);
...
+ // Setzen/Nutzen eines Mappers (F_SET_MAPPER) zum Skalieren
+ int scale(int val) {return val * 100;}
+ Set(P_XYZ, #'scale, F_SET_MAPPER);
+ int unscale(int val) {return val / 100;}
+ Set(P_XYZ, #'unscale, F_QUERY_METHOD);
+
// Der Vollstaendigkeit halber sei das Aendern einer Property unter
// Umgehung von Set-Methoden angegeben. Es ist aber aus o.g. Gruenden
// zu empfehlen, diese Variante nicht zu verwenden.