Gnus development mailing list
 help / color / mirror / Atom feed
* Questions about backend interface and ranges
@ 1995-12-15  3:38 John McClary Prevost
  1995-12-15 19:14 ` Lars Magne Ingebrigtsen
  0 siblings, 1 reply; 3+ messages in thread
From: John McClary Prevost @ 1995-12-15  3:38 UTC (permalink / raw)


I have a couple of questions about ranges and about the interface
of nn*-retrieve-headers.

The ARTICLES argument of retrieve-headers is said to take "either a
range of article numbers or a list of Message-IDs."  I take that to
mean that it can contain Message-IDs, or a range, but not both?

Second, I'm about to implement a set of "useful range operations" in
order to get the nnimap stuff working better.  Here's what I plan to
implement:

(nnimap-range-split RANGE &optional COUNT)

This function takes a RANGE and returns a cons cell of a range
containing the first numerical member of the range and the range
without that first member.  I.e.:

(nnimap-range-split ((1 . 5) 7)) => ( (1) . ((2 . 5) 7) )

If the optional COUNT is given, COUNT items are returned as a second
range.  Like so:

(nnimap-range-split '((1 . 20) (30 . 500)) 400) =>
   ( ((1 . 20) (30 . 410)) . (411 . 500) )

[ The function might better be split into two: *-range-head and
  *-range-tail ]

This operation is fairly simple, and it is useful for two reasons.
First, a backend can use it to chop off a single item from a range at
a time, in order to do retrieve operations via methods that can only
deal with getting one article at a time.  Second, a protocol like IMAP
which can request multiple messages at a time (basically, you can get
a single article or an unbroken range of articles but not combinations
of the two) can use it to break a range down into bite-sized
chunks--this is good, because doing an
(nnimap-retrieve-headers '((1 . 1000))) right now doesn't give much
feedback until the operation is complete--it's too busy reading things
in.  This could result in deadlock, I assume, since nntp.el is worried
about reading things in every so often.

That function would be extremely useful, as would two others:

(*-range-length RANGE) : returns the number of individual articles in
a range.

(*-range-eq RANGE1 RANGE2) : returns t if they're equivalent, nil if
not.  This is a fairly easy operation, and has O(n+m) where n is the
number of discrete elements in RANGE1 and m is the number in RANGE2.

I'll code these into my nnimap.el for the time-being, but they'd
probably be better off in some other piece of code.


^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, other threads:[~1995-12-18 11:27 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
1995-12-15  3:38 Questions about backend interface and ranges John McClary Prevost
1995-12-15 19:14 ` Lars Magne Ingebrigtsen
1995-12-18 11:27   ` John McClary Prevost

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).