function rcDoOutputFeed($rows, &$feed)
{
    $fname = 'rcDoOutputFeed';
    wfProfileIn($fname);
    $feed->outHeader();
    # Merge adjacent edits by one user
    $sorted = array();
    $n = 0;
    foreach ($rows as $obj) {
        if ($n > 0 && $obj->rc_namespace >= 0 && $obj->rc_cur_id == $sorted[$n - 1]->rc_cur_id && $obj->rc_user_text == $sorted[$n - 1]->rc_user_text) {
            $sorted[$n - 1]->rc_last_oldid = $obj->rc_last_oldid;
        } else {
            $sorted[$n] = $obj;
            $n++;
        }
    }
    foreach ($sorted as $obj) {
        $title = Title::makeTitle($obj->rc_namespace, $obj->rc_title);
        $talkpage = $title->getTalkPage();
        $item = new FeedItem($title->getPrefixedText(), rcFormatDiff($obj), $title->getFullURL(), $obj->rc_timestamp, $obj->rc_user_text, $talkpage->getFullURL());
        $feed->outItem($item);
    }
    $feed->outFooter();
    wfProfileOut($fname);
}
function rcDoOutputFeed($rows, &$feed)
{
    global $wgSitename, $wgFeedClasses, $wgContLanguageCode;
    $feed->outHeader();
    # Merge adjacent edits by one user
    $sorted = array();
    $n = 0;
    foreach ($rows as $obj) {
        if ($n > 0 && $obj->rc_namespace >= 0 && $obj->rc_cur_id == $sorted[$n - 1]->rc_cur_id && $obj->rc_user_text == $sorted[$n - 1]->rc_user_text) {
            $sorted[$n - 1]->rc_last_oldid = $obj->rc_last_oldid;
        } else {
            $sorted[$n] = $obj;
            $n++;
        }
        $first = false;
    }
    foreach ($sorted as $obj) {
        $title = Title::makeTitle($obj->rc_namespace, $obj->rc_title);
        $talkpage = $title->getTalkPage();
        $item = new FeedItem($title->getPrefixedText(), rcFormatDiff($obj), $title->getFullURL(), $obj->rc_timestamp, $obj->rc_user_text, $talkpage->getFullURL());
        $feed->outItem($item);
    }
    $feed->outFooter();
}