[LAD] "enhanced event port" LV2 extension proposal

Krzysztof Foltman wdev at foltman.com
Sun Dec 2 01:26:57 UTC 2007

Dave Robillard wrote:
> I still don't see where you're getting all this messy code stuff.
> Adding 8 to a pointer isn't any more or less messy than adding 16 to a
> pointer.
uint32_t *p = &some_int_array[0];
p += 7;

Q: Where does p point now?
A: 28 bytes ahead of its previous value.

That's where the elegance-related problem lies (IMO).

If the struct size is 16, and you want to increase the pointer by 8 
bytes, you need to cast to char*, increase by 8, and cast back to 
LV2_EVENT_HEADER. That's what was (and is) bugging me.

  i += (events[i].size+7) >> 3;

is a bit nicer than:

  p = (LV2_EVENT_HDR *)((char *)p + ((p->size + 7) &~7));

to me. Still, it's just one line of code, and can be put inside of a 
macro or something, so the messiness might be perfectly bearable. I 
might also keep the current pointer as char * for easy incrementing, and 
cast to LV2_EVENT_HEADER * (or whatever) when needed.

Putting things in perspective, it's not even nearly as ugly as what goes 
on inside plugins' inner loops, so it might be perfectly acceptable ;)


More information about the Linux-audio-dev mailing list