...and where can I find the documentation to HeNEXT ?
HeNEXT is a macro (surprise!), defined in hv.h as
#define HeNEXT(he) (he)->hent_next
where
hent_next is a field in the following struct (also from hv.h):
typedef struct he HE;
/* ... */
/* entry in hash value chain */
struct he {
HE *hent_next; /* next entry in chain */
HEK *hent_hek; /* hash key */
SV *hent_val; /* scalar value that was hashed */
};
So basically
HeNEXT scoots along a linked list of hash entries (those belonging to a given bucket, to be precise). As you can see, the data structure only provides for travel in one direction. Therefore, I don't see an easy way to implement a
prev method. If I had to have it, I think I'd just accept the memory hit and use the
keys array-based implementation I described briefly in my OP. Then
prev reduces to decrementing a cursor variable.