This efun is mostly used in the following context
for(ob=first_inventory(container);ob;ob=next_inventory(ob)) {
<some actions>
}
If you use such calls frequently then it would be very useful
to use a preprocessor macro
#define FORALL(x, y) for(x=first_inventory(y);x;x=next_inventory(x))
So the above example could be written like this
FORALL(ob, container) {
<some actions>
}
Warning: If the object ob is moved inside <some actions>, then
next_inventory() will return an object from the new inventory
of ob. You also shouldn't call next_inventory() on destructed
objects. So in case of move and/or destruction the following
is a better solution:
for(ob=first_inventory(container);ob;) {
next=next_inventory(ob);
<some actions and moves and/or removes>
ob=next;
}