Beispiel #1
0
// UnParse the tree to the JPC codestream.
bool CNCSJPCTagTree::UnParse(CNCSJPCIOStream &Stream, INT32 nX, INT32 nY, INT32 nThreshold)
{
	INT32 nLeaf = nY * m_nWidth + nX;
    Node *stk[31];
    Node **stkptr;
    Node *node;
    int low;
	bool bRet = true;

    stkptr = stk;
    node = &m_Nodes[nLeaf];
    while(node->m_pParent) {
        *stkptr++ = node;
        node = node->m_pParent;
    }

    low=0;
    for (;;) {
		if (low > node->m_nState) {
            node->m_nState = (UINT16)low;
        } else {
            low = node->m_nState;
        }
        while (low < nThreshold) {
            if (low >= node->m_nValue) {
				if (!node->m_bKnown) {
                    bRet &= Stream.Stuff(true);
                    node->m_bKnown = true;
                }
                break;
            }
			bRet &= Stream.Stuff(false);
            ++low;
        }
		node->m_nState = (UINT16)low;
        if (stkptr == stk) break;
        node = *--stkptr;
    }
	return(bRet);
}