Skip to content
Snippets Groups Projects
Problem2.scala 1010 B
Newer Older
package concpar22final02

import java.util.concurrent.atomic.AtomicInteger
import scala.collection.mutable.ArrayBuffer

class Problem2(imageSize: Int, numThreads: Int, numFilters: Int):

  val barrier: ArrayBuffer[Barrier] =
    ArrayBuffer.fill(numFilters)(Barrier(numThreads))

  val imageLib: ImageLib = ImageLib(imageSize)

  def imagePipeline(
      filters: Array[imageLib.Filter],
      rows: Array[Int]
  ): ArrayBuffer[ArrayBuffer[Int]] =
    for i <- 0 to filters.size - 1 do
      for j <- 0 to rows.size - 1 do
        if i % 2 == 0 then
          imageLib.applyFilter(
            filters(i).kernel,
            imageLib.buffer1,
            imageLib.buffer2,
            rows(j)
          )
        else
          imageLib.applyFilter(
            filters(i).kernel,
            imageLib.buffer2,
            imageLib.buffer1,
            rows(j)
          )

      barrier(i).countDown()
      barrier(i).awaitZero()

    if filters.size % 2 == 0 then imageLib.buffer1
    else imageLib.buffer2