Exemplo n.º 1
0
//-------------------------------------------------------------------
bool xlopers_equal(const xloper &op1, const xloper &op2)
{
	if(op1.xltype != op2.xltype)
		return false;

	int i;

	switch(op1.xltype)
	{
	case xltypeNum:
		return op1.val.num == op2.val.num;

	case xltypeStr:
		return *op1.val.str == *op2.val.str && memcmp(op1.val.str + 1, op2.val.str + 1, *op1.val.str) == 0;

	case xltypeBool:
		return op1.val.xbool == op2.val.xbool;

	case xltypeRef:
		if(op1.val.mref.idSheet != op2.val.mref.idSheet
		|| op1.val.mref.lpmref->count != op2.val.mref.lpmref->count)
			return false;

		return memcmp(op1.val.mref.lpmref->reftbl, op2.val.mref.lpmref->reftbl, sizeof(xlmref) * op1.val.mref.lpmref->count) == 0;

	case xltypeSRef:
		return memcmp(&(op1.val.sref.ref), &(op2.val.sref.ref), sizeof(xlref)) == 0;

	case xltypeMulti:
		if(op1.val.array.columns != op2.val.array.columns
		|| op1.val.array.rows != op2.val.array.rows)
			return false;

		for(i = op1.val.array.columns * op1.val.array.rows; i--; )
			if(!xlopers_equal(op1.val.array.lparray[i], op2.val.array.lparray[i]))
				return false;
		break;

	case xltypeMissing:
	case xltypeNil:
		return true;

	case xltypeInt:
		return op1.val.w == op2.val.w;

	case xltypeErr:
		return op1.val.err == op2.val.err;

	default:
		return false; // not suported by this function
	}
	return true;
}
Exemplo n.º 2
0
//-------------------------------------------------------------------
bool cpp_xloper::operator!=(xloper *p_op)
{
   return !xlopers_equal(m_Op, *p_op);
}
Exemplo n.º 3
0
//-------------------------------------------------------------------
bool cpp_xloper::operator!=(cpp_xloper &cpp_op2)
{
   return !xlopers_equal(m_Op, cpp_op2.m_Op);
}