public function process()
    {
        $operands = $this->getOperands();

        // get the value of numberRepeats
        $expression = $this->getExpression();
        $numberRepeats = $expression->getNumberRepeats();

        if (gettype($numberRepeats) === 'string') {
            // Variable reference found.
            $state = $this->getState();
            $varName = ExprUtils::sanitizeVariableRef($numberRepeats);
            $varValue = $state[$varName];

            if (is_null($varValue) === true) {
                $msg = "The variable with name '${varName}' could not be resolved.";
                throw new OperatorProcessingException($msg, $this);
            } elseif (!$varValue instanceof QtiInteger) {
                $msg = "The variable with name '${varName}' is not an integer value.";
                throw new OperatorProcessingException($msg, $this);
            }

            $numberRepeats = $varValue->getValue();
        }

        if ($numberRepeats < 1) {
            return null;
        }

        $result = null;
        for ($i = 0; $i < $numberRepeats; $i++) {
            $refType = null;

            foreach ($operands as $operand) {

                // If null, ignore
                if (is_null($operand) || ($operand instanceof Container && $operand->isNull())) {
                    continue;
                }

                // Check cardinality.
                if ($operand->getCardinality() !== Cardinality::SINGLE && $operand->getCardinality() !== Cardinality::ORDERED) {
                    $msg = "The Repeat operator only accepts operands with a single or ordered cardinality.";
                    throw new OperatorProcessingException($msg, $this, OperatorProcessingException::WRONG_CARDINALITY);
                }

                // Check baseType.
                $currentType = RuntimeUtils::inferBaseType($operand);

                if ($refType !== null && $currentType !== $refType) {
                    $msg = "The Repeat operator only accepts operands with the same baseType.";
                    throw new OperatorProcessingException($msg, $this, OperatorProcessingException::WRONG_BASETYPE);
                } elseif (is_null($result)) {
                    $refType = $currentType;
                    $result = new OrderedContainer($refType);
                }

                // Okay we are good...
                $operandCardinality = RuntimeUtils::inferCardinality($operand);
                if ($operandCardinality !== Cardinality::ORDERED) {
                    $operand = new OrderedContainer($currentType, array($operand));
                }

                foreach ($operand as $o) {
                    $result[] = ($o instanceof QtiDatatype) ? clone $o : $o;
                }
            }
        }

        if (isset($result) && $result->isNull() !== true) {
            return $result;
        } else {
            return null;
        }
    }