The inherited user-data methods are extended as follows. FindUData
compares the family first, then sends the same message to children in
list order, returning the first nonzero object result or zero. Deeper
traversal depends on each child's implementation.
GetUData gets the attribute from the family if its UserData matches;
otherwise it returns TRUE on the first child returning nonzero. TRUE
indicates a match, not a successful attribute getter. Its udata message
field is ULONG. No match leaves caller storage untouched.
SetUData sets the family on a match, sends the method to every child,
and returns TRUE even if no object matches. Setter and child return
values are ignored.
SetUDataOnce sets the family on a match and returns TRUE, otherwise
visits children until one returns nonzero. It returns FALSE when none
match. FindUData, SetUData, and SetUDataOnce use IPTR comparison values.
Do not mutate or dispose of traversed children from callbacks during
these walks.
OM_ADDMEMBER uses AddTail; OM_REMMEMBER uses Remove. Version and
Revision both return 1 for Family. Other methods, including the Notify
persistence stubs, are inherited unless a subclass overrides them.