override def plus()

in algebird-core/src/main/scala/com/twitter/algebird/RightFolded2.scala [55:88]


  override def plus(
      left: RightFolded2[In, Out, Acc],
      right: RightFolded2[In, Out, Acc]
  ): RightFolded2[In, Out, Acc] = left match {
    case RightFoldedValue2(leftV, leftAcc, leftRvals) => {
      right match {
        case RightFoldedZero2 => left
        case RightFoldedToFold2(in) =>
          RightFoldedValue2(leftV, leftAcc, leftRvals ++ in)
        case RightFoldedValue2(rightV, rightAcc, rightRvals) => {
          if (leftRvals.isEmpty) {
            // This is the case of two initial values next to each other, return the left:
            val newAcc = grpAcc.plus(leftAcc, rightAcc)
            RightFoldedValue2(leftV, newAcc, rightRvals)
          } else {
            val (_, newRightAcc) = doFold(leftRvals, rightV, rightAcc)
            // Now actually add the left value, with the right:
            val newAcc = grpAcc.plus(leftAcc, newRightAcc)
            RightFoldedValue2(leftV, newAcc, rightRvals)
          }
        }
      }
    }
    case RightFoldedZero2 => right
    case RightFoldedToFold2(lList) =>
      right match {
        case RightFoldedZero2          => left
        case RightFoldedToFold2(rList) => RightFoldedToFold2(lList ++ rList)
        case RightFoldedValue2(vr, accr, valsr) => {
          val (newV, newAcc) = doFold(lList, vr, accr)
          RightFoldedValue2(newV, newAcc, valsr)
        }
      }
  }