From dmurdoch at pair.com  Thu Feb 26 20:58:27 2004
From: dmurdoch at pair.com (Duncan Murdoch)
Date: Thu Feb 26 21:00:07 2004
Subject: [Rd] save() size in XDR
In-Reply-To: <Pine.LNX.4.44.0402261929510.1840-100000@gannet.stats>
References: <ou8s3051ooa6n16dq46sdrn27s8e48kqpk@4ax.com>
	<Pine.LNX.4.44.0402261929510.1840-100000@gannet.stats>
Message-ID: <83js30hpcfr8qut2hmirtad9hhc608ctoq@4ax.com>

On Thu, 26 Feb 2004 19:31:15 +0000 (GMT), Prof Brian Ripley
<ripley@stats.ox.ac.uk> wrote :

>On Thu, 26 Feb 2004, Duncan Murdoch wrote:

>> One way to solve this problem would be to create a connection that did
>> nothing except keep track of a file position, then do the save to that
>> connection.  However, it's not easy to define new connection types.
>> Might be a nice package to write to allow such a thing.
>
>I don't think it is worth it.  Just use an anonymous file connection and 
>seek to the end to measure the length.  (Similar to Luke's use of a pipe, 
>but more portable.)

I didn't mean to write a package to count bytes, I meant to write a
package that allowed for user-defined connections.  The various
functions (read, write, seek, etc.) needed by the connection would be
supplied by the user in R code.

Then you'd do something like this for the special case of counting
bytes:

count <- 0

countbytes <- function(num, bytes) {
   count <<- count + num
}

f <- userconnection(write=countbytes)

save(list=ls(all=TRUE),file=f)

cat('Byte count is ',count)

Other possible connections you might want:

Circular connections that cycle through a buffer of bytes again and
again.

Encrypting connections which do something to the bytes on their way to
another connection.

Compressing connections which compress or uncompress another
connection.

Bit-level connections that let you read or write one bit at a time.

Concatenating connections that join two inputs to make them look like
a single stream.

Limiting connections that only show the caller a subset of the stream,
within a certain byte range.

Connections that calculate a checksum or CRC on the bytes as they pass
through.

Many years ago I wrote a Turbo Pascal unit containing all of these
things for "streams", the TP equivalent of connections, and it ended
up being surprisingly useful.

Duncan Murdoch


[Rd] save() size in XDR
Duncan Murdoch