On Tue, 11 Nov 2003, Miller Puckette wrote:
- Introducing one new atom type, generic and extendable.
either of these first two would require adding code to dozens of 'switch' statements both inside and outside Pd. Some code would run slower because of the extra cases to check.
jMax does it though. I was quite surprised to see Pd doesn't do it, and I had to perform the following workaround.
- Using numbers as pointers or indices.
3a. Plain memory addresses (gridflow?). Validation is possible by placing a header with a magic word at an address. However, representation of an address does not fit into one Pd atom, is clumsy (particularly when maintaining 32/64-bit compatibility),
I store a 32-bit pointer as two 32-bit floats, which each can store 24-bit unsigned integers exactly (it's guaranteed by IEEE standard).
and involves an overhead, possibly significant in some applications.
It takes a dozen clock cycles or less, which is ~5 ns by today's standards.
I think 3a isn't really safe.
This is definitely not a major cause of crashing with GridFlow. I never mangled those pointers accidentally, and I don't know anyone who'd dare doing it on purpose, as it doesn't buy anyone anything.
I don't understand why 3b requires anything extra (you can just interpret numbers as indices and let it just be wrong if someone gives you a wrong number.)
In my case, I pass pointers I got from malloc, and I can't do range checks on that. If anything, I can use a hashtable of integer keys, for example, or some other sensible data structure, though a hashtable is the most convenient by far.
Each separate extension could make its own hash list and maintain its own name space. You can generate symbols "x%d" to name things that the user didn't name.
BTW, how does one keep reference counts on anonymous data ?
- somehow overload Pd's "pointer" structure to point to
user-definable data structures.
Could you give more info on this?
and the pointer type already has a hook to protect against stale pointers.
What do you mean by that? weakrefs? refcounts?
________________________________________________________________ Mathieu Bouchard http://artengine.ca/matju