/*****************************************************************
 * bstChain.cpp
 * implementation of BST chains
 *****************************************************************/
#include "chain.h"

bstChain::bstChain(link *linkList, int linkNum) :
    chain(linkList, linkNum) {
    // table size bigger than linkNum for BSTs
    initTable(linkNum + 2);
}


/*****************************************************************
 * componentWeight add the sum of all frequencies from i+1 to
 * k-1, inclusive.
 *****************************************************************/
double bstChain::componentWeight (int i, int j, int k) {
    double sum= 0;

    for (int h= i + 1; h < k; h++) {
        sum += linkList[h].y;
    }

    return sum;
}

/*****************************************************************
 * bstChain::minPartition acts as a front end to
 * chain::minPartition
 ****************************************************************/
componentNode *bstChain::minPartition(int linkNum) {
    return chain::minPartition(-1, linkNum);
}

/* indices are shifted */
int bstChain::getMCTSplit(int i, int k)
{
    return minCostTable[i+1][k+1].j;
}

int bstChain::setMCTSplit(int i, int k, int j)
{
    return minCostTable[i+1][k+1].j = j;
}

double bstChain::getMCTValue(int i, int k)
{
    return minCostTable[i+1][k+1].cost;
}

double bstChain::setMCTValue(int i, int k, double d)
{
    return minCostTable[i+1][k+1].cost = d;
}

