Read and Write object

Begining with v2.6p3 (March 2007) the parameters used for read and write operations have been changed.

Old design

Read(path,output_buffer,size,offset) 
Write(path,result_buffer,size,offset)

was  passed to lower level routines as:

function(buffer, size, offset, parsedname structure)

New design 

The new one_wire_query structure is:

struct one_wire_query <<
char * buffer ;
size_t size ;
off_t offset ;
struct parsedname pn;
union value_object val ;
>> ;

In turn union value_object is

union value_object <<
int I ;
unsigned int U ;
_FLOAT F ;
_DATE D ;
int Y ;//boolean
size_t length ;
union value_object * array ;
>> ;

The union member actually chosen depends on parsedname.filetype->format (i.e. knowledge gained from parsing the path).

Advantages

  • fewer parameters need to be passed with each call
  • fewer separate cases for display, cache, and other handling
  • far less duplication of code in ow_read.c and ow_write.c

The cost is more indirection, and slightly more awkward parameter extraction in the simplest cases.

Challenges

  • There are two classes of data: strings (ascii and binary) and numbers (integers, unsigneds, floating, dates, booleans). The string class needs special attention in C.
  • Both array and scalars must be handled. 

 


Previous page: To Do
Next page: struct owq_wire_query assumptions