]> Sergey Matveev's repositories - public-inbox.git/blobdiff - lib/PublicInbox/SearchThread.pm
searchthread: delete children early while ordering
[public-inbox.git] / lib / PublicInbox / SearchThread.pm
index f07dd69665623985461df30166cd0c148b4fe7f8..00ae9faccc08b7b16aff259fb9cd54165b485eb2 100644 (file)
@@ -38,13 +38,13 @@ sub thread {
                # TODO: move this to a more appropriate place, breaks tests
                # if we do it during psgi_cull
                delete $_->{num};
-
-               PublicInbox::SearchThread::Msg::cast($_);
+               bless $_, 'PublicInbox::SearchThread::Msg';
                if (exists $id_table{$_->{mid}}) {
                        $_->{children} = [];
                        push @imposters, $_; # we'll deal with them later
                        undef;
                } else {
+                       $_->{children} = {}; # will become arrayref later
                        $id_table{$_->{mid}} = $_;
                        defined($_->{references});
                }
@@ -108,13 +108,6 @@ sub ghost {
        }, __PACKAGE__;
 }
 
-# give a existing smsg the methods of this class
-sub cast {
-       my ($smsg) = @_;
-       $smsg->{children} = {};
-       bless $smsg, __PACKAGE__;
-}
-
 sub topmost {
        my ($self) = @_;
        my @q = ($self);
@@ -174,7 +167,7 @@ sub order_children {
        while (defined($cur = shift @q)) {
                # the {children} hashref here...
                my @c = grep { !$seen{$_}++ && visible($_, $ibx) }
-                       values %{$cur->{children}};
+                       values %{delete $cur->{children}};
                $ordersub->(\@c) if scalar(@c) > 1;
                $cur->{children} = \@c; # ...becomes an arrayref
                push @q, @c;