On 2009-08-05 23:04, Hezekiah M. Carty wrote: > On Wed, Aug 5, 2009 at 4:22 PM, Hazen Babcock<hbabc...@mac.com> wrote:
>> I like this idea/approach. Is there a reason not to reduce it even further? >> >> plget(const char *, void *) >> plset(const char *, void *) >> >> It seems that either way the user would have to call the function as >> intended to avoid memory corruption. >> >> Any objections to my implementing this & attempting to make it fairly >> comprehensively cover most of what can gotten and set in PLplot core? >> Likely the bulk of the work would be done post 5.10. > > While I like the API simplification this could provide, I have two > primary concerns: > > First, could the first argument - the field to get/set - be an > enumerated type of some sort? This should help catch typos at compile > time rather than run time. (PL_LINE_WIDTH rather than "line width"). > Additional fields would then require adding elements to the > enumeration which, as I understand, should not break existing code. > > Second, the void* approach may not translate well to other languages. > I'm not sure if there is a way to do this in C that would translate > well to the other PLplot-supported languages though. > I agree that a void * argument would be very bad for most languages, if not all, and it leaves the interpretation of the value up to the programmer. What about filling a structure instead? Something like: type struct _plAttribute { PLINT attributeType; /* enumerated: integer, float, boolean, ... */ PLINT intValue; /* value reserved for attributes that can be represented as integers - at least in C */ PLFLT floatValue; /* ditto: floating point attributes */ char *stringValue; /* ditto: character string attributes */ } plAttribute; void plget( char *attribute, plAttribute *attValue ); void plset( char *attribute, plAttribute *attValue ); The various language bindings could then easily distinguish the proper type of the attribute (overloading the functions) or fill a similar structure and pass that. In C you could use the idiom: plget( "myattribute", &attValue ); if ( attValue.attributeType == PL_ATT_INT ) { attValue.intValue = newValue; plset( "myattribute, &attValue ); } so that you can be certain only a value of the proper type is passed. An alternative is: void plget( char *attribute, int *type, PLINT *intValue, PLFLT *floatValue, char **stringValue ); void plset( char *attribute, int type, PLINT intValue, PLFLT floatValue, char *stringValue ); with a similar associated idiom. Regards, Arjen ------------------------------------------------------------------------------ Let Crystal Reports handle the reporting - Free Crystal Reports 2008 30-Day trial. Simplify your report design, integration and deployment - and focus on what you do best, core application coding. Discover what's new with Crystal Reports now. http://p.sf.net/sfu/bobj-july _______________________________________________ Plplot-devel mailing list Plplot-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/plplot-devel