On Sun, 16 Jan 2000, Erik Thiele wrote:
[clip]
> > > is everything in ggi a void* ?
> >
> > This is a valid point. We do that void * stuff on pupose to make sure users
> > don't try to dereference stuff they shouldn't (bypassing the encapsulation
> > rule and the access layers). However in cases like yours, it's in the way ...
> > Ideas ?
>
> i never contributed to ggi, and do not really know about it's structure.
> but if you ask me this question, i just think it is bad style.
>
> in my eyes it is a very bad idea to do something in a void* just to
> ensure nobody dereferences it.
> i think it is enough to say "you mustn't dereference it, it is internal"
> you not need to force users to this via void*
>
> i think better style to write things as they really are.
> not casting void* to something else internally, but just always using
> the correct type.
>
> - improves debugging (you really see the structure, not a nonsensical void
> pointer)
> - the compiler won't compile stupid code anymore (type safety)
> - eliminates casts from void* to something else in the internal
> ggi library.
>
> for me the idea with the void* is very bad design.
void* is officially in computer science a valid idea :)
It has to do with the publically accessed side having full informational
access to something which may vary behind the scenes.
Stylistically, from what I remember in CS, a void* is the ultimate example
of the minimum front-end required to talk to an object where the
behind-the-scenes code can vary. It's the old implementation/interface
barrier. It's "Good Practice" officially AFAIK.
A void* system solves these problems:
- Object-based system where the real structure is a superset of some basic
type, such as struct base {int type; };
- User data can be set to a void* container and not be touched by the
driver-side -> just remembered. (callbacks)
- Driver data can be stored here, and it can be driver-specific stuff such
as the X contexts and Windows thread-ID's for example.
Plus prolly other things I can't think of right now.
G'day, eh? :)
- Teunis