Beispiel #1
0
// Parse the tree from the JPC codestream.
bool CNCSJPCTagTree::Parse(CNCSJPCIOStream &Stream, INT32 nX, INT32 nY, INT32 nAbort, bool &bVal)
{
	Node *leaf = &m_Nodes[nY * m_nWidth + nX];
	Node *stk[32 - 1];
	Node **stkptr;
	Node *node;

	stkptr = stk;
	node   = leaf;

	while (node->m_pParent)
    {
		*stkptr++ = node;
		node = node->m_pParent;
	}

	int low = 0;
	for (;;)
    {
		if (low > (int)node->m_nState) node->m_nState = (UINT16)low;
        else                     low = node->m_nState;

		while (low < nAbort && low < node->m_nValue)
        {
			bool bBit;
			if(Stream.UnStuff(bBit) == false) {
				return(false);
			}
			if (bBit) {
				node->m_nValue = (UINT16)low;
				node->m_bKnown = true;
			}
			else           low++;
		}
		node->m_nState = (UINT16)low;

		if (stkptr == stk) break;

        node = *--stkptr;
	}
	bVal = node->m_nValue < nAbort;
	return(true);
}