Re: a better libtds

"James K. Lowden" <[email protected]>
Newsgroups gmane.comp.db.tds.freetds
Message-ID <[email protected]>
On Mon, 22 Aug 2011 10:53:02 -0400
Brian Bruns <[email protected]> wrote:

> If I'm understanding you correctly, you want a structure with an enum
> and essentially an array of void * to all the elements and then to use
> it you need to cast the void * back depending on the value of the
> attached datatype?  

Yes, it's an array of aliases to the members of the struct.  And,
because void*, they'd have to be cast.  

> struct {
>    uint16 flags;
>    uint16 unknown;
>    uint32 rowcount;
> } tds_done_inproc;
> 
> tds_member_t done_in_proc_reader[] = {
> {
> offsetof(tds_done_inproc, flags),
> tds_read_uint16
> },
> {
> offsetof(tds_done_inproc, unknown),
> tds_read_uint16
> },
> {
> offsetof(tds_done_inproc, rowcount),
> tds_read_uint32
> },
> };
> 
> The nice part is this is easily generated from a table of grammars,
> and you get a nice usable structure on the other end (as opposed to a
> nameless array of elements if I'm understanding you correctly), no
> casting from void * necessary.  Do the same in reverse for
> writing..things like XOR key password could be a function and you just
> pass the plain text and the function pointer handles the ugly bits.

Thank you.  Yes, that's the kind of thing I hope to get from the
formal grammar.  Not having ever actually used a parser-generator, I
had in mind a more brute-force method.  I agree the above is more
attractive.  

The key is to be able to iterate over the struct elements, for both
input and output.  

Regards, 

--jkl
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.