all messages for Emacs-related lists mirrored at yhetil.org
 help / color / mirror / code / Atom feed
From: Wojciech Meyer <wojciech.meyer@googlemail.com>
To: emacs-devel@gnu.org
Subject: Re: Pushing the `gnus-range-*' functions down into the C layer
Date: Thu, 09 Sep 2010 23:21:30 +0100	[thread overview]
Message-ID: <878w3azhg5.fsf@gmail.com> (raw)
In-Reply-To: <m31v939cbb.fsf@quimbies.gnus.org> (Lars Magne Ingebrigtsen's message of "Thu, 09 Sep 2010 17:16:56 +0200")

Lars Magne Ingebrigtsen <larsi@gnus.org> writes:

> Would anyone mind if I implemented the `gnus-range-*' functions in C for
> Emacs 24?  Gnus spends significant time on group entry/exit doing range
> handling/compressing/etc, and I think the functions are (slightly)
> generally useful.
>
> Gnus addresses articles by their number, so you have things like the
> "marked" list of articles that looks like
>
> (3 4 5 6 7 11 14 15 16 17 18)
>
> (or something).  To save loading/saving time, these are stored in the
> .newsrc.eld file as range structures, which look like this:
>
> ((3 . 7) 11 (14 . 18))
>
> To handle this, Gnus has a set of functions for computing
> intersections/differences/etc on the range structures.  However, Emacs
> Lisp isn't really fast at doing this, so if you exit from a group that
> needs lots (I mean *lots*) of range handling, you get an annoying wait
> while it sits there computing.
>
> So I'm proposing implementing a set of useful functions in C, like
> `range-memq', `range-add', `range-intersection' and stuff.
>
> Thoughts?

Hi,

In my opinion your algorithm might need to change, but that's maybe I
that I don't understand the problem domain correctly :). You don't
really need to care about ranges or intervals. You load them into array
of chars, each char index representing one article index and set to 0 or
1, if article was read. (ideally a bit array) Then at exit perform
operation at array in the same way as you loaded, and save it back to
ranges. It has linear complexity. You trade off space complexity for
computational complexity. As a bonus you get the minimal representation
in intervals. So I don't think you would need a specific core support
(but that's my personal opinion).  If you really want a clean solution,
then there are algorithms. (I know they exist, but unfortunately I don't
remember the name of it).

Just mine two cents,

Wojciech




  parent reply	other threads:[~2010-09-09 22:21 UTC|newest]

Thread overview: 48+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2010-09-09 15:16 Pushing the `gnus-range-*' functions down into the C layer Lars Magne Ingebrigtsen
2010-09-09 19:01 ` Ted Zlatanov
2010-09-09 21:58   ` Lars Magne Ingebrigtsen
2010-09-09 22:25     ` Ted Zlatanov
2010-09-10  3:24     ` Stephen J. Turnbull
2010-09-10 13:53       ` Ted Zlatanov
2010-09-10 14:01         ` Lars Magne Ingebrigtsen
2010-09-10 14:08           ` Leo
2010-09-10 14:15             ` Lars Magne Ingebrigtsen
2010-09-10 14:19               ` Wojciech Meyer
2010-09-11  9:44             ` Stefan Monnier
2010-09-10 14:18           ` Ted Zlatanov
2010-09-10 14:28             ` Lars Magne Ingebrigtsen
2010-09-10 14:38               ` bignums (was: Pushing the `gnus-range-*' functions down into the C layer) Ted Zlatanov
2010-09-10 15:16               ` Pushing the `gnus-range-*' functions down into the C layer Andreas Schwab
2010-09-10 15:22                 ` David Kastrup
2010-09-10 15:26                   ` Lars Magne Ingebrigtsen
2010-09-11  9:48                     ` Stefan Monnier
2010-09-11 11:57                       ` Lars Magne Ingebrigtsen
2010-09-11 15:36                         ` Stephen J. Turnbull
2010-09-11 15:51                           ` Lars Magne Ingebrigtsen
2010-09-11 16:15                             ` Wojciech Meyer
2010-09-12  9:57                               ` Stefan Monnier
2010-09-10 19:28             ` Tom Tromey
2010-09-14 15:52               ` Ted Zlatanov
2010-09-11  5:52           ` Stephen J. Turnbull
2010-09-13 11:45       ` Eli Zaretskii
2010-09-09 22:21 ` Wojciech Meyer [this message]
2010-09-09 23:48   ` Ted Zlatanov
2010-09-09 23:56     ` Wojciech Meyer
2010-09-10  0:07       ` Lars Magne Ingebrigtsen
2010-09-10  0:17         ` Wojciech Meyer
2010-09-10  8:06 ` Andy Wingo
2010-09-10 10:20   ` Wojciech Meyer
2010-09-10 10:43 ` Stefan Monnier
2010-09-10 12:35   ` Lars Magne Ingebrigtsen
2010-09-10 12:49     ` rfc2047-decode-string in C? Lars Magne Ingebrigtsen
2010-09-10 13:47       ` Stefan Monnier
2010-09-10 13:51         ` Lars Magne Ingebrigtsen
2010-09-11 16:10           ` Lars Magne Ingebrigtsen
2010-09-10 13:07     ` Pushing the `gnus-range-*' functions down into the C layer joakim
2010-09-10 13:22       ` Lars Magne Ingebrigtsen
2010-09-10 13:45     ` Stefan Monnier
2010-09-10 14:01       ` Ted Zlatanov
2010-09-10 14:09         ` Lars Magne Ingebrigtsen
2010-09-11  9:36         ` Stefan Monnier
2010-09-10 14:06       ` Lars Magne Ingebrigtsen
2010-09-11  3:18     ` Daniel Pittman

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=878w3azhg5.fsf@gmail.com \
    --to=wojciech.meyer@googlemail.com \
    --cc=emacs-devel@gnu.org \
    /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.
Code repositories for project(s) associated with this external index

	https://git.savannah.gnu.org/cgit/emacs.git
	https://git.savannah.gnu.org/cgit/emacs/org-mode.git

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.