From: Werner Almesberger <wa@almesberger.net>
To: Andrea Arcangeli <andrea@suse.de>
Cc: Rajesh Venkatasubramanian <vrajesh@umich.edu>,
linux-kernel@vger.kernel.org
Subject: Re: prio_tree generalization
Date: Sun, 4 Jul 2004 23:36:51 -0300 [thread overview]
Message-ID: <20040704233651.A1453@almesberger.net> (raw)
In-Reply-To: <20040705020740.GA3246@dualathlon.random>; from andrea@suse.de on Mon, Jul 05, 2004 at 04:07:40AM +0200
Andrea Arcangeli wrote:
> that's a nice effort, I agree prio_tree.c is better suited for lib/ than
> mm/ but the code already looks quite generic and well written.
The code is great, no problem there. But at some places, it needs
a macro that extracts the indices from each node. Callbacks are
likely to be too expensive, and e.g. with VMAs, the indices are
actually calculated, so just passing offsets wouldn't work
either.
> why don't you move the shared code to lib/prio_tree.c instead of
> duplicating it in every object?
Yes, there are some more functions that should be shareable,
i.e. prio_tree_replace, prio_tree_parent, and prio_tree_next.
Also prio_tree_expand might be a candidate.
But this still leaves a few that depend on GET_INDEX.
> I thought prio_tree_next was already the equivalent of rb_next for
> prio-trees.
Yeah, it kind of is, but I'm looking for something more
light-weight, that just gives me an adjacent node. Also, I
want to be able to go back. Here's my prio_tree_prev (minus
the comments). It should look familiar to you :-)
struct prio_tree_node *prio_tree_succ(struct prio_tree_node *node)
{
if (!prio_tree_right_empty(node)) {
node = node->right;
while (!prio_tree_left_empty(node))
node = node->left;
return node;
}
while (!prio_tree_no_parent(node) && node == node->parent->right)
node = node->parent;
return prio_tree_no_parent(node) ? NULL : node->parent;
}
Of course, this kind of iteration only makes sense if your tree
isn't just a bag of random ranges.
- Werner
--
_________________________________________________________________________
/ Werner Almesberger, Buenos Aires, Argentina wa@almesberger.net /
/_http://www.almesberger.net/____________________________________________/
next prev parent reply other threads:[~2004-07-05 2:37 UTC|newest]
Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top
2004-07-05 1:24 prio_tree generalization Werner Almesberger
2004-07-05 2:07 ` Andrea Arcangeli
2004-07-05 2:36 ` Werner Almesberger [this message]
2004-07-05 4:46 ` Andrew Morton
2004-07-05 11:05 ` Werner Almesberger
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=20040704233651.A1453@almesberger.net \
--to=wa@almesberger.net \
--cc=andrea@suse.de \
--cc=linux-kernel@vger.kernel.org \
--cc=vrajesh@umich.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 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.