Github user hvanhovell commented on a diff in the pull request:

    https://github.com/apache/spark/pull/13758#discussion_r67992774
  
    --- Diff: 
sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/util/GenericArrayData.scala
 ---
    @@ -142,3 +196,414 @@ class GenericArrayData(val array: Array[Any]) extends 
ArrayData {
         result
       }
     }
    +
    +final class GenericIntArrayData(val primitiveArray: Array[Int]) extends 
GenericArrayData {
    +  override def array(): Array[Any] = primitiveArray.toArray
    +
    +  override def copy(): ArrayData = new GenericIntArrayData(primitiveArray)
    +
    +  override def numElements(): Int = primitiveArray.length
    +
    +  override def isNullAt(ordinal: Int): Boolean = false
    +  override def getInt(ordinal: Int): Int = primitiveArray(ordinal)
    +  override def toIntArray(): Array[Int] = {
    +    val array = new Array[Int](numElements)
    +    System.arraycopy(primitiveArray, 0, array, 0, numElements)
    +    array
    +  }
    +  override def toString(): String = primitiveArray.mkString("[", ",", "]")
    +
    +  override def equals(o: Any): Boolean = {
    +    if (!o.isInstanceOf[GenericIntArrayData]) {
    +      return false
    +    }
    +
    +    val other = o.asInstanceOf[GenericIntArrayData]
    +    if (other eq null) {
    +      return false
    +    }
    +
    +    val len = numElements()
    +    if (len != other.numElements()) {
    +      return false
    +    }
    +
    +    var i = 0
    +    while (i < len) {
    +      val o1 = primitiveArray(i)
    +      val o2 = other.primitiveArray(i)
    +      if (o1 != o2) {
    +        return false
    +      }
    +      i += 1
    +    }
    +    true
    +  }
    +
    +  override def hashCode: Int = {
    +    var result: Int = 37
    +    var i = 0
    +    val len = numElements()
    +    while (i < len) {
    +      val update: Int = primitiveArray(i)
    +      result = 37 * result + update
    +      i += 1
    +    }
    +    result
    +  }
    +}
    +
    +final class GenericLongArrayData(val primitiveArray: Array[Long])
    +  extends GenericArrayData {
    +  override def array(): Array[Any] = primitiveArray.toArray
    +
    +  override def copy(): ArrayData = new GenericLongArrayData(primitiveArray)
    +
    +  override def numElements(): Int = primitiveArray.length
    +
    +  override def isNullAt(ordinal: Int): Boolean = false
    +  override def getLong(ordinal: Int): Long = primitiveArray(ordinal)
    +  override def toLongArray(): Array[Long] = {
    +    val array = new Array[Long](numElements)
    +    System.arraycopy(primitiveArray, 0, array, 0, numElements)
    +    array
    +  }
    +  override def toString(): String = primitiveArray.mkString("[", ",", "]")
    +
    +  override def equals(o: Any): Boolean = {
    +    if (!o.isInstanceOf[GenericLongArrayData]) {
    +      return false
    +    }
    +
    +    val other = o.asInstanceOf[GenericLongArrayData]
    +    if (other eq null) {
    +      return false
    +    }
    +
    +    val len = numElements()
    +    if (len != other.numElements()) {
    +      return false
    +    }
    +
    +    var i = 0
    +    while (i < len) {
    +      val o1 = primitiveArray(i)
    +      val o2 = other.primitiveArray(i)
    +      if (o1 != o2) {
    +        return false
    +      }
    +      i += 1
    +    }
    +    true
    +  }
    +
    +  override def hashCode: Int = {
    +    var result: Int = 37
    +    var i = 0
    +    val len = numElements()
    +    while (i < len) {
    +      val l = primitiveArray(i)
    +      val update: Int = (l ^ (l >>> 32)).toInt
    +      result = 37 * result + update
    +      i += 1
    +    }
    +    result
    +  }
    +}
    +
    +final class GenericFloatArrayData(val primitiveArray: Array[Float])
    +  extends GenericArrayData {
    +  override def array(): Array[Any] = primitiveArray.toArray
    +
    +  override def copy(): ArrayData = new 
GenericFloatArrayData(primitiveArray)
    +
    +  override def numElements(): Int = primitiveArray.length
    +
    +  override def isNullAt(ordinal: Int): Boolean = false
    +  override def getFloat(ordinal: Int): Float = primitiveArray(ordinal)
    +  override def toFloatArray(): Array[Float] = {
    +    val array = new Array[Float](numElements)
    +    System.arraycopy(primitiveArray, 0, array, 0, numElements)
    +    array
    +  }
    +  override def toString(): String = primitiveArray.mkString("[", ",", "]")
    +
    +  override def equals(o: Any): Boolean = {
    +    if (!o.isInstanceOf[GenericFloatArrayData]) {
    +      return false
    +    }
    +
    +    val other = o.asInstanceOf[GenericFloatArrayData]
    +    if (other eq null) {
    +      return false
    +    }
    +
    +    val len = numElements()
    +    if (len != other.numElements()) {
    +      return false
    +    }
    +
    +    var i = 0
    +    while (i < len) {
    +      val o1 = primitiveArray(i)
    +      val o2 = other.primitiveArray(i)
    +      if (java.lang.Float.isNaN(o1)) {
    +        if (!java.lang.Float.isNaN(o2)) {
    +          return false;
    +        }
    +      } else if (o1 != o2) {
    +        return false
    +      }
    +      i += 1
    +    }
    +    true
    +  }
    +
    +  override def hashCode: Int = {
    +    var result: Int = 37
    +    var i = 0
    +    val len = numElements()
    +    while (i < len) {
    +      val f = primitiveArray(i)
    +      val update: Int = java.lang.Float.floatToIntBits(f)
    +      result = 37 * result + update
    +      i += 1
    +    }
    +    result
    +  }
    +}
    +
    +final class GenericDoubleArrayData(val primitiveArray: Array[Double])
    +  extends GenericArrayData {
    +  override def array(): Array[Any] = primitiveArray.toArray
    +
    +  override def copy(): ArrayData = new 
GenericDoubleArrayData(primitiveArray)
    +
    +  override def numElements(): Int = primitiveArray.length
    +
    +  override def isNullAt(ordinal: Int): Boolean = false
    +  override def getDouble(ordinal: Int): Double = primitiveArray(ordinal)
    +  override def toDoubleArray(): Array[Double] = {
    +    val array = new Array[Double](numElements)
    +    System.arraycopy(primitiveArray, 0, array, 0, numElements)
    +    array
    +  }
    +  override def toString(): String = primitiveArray.mkString("[", ",", "]")
    +
    +  override def equals(o: Any): Boolean = {
    +    if (!o.isInstanceOf[GenericDoubleArrayData]) {
    +      return false
    +    }
    +
    +    val other = o.asInstanceOf[GenericDoubleArrayData]
    +    if (other eq null) {
    +      return false
    +    }
    +
    +    val len = numElements()
    +    if (len != other.numElements()) {
    +      return false
    +    }
    +
    +    var i = 0
    +    while (i < len) {
    +      val o1 = primitiveArray(i)
    +      val o2 = other.primitiveArray(i)
    +      if (java.lang.Double.isNaN(o1)) {
    +        if (!java.lang.Double.isNaN(o2)) {
    +          return false;
    +        }
    +      } else if (o1 != o2) {
    +        return false
    +      }
    +      i += 1
    +    }
    +    true
    +  }
    +
    +  override def hashCode: Int = {
    +    var result: Int = 37
    +    var i = 0
    +    val len = numElements()
    +    while (i < len) {
    +      val d = primitiveArray(i)
    +      val b = java.lang.Double.doubleToLongBits(d)
    +      val update: Int = (b ^ (b >>> 32)).toInt
    +      result = 37 * result + update
    +      i += 1
    +    }
    +    result
    +  }
    +}
    +
    +final class GenericShortArrayData(val primitiveArray: Array[Short])
    +  extends GenericArrayData {
    +  override def array(): Array[Any] = primitiveArray.toArray
    +
    +  override def copy(): ArrayData = new 
GenericShortArrayData(primitiveArray)
    +
    +  override def numElements(): Int = primitiveArray.length
    +
    +  override def isNullAt(ordinal: Int): Boolean = false
    +  override def getShort(ordinal: Int): Short = primitiveArray(ordinal)
    +  override def toShortArray(): Array[Short] = {
    +    val array = new Array[Short](numElements)
    +    System.arraycopy(primitiveArray, 0, array, 0, numElements)
    +    array
    +  }
    +  override def toString(): String = primitiveArray.mkString("[", ",", "]")
    +
    +  override def equals(o: Any): Boolean = {
    +    if (!o.isInstanceOf[GenericShortArrayData]) {
    +      return false
    +    }
    +
    +    val other = o.asInstanceOf[GenericShortArrayData]
    +    if (other eq null) {
    +      return false
    +    }
    +
    +    val len = numElements()
    +    if (len != other.numElements()) {
    +      return false
    +    }
    +
    +    var i = 0
    +    while (i < len) {
    +      val o1 = primitiveArray(i)
    +      val o2 = other.primitiveArray(i)
    +      if (o1 != o2) {
    +        return false
    +      }
    +      i += 1
    +    }
    +    true
    +  }
    +
    +  override def hashCode: Int = {
    +    var result: Int = 37
    +    var i = 0
    +    val len = numElements()
    +    while (i < len) {
    +      val update: Int = primitiveArray(i).toInt
    +      result = 37 * result + update
    +      i += 1
    +    }
    +    result
    +  }
    +}
    +
    +final class GenericByteArrayData(val primitiveArray: Array[Byte])
    +  extends GenericArrayData {
    +  override def array(): Array[Any] = primitiveArray.toArray
    +
    +  override def copy(): ArrayData = new GenericByteArrayData(primitiveArray)
    +
    +  override def numElements(): Int = primitiveArray.length
    +
    +  override def isNullAt(ordinal: Int): Boolean = false
    +  override def getByte(ordinal: Int): Byte = primitiveArray(ordinal)
    +  override def toByteArray(): Array[Byte] = {
    +    val array = new Array[Byte](numElements)
    +    System.arraycopy(primitiveArray, 0, array, 0, numElements)
    +    array
    +  }
    +  override def toString(): String = primitiveArray.mkString("[", ",", "]")
    +
    +  override def equals(o: Any): Boolean = {
    +    if (!o.isInstanceOf[GenericByteArrayData]) {
    +      return false
    +    }
    +
    +    val other = o.asInstanceOf[GenericByteArrayData]
    +    if (other eq null) {
    +      return false
    +    }
    +
    +    val len = numElements()
    +    if (len != other.numElements()) {
    +      return false
    +    }
    +
    +    var i = 0
    +    while (i < len) {
    +      val o1 = primitiveArray(i)
    +      val o2 = other.primitiveArray(i)
    +      if (o1 != o2) {
    +        return false
    +      }
    +      i += 1
    +    }
    +    true
    +  }
    +
    +  override def hashCode: Int = {
    +    var result: Int = 37
    +    var i = 0
    +    val len = numElements()
    +    while (i < len) {
    +      val update: Int = primitiveArray(i).toInt
    +      result = 37 * result + update
    +      i += 1
    +    }
    +    result
    +  }
    +}
    +
    +final class GenericBooleanArrayData(val primitiveArray: Array[Boolean])
    --- End diff --
    
    You could just use a bitset here :)...


---
If your project is set up for it, you can reply to this email and have your
reply appear on GitHub as well. If your project does not have this feature
enabled and wishes so, or if the feature is enabled but not working, please
contact infrastructure at infrastruct...@apache.org or file a JIRA ticket
with INFRA.
---

---------------------------------------------------------------------
To unsubscribe, e-mail: reviews-unsubscr...@spark.apache.org
For additional commands, e-mail: reviews-h...@spark.apache.org

Reply via email to