/*
 *  Copyright (c) 2010 The WebM project authors. All Rights Reserved.
 *
 *  Use of this source code is governed by a BSD-style license
 *  that can be found in the LICENSE file in the root of the source
 *  tree. An additional intellectual property rights grant can be found
 *  in the file PATENTS.  All contributing project authors may
 *  be found in the AUTHORS file in the root of the source tree.
 */


#include "treewriter.h"

static void cost(
    int *const C,
    vp8_tree T,
    const vp8_prob *const P,
    int i,
    int c
)
{
    const vp8_prob p = P [i>>1];

    do
    {
        const vp8_tree_index j = T[i];
        const int d = c + vp8_cost_bit(p, i & 1);

        if (j <= 0)
            C[-j] = d;
        else
            cost(C, T, P, j, d);
    }
    while (++i & 1);
}
void vp8_cost_tokens(int *c, const vp8_prob *p, vp8_tree t)
{
    cost(c, t, p, 0, 0);
}
void vp8_cost_tokens2(int *c, const vp8_prob *p, vp8_tree t,int start)
{
    cost(c, t, p, start, 0);
}
