Gnus development mailing list
 help / color / mirror / Atom feed
From: visigoth@olivier.pc.cs.cmu.edu (John McClary Prevost)
Subject: Questions about backend interface and ranges
Date: 14 Dec 1995 22:38:57 -0500	[thread overview]
Message-ID: <ygfohtbvvvx.fsf@olivier.dementia.org> (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.


             reply	other threads:[~1995-12-15  3:38 UTC|newest]

Thread overview: 3+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
1995-12-15  3:38 John McClary Prevost [this message]
1995-12-15 19:14 ` Lars Magne Ingebrigtsen
1995-12-18 11:27   ` John McClary Prevost

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=ygfohtbvvvx.fsf@olivier.dementia.org \
    --to=visigoth@olivier.pc.cs.cmu.edu \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
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).