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.
next 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).