} else {
final Class<?> c = o.getClass();
assert c != null;
ci = Classes.getSuperClassInfo(c);
}
Arithmetic a = null;
final Changer<?> changer;
final Class<?>[] cs;
if (o == null || ci == null || (a = ci.getMath()) != null) {
boolean changed = false;
for (final Object d : delta) {
if (o == null || ci == null) {
final Class<?> c = d.getClass();
assert c != null;
ci = Classes.getSuperClassInfo(c);
if (ci.getMath() != null)
o = d;
changed = true;
continue;
}
final Class<?> r = ci.getMathRelativeType();
assert a != null && r != null : ci;
final Object diff = Converters.convert(d, r);
if (diff != null) {
if (mode == ChangeMode.ADD)
o = a.add(o, diff);
else
o = a.subtract(o, diff);
changed = true;
}
}
if (changed)
set(e, o);