Author: rwinston Date: Thu Feb 5 00:41:31 2009 New Revision: 740957 URL: http://svn.apache.org/viewvc?rev=740957&view=rev Log: NET-251 Make Threader top-level
Added: commons/proper/net/branches/NET_2_0/src/main/java/org/apache/commons/net/nntp/ThreadContainer.java Modified: commons/proper/net/branches/NET_2_0/src/main/java/org/apache/commons/net/nntp/Threader.java Added: commons/proper/net/branches/NET_2_0/src/main/java/org/apache/commons/net/nntp/ThreadContainer.java URL: http://svn.apache.org/viewvc/commons/proper/net/branches/NET_2_0/src/main/java/org/apache/commons/net/nntp/ThreadContainer.java?rev=740957&view=auto ============================================================================== --- commons/proper/net/branches/NET_2_0/src/main/java/org/apache/commons/net/nntp/ThreadContainer.java (added) +++ commons/proper/net/branches/NET_2_0/src/main/java/org/apache/commons/net/nntp/ThreadContainer.java Thu Feb 5 00:41:31 2009 @@ -0,0 +1,80 @@ +package org.apache.commons.net.nntp; + +/** + * A placeholder utility class, used for constructing a tree of Threadables + * Original implementation by Jamie Zawinski. + * See the Grendel source for more details <a href="http://lxr.mozilla.org/mozilla/source/grendel/sources/grendel/view/Threader.java#511">here</a> + * Threadable objects + * @author Rory Winston <rwins...@apache.org> + */ +class ThreadContainer { + Threadable threadable; + ThreadContainer parent; + ThreadContainer prev; + ThreadContainer next; + ThreadContainer child; + + /** + * + * @param container + * @return true if child is under self's tree. Detects circular references + */ + boolean findChild(ThreadContainer target) { + if (child == null) + return false; + + else if (child == target) + return true; + else + return child.findChild(target); + } + + // Copy the ThreadContainer tree structure down into the underlying Threadable objects + // (Make the Threadable tree look like the ThreadContainer tree) + void flush() { + if (parent != null && threadable == null) + throw new RuntimeException("no threadable in " + this.toString()); + + parent = null; + + if (threadable != null) + threadable.setChild(child == null ? null : child.threadable); + + if (child != null) { + child.flush(); + child = null; + } + + if (threadable != null) + threadable.setNext(next == null ? null : next.threadable); + + if (next != null) { + next.flush(); + next = null; + } + + threadable = null; + } + + /** + * Reverse the entire set of children + * + */ + void reverseChildren() { + if (child != null) { + ThreadContainer kid, prev, rest; + for (prev = null, kid = child, rest = kid.next; + kid != null; + prev = kid, + kid = rest, + rest = (rest == null ? null : rest.next)) + kid.next = prev; + + child = prev; + + // Do it for the kids + for (kid = child; kid != null; kid = kid.next) + kid.reverseChildren(); + } + } +} Modified: commons/proper/net/branches/NET_2_0/src/main/java/org/apache/commons/net/nntp/Threader.java URL: http://svn.apache.org/viewvc/commons/proper/net/branches/NET_2_0/src/main/java/org/apache/commons/net/nntp/Threader.java?rev=740957&r1=740956&r2=740957&view=diff ============================================================================== --- commons/proper/net/branches/NET_2_0/src/main/java/org/apache/commons/net/nntp/Threader.java (original) +++ commons/proper/net/branches/NET_2_0/src/main/java/org/apache/commons/net/nntp/Threader.java Thu Feb 5 00:41:31 2009 @@ -400,82 +400,3 @@ } } - -/** - * A placeholder utility class, used for constructing a tree of Threadables - * Originall implementation by Jamie Zawinski. - * See the Grendel source for more details <a href="http://lxr.mozilla.org/mozilla/source/grendel/sources/grendel/view/Threader.java#511">here</a> - * Threadable objects - * @author Rory Winston <rwins...@checkfree.com> - */ -class ThreadContainer { - Threadable threadable; - ThreadContainer parent; - ThreadContainer prev; - ThreadContainer next; - ThreadContainer child; - - /** - * - * @param container - * @return true if child is under self's tree. Detects circular references - */ - boolean findChild(ThreadContainer target) { - if (child == null) - return false; - - else if (child == target) - return true; - else - return child.findChild(target); - } - - // Copy the ThreadContainer tree structure down into the underlying Threadable objects - // (Make the Threadable tree look like the ThreadContainer tree) - void flush() { - if (parent != null && threadable == null) - throw new RuntimeException("no threadable in " + this.toString()); - - parent = null; - - if (threadable != null) - threadable.setChild(child == null ? null : child.threadable); - - if (child != null) { - child.flush(); - child = null; - } - - if (threadable != null) - threadable.setNext(next == null ? null : next.threadable); - - if (next != null) { - next.flush(); - next = null; - } - - threadable = null; - } - - /** - * Reverse the entire set of children - * - */ - void reverseChildren() { - if (child != null) { - ThreadContainer kid, prev, rest; - for (prev = null, kid = child, rest = kid.next; - kid != null; - prev = kid, - kid = rest, - rest = (rest == null ? null : rest.next)) - kid.next = prev; - - child = prev; - - // Do it for the kids - for (kid = child; kid != null; kid = kid.next) - kid.reverseChildren(); - } - } -}